Я пытаюсь подсчитать количество часов, отработанных каждым сотрудником над каждым проектом, над которым он работал. Но я не знаю, как выбрать, потому что ячейки, содержащие имя сотрудника, объединены, как на картинке. И если я хочу увидеть по проекту нет. 3, над которыми работали сотрудники, фильтр Excel не может использовать имя «Джон», которое соответствует только проекту № 1. Чтобы быть более ясным, мне нужно знать, как будет производиться фильтрация для ячеек A3 и A4. Если я отключу ячейки, Джон будет только в ячейке A2, и на самом деле он также работал над проектами 2 и 3.
Спасибо!
Если у вас есть объединенная ячейка, и вы пытаетесь отфильтровать ее, вы получите только первую строку:
Чтобы исправить это, вам сначала нужно запустить создав объединенные ячейки в другом месте, отключите ячейки-фильтры и заполните значениями все ячейки:
Затем вы можете скопировать объединенные ячейки и вставить специальную> форматы по ячейкам, которые хотите объединить:
Теперь вы можете удалить свои временные объединенные ячейки, и при фильтрации вы получите все строки для объединенной ячейки:
{EDIT} Вот макрос, который автоматически применяет указанные выше изменения к указанному диапазону:
Public Sub FilterableMergedCells () Dim WorkingRange как RangeSelectRange: Установить WorkingRange = Nothing при ошибке Возобновить Далее Set WorkingRange = Application.InputBox («Выбрать диапазон», «Получить диапазон», Тип: = 8) При ошибке GoTo 0 'Если вы нажмете Отменить, если WorkingRange - ничего, то выйти из Sub' Если вы выберете несколько диапазонов, если WorkingRange.Areas.Count> 1 Затем MsgBox «Пожалуйста, выберите только 1 непрерывный диапазон», vbCritical GoTo SelectRange End If Dim ScreenUpdating As Boolean, DisplayAlerts As Логическое, вычисление как XlCalculation ScreenUpdating = Application.ScreenUpdating DisplayAlerts = Application.DisplayAlerts Calculation = Application.Calculation Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculatio nManual Dim WorkingCell As Range, MergeCell As Range, MergeRange As Range, OffsetX As Long, OffsetY As Long OffsetX = WorkingRange.Cells (1, 1) .Column - 1 OffsetY = WorkingRange.Cells (1, 1) .Row - 1 ' Создать временный лист для работы с Worksheets.Add WorkingRange.Copy .Cells (1, 1) 'Перебирать ячейки в диапазоне для каждой рабочей ячейки в WorkingRange.Cells' Если это объединенная ячейка Если WorkingCell. MergeCells Then 'If - верхняя/левая объединенная ячейка в диапазоне If Not Intersect (WorkingCell, WorkingCell.MergeArea.Cells (1, 1)) Is Nothing Then Set MergeRange = WorkingCell.MergeArea' Разъединить ячейки MergeRange.MergeCells = False 'Реплицировать значение для всех ячеек в ранее объединенной области Для каждой ячейки MergeCell в MergeRange.Cells Если WorkingCell.FormulaArray = vbNull Then MergeCell.Formula = WorkingCell.Formula Else MergeCell.FormulaArray = WorkingCell.FormulaArray End If Old Next MergeCell 'Скопировать объединенное форматирование .Cells (WorkingCell.Row - OffsetY, WorkingCell.Column - OffsetX) .MergeArea.Copy WorkingCell.PasteSpecial xlPasteFormats End If End If Next WorkingCell .Delete End With Set MergeRange = Ничего не задано WorkingRange = Nothing Application.ScreenplayUpdating = ScreenUpdating = ScreenUpdating = ScreenUpdating DisplayAlerts Application.Calculation = CalculationEnd Sub
iv>
Еще один вариант;
Фон условного форматирования для всех ячеек с определенным значением (например, Джон, красный фон), а затем отфильтруйте по цвету.
Не подходит для всех приложений, но красиво и быстро.
Еще один вариант;
Фон условного форматирования для всех ячеек с определенным значением (например, Джон, красный фон), а затем фильтровать по цвету.
Не подходит для всех приложений, но красиво и быстро.