У меня есть электронная таблица с примерно 2000 строками, которые мне нужно сгруппировать на основе содержимого примерно 12 столбцов. Ключевым моментом здесь является то, что строки могут отличаться по количеству разных столбцов, но для этих конкретных 12 столбцов, если они имеют эквивалентные значения для каждой строки в каждом соответствующем столбце, я хочу сгруппировать их вместе и присвоить им номер, имя, что угодно.
Как лучше всего это сделать? Есть простой способ? Проблема с фильтрацией на основе значения определенного столбца заключается в том, что в каждом столбце может быть несколько разных значений, а количество комбинаций огромно, поэтому для меня вручную выбирать каждую комбинацию было бы огромной головной болью.
Простой способ:
Создайте еще один столбец, который является объединением всех 12 столбцов, а затем выполните сортировку по этому столбцу.
Более сложный способ:
Используйте VBA, возможно, запускаемый нажатием кнопки.
Объедините 12 столбцов в строка, создавая массив из этих строк.
Сортировка всех внутри, отслеживая, какая строка каждая, а затем выводить так, как вы хотите.
Попробуйте сводные таблицы . Они позволят вам группировать, суммировать, фильтровать и сортировать данные с большой гибкостью.
Существует несколько требований к тому, как ваши исходные данные должны быть расположены для наиболее эффективного поворота. . Не видя своих данных, трудно понять, насколько они подходят.
Попробуйте сводные таблицы . Они позволят вам группировать, суммировать, фильтровать и сортировать данные с большой гибкостью.
Существует несколько требований к тому, как ваши исходные данные должны быть расположены для наиболее эффективного поворота. . Не видя ваших данных, трудно понять, насколько они подходят.
Вы можете сгруппируйте строки на основе похожих значений , используя следующую формулу:
Пример: Имя Место Раджеш МаркапурРаджеш ВиджаявадаСуреш Миннеаполис Махеш Гунтур Махеш ЧеннаиБриджеш МаркапурСатиш БубанешварСатиш Маркапур
pre>И если вы хотите сгруппировать эти данные на основе имени, как показано ниже
Excel col ABC Excelrow Имя группы Место 1 1 Раджеш Маркапур 2 1 Раджеш Виджаявада 3 2 Суреш Миннеаполис 4 3 Махеш Гунтур 5 3 Махеш Ченнаи
Используйте эту формулу,
= if (B2 = B3, A1, A2 + 1)
-
1Я думаю, OP хочет избежать вручную группируя их. Вы это предлагаете? – Engineer Toast 30 сен. ’15 в 20:29
Вы можете группировать строки на основе похожих значений , используя эту формулу:
Пример: Имя Место Раджеш Маркапур Раджеш Виджаявада Суреш Миннеаполис Махеш Гунтур Махеш Ченнаи Бриджеш Маркапур Сатиш Бубанешвар Сатиш Маркапур
И если вы хотите сгруппировать эти данные как ниже
Excel col ABC Excelrow Имя группы Место 1 1 Раджеш Маркапур 2 1 Раджеш Виджаявада 3 2 Суреш Миннеаполис 4 3 Махеш Гунтур 5 3 Махеш Ченнаи
Используйте эту формулу, = if (B2 = B3, A1, A2 + 1)
Группировка похожих строк вместе является формой кластеризации. В Википедии есть достойное введение в многомерный кластерный анализ, вы можете начать с него.
Существует много методов выполнения кластеризации, но любой из этих методов будет сложно реализовать в контексте Excel. формулы.
Группировка похожих строк вместе – это форма кластеризации. В Википедии есть достойное введение в многомерный кластерный анализ, вы можете начать с него.
Существует много методов выполнения кластеризации, но любой из этих методов будет сложно реализовать в контексте Excel. формулы.
Может быть, вам стоит посмотрите на ASAP Utilities. Это надстройка для Excel, которая, помимо прочего, позволяет выполнять условный выбор строк и столбцов. Это бесплатно (для некоммерческого использования), так что вы можете попробовать.
Может быть, вам стоит взглянуть на ASAP Utilities. Это надстройка для Excel, которая, среди прочего, позволяет выполнять условный выбор строк и столбцов. Это бесплатно (для некоммерческого использования), так что вы можете попробовать.
Группировка строк в Excel с похожими значениями
У меня есть таблица с первым столбцом, содержащим некоторые числа, и я хочу перебрать и сгруппировать строки моей таблицы на основе значений в этом первом столбце, чтобы их можно было свернуть. Так похоже на то, что делает shift + alt + right. В качестве примера я хотел бы преобразовать таблицу с такими строками
1
1
2
3
3
3
В такую таблицу, где каждая группа расширяется и находится на одном уровне.
1
2
3
Я пытался изменить макрос, который нашел по https ://superuser.com/questions/867796/excel-macro-to-group-rows-based-on-a-cell-value. Мой текущий макрос …
Dim LastRow As IntegerLastRow = ActiveSheet.UsedRange.Rows.CountDim StartRow As IntegerStartRow = 8groupBegin = StartRow 'Для первой группы For i = StartRow To LastRow Если Cells (i, 1) .Value Cells (i + 1, 1) .Value Then groupEnd = i - 1 Rows (groupBegin & ":" & groupEnd) .Select Selection.Rows.Group groupBegin = i + 1 ' добавление одного, чтобы сохранить первую строку группы End IfNext iRows (groupBegin & ":" & LastRow) .SelectSelection.Rows.GroupActiveSheet.Outline.ShowLevels RowLevels: = 1 'Свернуть все группы
Однако это группирует все строки вместе. Будем признательны за любые рекомендации о том, как этого добиться.
Ниже приведен код для выполнения задачи. Обратите внимание, что код предполагает, что числа отсортированы, и между строками нет пробелов..
Sub Group_Similar_Rows () Dim i As LongDim lRef_Number As LongDim lNumber As LongDim lCount As LongDim lStarting_Row As LongDim lDate_Column As LongDim wks As WorksheetlStarting_Row = 1 'Измените это на начальную строку your datalDate_Column = 1 'Замените это на индекс столбца вашего набора данных wks = ThisWorkbook.ActiveSheetlRef_Number = wks.Cells (lStarting_Row, lDate_Column) lCount = -1For i = 0 До 100000', если ваша запись данных больше 100000, увеличьте это значение Если wks.Cells (lStarting_Row + i, lDate_Column) = "" И lCount lRef_Number = wksRef_Number .Cells (lStarting_Row + i, lDate_Column) Если i> 1, то lCount = lCount - 1 Конец, если lCount> 0, то lCount = 1 + lCount wks.Rows (lStarting_Row + i - lCount & ":" & lStarting_Row + i - 2 ) .Group End If lCount = 0 End IfNext iEnd Sub
Ниже показано изображение, показывающее результат выполнения введите код:


