Как выполнить массовое преобразование строковых данных в столбцы в Mac Excel (транспонирование не подходит)?

Как выполнить массовое преобразование строковых данных в столбцы в Mac Excel (транспонирование не подходит)?

У меня много данных, которые выглядят примерно так. Они состоят из двух столбцов:

Имя Электронная почта
боб [email protected]
боб [email protected]
боб [email protected]
Салли [email protected]
Салли [email protected]

Но мне нужно, чтобы это выглядело так. Одно имя в строке, с адресами электронной почты, добавленными в качестве дополнительных столбцов по мере необходимости. Для каждого имени есть неизвестное количество адресов электронной почты:

Имя Электронная почта 1 Электронная почта 2 Электронная почта 3
боб [email protected] [email protected] [email protected]
Салли [email protected] [email protected]

Мне нужно сделать это для огромной таблицы с тысячами строк. Поэтому я не могу вручную преобразовать каждую из них с помощью чего-то вроде транспонирования. Мне нужно массовое/пакетное/автоматизированное решение.

Я знаю, что VBA существует, но я не знаю, как его закодировать. Если это решение, можете ли вы дать мне направление, как должен выглядеть код?

Решения, не использующие VBA, также приветствуются.

решение1

С использованиемМиллери начиная с этого CSV:

Name,Email
bob,[email protected]
bob,[email protected]
bob,[email protected]
sally,[email protected]
sally,[email protected]

Вы можете запустить:

mlr --csv nest --ivar ";" -f Email then nest --explode --values --across-fields -f Email then unsparsify input.csv >output.csv

чтобы получить:

Имя Электронная почта_1 Электронная почта_2 Электронная почта_3
боб [email protected] [email protected] [email protected]
Салли [email protected] [email protected] -

решение2

Начиная с вашего примера, столбец A: Имя, столбец B: Электронная почта.

  1. Введите эту формулу массива: =INDEX($A$2:$A$6, MATCH(0, COUNTIF($D$1:$D1, $A$2:$A$16), 0)) в пустую ячейку, например D2, и нажмите клавиши Shift + Ctrl + Enter одновременно, чтобы получить правильный результат, см. снимок экрана:

введите описание изображения здесь

  1. Перетащите ячейку вниз, чтобы заполнить все значения в столбце D. Результат будет таким, как на снимке экрана выше.
  2. В клеткеЕ2где вы хотите, чтобы ваш адрес электронной почты вставьте эту формулу=IFERROR(INDEX($B$2:$B$16, MATCH(0,COUNTIF($D2:D2,$B$2:$B$16)+IF($A$2:$A$16<>$D2,1,0),0)),"")
  3. Перетащите ячейку вправо на 5–10 ячеек (или на столько, сколько вы считаете достаточным), чтобы заполнить ее, а затем перетащите строку вниз, чтобы заполнить адреса электронной почты каждого человека.

Результат: введите описание изображения здесь


ИСТОЧНИК

решение3

Добавьте вспомогательный столбец с формулой:

="Mail "&COUNTIF($A$2:A2,A2)

введите описание изображения здесь

Открыть редактор Power Query — выбратьСтолбец1- идти кТрансформировать-Поворотная колонна- выбиратьЭлектронная почтаи подРасширенный вариантвыбиратьНе агрегировать:

введите описание изображения здесь

решение4

Если у вас новая версия Excel, вы можете использовать эти формулы.

Тогда вы можете сделать это следующим образом: введите описание изображения здесь Синийтаблица имеет имя Table1.

Использованные формулы:

  • Э3:=UNIQUE(Table1[Name])
  • Ф2:Н2:="Mail"&COLUMN()-COLUMN($E$2)
  • F3 (растянута вниз):=INDEX(Table1[Mail];FILTER(TRANSPOSE(SORT(UNIQUE((ROW(Table1[Name])-ROW(Table1[[#Headers];[Name]]))*($E3=Table1[Name]))));TRANSPOSE(SORT(UNIQUE((ROW(Table1[Name])-ROW(Table1[[#Headers];[Name]]))*($E3=Table1[Name]))))>0;""))

Таблица заполнена функцией SPILL новых версий Excel.

Пример файла:https://1drv.ms/x/s!ArVkYVSHnABFiiqzBYLPmoubvdHY?e=p7wOeF

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

Связанный контент