Как сгруппировать похожие строки в Excel

У меня есть электронная таблица с примерно 2000 строками, которые мне нужно сгруппировать на основе содержимого примерно 12 столбцов. Ключевым моментом здесь является то, что строки могут отличаться по количеству разных столбцов, но для этих конкретных 12 столбцов, если они имеют эквивалентные значения для каждой строки в каждом соответствующем столбце, я хочу сгруппировать их вместе и присвоить им номер, имя, что угодно.

Как лучше всего это сделать? Есть простой способ? Проблема с фильтрацией на основе значения определенного столбца заключается в том, что в каждом столбце может быть несколько разных значений, а количество комбинаций огромно, поэтому для меня вручную выбирать каждую комбинацию было бы огромной головной болью.


Простой способ:

Создайте еще один столбец, который является объединением всех 12 столбцов, а затем выполните сортировку по этому столбцу.

Более сложный способ:

Используйте VBA, возможно, запускаемый нажатием кнопки.

Объедините 12 столбцов в строка, создавая массив из этих строк.

Сортировка всех внутри, отслеживая, какая строка каждая, а затем выводить так, как вы хотите.


2

Попробуйте сводные таблицы . Они позволят вам группировать, суммировать, фильтровать и сортировать данные с большой гибкостью.

Существует несколько требований к тому, как ваши исходные данные должны быть расположены для наиболее эффективного поворота. . Не видя своих данных, трудно понять, насколько они подходят.

Улучшите этот ответ
ответил 18 мая 2011, 22:51
добавить комментарий |

Попробуйте сводные таблицы . Они позволят вам группировать, суммировать, фильтровать и сортировать данные с большой гибкостью.

Существует несколько требований к тому, как ваши исходные данные должны быть расположены для наиболее эффективного поворота. . Не видя ваших данных, трудно понять, насколько они подходят.


1

Вы можете сгруппируйте строки на основе похожих значений , используя следующую формулу:

  Пример: Имя Место Раджеш МаркапурРаджеш ВиджаявадаСуреш Миннеаполис Махеш Гунтур Махеш ЧеннаиБриджеш МаркапурСатиш БубанешварСатиш Маркапур   pre> 

И если вы хотите сгруппировать эти данные на основе имени, как показано ниже

  Excel col ABC Excelrow Имя группы Место 1 1 Раджеш Маркапур 2 1 Раджеш  Виджаявада 3 2 Суреш Миннеаполис 4 3 Махеш Гунтур 5 3 Махеш Ченнаи  

Используйте эту формулу, = if (B2 = B3, A1, A2 + 1)

Улучшить этот ответ
отредактировал 30 мая ’12 в 18:24
Jeremy W
3,5791717 серебряных значков 3535 бронзовых значков
ответ дан 30 мая ’12 в 16:51
  • 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)


0

Группировка похожих строк вместе является формой кластеризации. В Википедии есть достойное введение в многомерный кластерный анализ, вы можете начать с него.

Существует много методов выполнения кластеризации, но любой из этих методов будет сложно реализовать в контексте Excel. формулы.

Улучшить этот ответ
ответ дан 19 мая ’11 в 0:05
добавить комментарий |

Группировка похожих строк вместе – это форма кластеризации. В Википедии есть достойное введение в многомерный кластерный анализ, вы можете начать с него.

Существует много методов выполнения кластеризации, но любой из этих методов будет сложно реализовать в контексте Excel. формулы.


0

Может быть, вам стоит посмотрите на ASAP Utilities. Это надстройка для Excel, которая, помимо прочего, позволяет выполнять условный выбор строк и столбцов. Это бесплатно (для некоммерческого использования), так что вы можете попробовать.

Улучшите этот ответ
ответил 19 мая 2011 в 7:05
добавить комментарий |

Может быть, вам стоит взглянуть на 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 'Свернуть все группы  

Однако это группирует все строки вместе. Будем признательны за любые рекомендации о том, как этого добиться.


2

Ниже приведен код для выполнения задачи. Обратите внимание, что код предполагает, что числа отсортированы, и между строками нет пробелов..

  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  

Ниже показано изображение, показывающее результат выполнения введите код:

отредактировано 7 октября ’20 в 13:17
TylerH
18.6k1313 золотых знаков6363 серебряных знака8484 бронзовых знака
ответил 24 августа 2018 в 17:52
добавить комментарий |

Ниже приведен код для выполнения задачи. Обратите внимание, что в коде предполагается, что числа отсортированы и между строками нет пробелов.

  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  

На рисунке ниже показан результат выполнения кода:


1

Пример моего комментария

  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  

не тестировалось, но должен дать соответствующий пример.

ответил 24 августа 2018 в 17:11
добавить комментарий |

Пример моего комментария

  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  

непроверено, но должен дать соответствующий пример.

Оцените статью
futurei.ru
Добавить комментарий