Ниже приведен код для выполнения задачи. Обратите внимание, что в коде предполагается, что числа отсортированы и между строками нет пробелов.
Sub Group_Similar_Rows () Dim i As LongDim lRef_Number As LongDim lNumber As LongDim lCount As LongDim lStarting_Row As LongDim lDate_Column As LongDim wks As WorksheetlStarting_Row = 1 'Измените это на начальную строку вашего datalDate_Column = 1' Замените это на индекс столбца вашего набора данных wks = ThisWorkbook.ActiveSheetlumnRef_Number = wks.Celling_s (lStarting_s (lStarting_Row)) 1 Для i = 0 до 100000 ', если количество введенных вами данных превышает 100 000, увеличьте это значение Если wks.Cells (lStarting_Row + i, lDate_Column) = "" И lCount lRef_Number Тогда lRef_Number = wks.Cells (lStarting_Row + i, lDate_Column) Если i> 1, то lCount = lCount - 1 Конец Если lCount> 0, то lCount = 1 wks.Rows (lStarting_Row + i - lCount & ":" & lStarting_Row + i - 2). Группа End If lCount = 0 End IfNext iEnd Sub
На рисунке ниже показан результат выполнения кода:
Пример моего комментария
dim i as long, j as long for i = 10 to 1 Step -1, если не ячейки (i, 1) .value = cells (i-1,1) .value, затем rows (i) .insertnext ifor j = от 1 до 10, если cells (j, 1) .value "", то rows (j) .groupnext j
не тестировалось, но должен дать соответствующий пример.

Пример моего комментария
dim i as long, j as long for i = От 10 до 1 Шаг -1, если не ячейки (i, 1) .value = cells (i-1,1) .value, то строки (i) .insertnext ifor j = от 1 до 10, если ячейки (j, 1) .value "" затем rows (j) .groupnext j
непроверено, но должен дать соответствующий пример.