如何在 Mac Excel 上将行数据批量转换为列(转置不适合)?

如何在 Mac Excel 上将行数据批量转换为列(转置不适合)?

我有很多类似这样的数据。它有两列:

但我需要它看起来像这样。每行一个名字,并根据需要将电子邮件添加为额外列。每个名字的电子邮件数量未知:

姓名 电子邮件 1 电子邮件 2 电子邮件 3
鲍勃 [电子邮件保护] [电子邮件保护] [电子邮件保护]
莎莉 [电子邮件保护] [电子邮件保护]

我必须对包含数千行的大型电子表格执行此操作。因此我无法使用转置之类的方法手动转换每一行。我需要批量/批量/自动化解决方案。

我知道 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
鲍勃 [电子邮件保护] [电子邮件保护] [电子邮件保护]
莎莉 [电子邮件保护] [电子邮件保护] -

答案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. 在细胞内E2您希望在电子邮件中添加此公式=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

使用公式:

  • E3:=UNIQUE(Table1[Name])
  • F2:氮:="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;""))

表格由新版 Excel 的 SPILL 函数填充。

示例文件:https://1drv.ms/x/s!ArVkYVSHnABFiiqzBYLPmoubvdHY?e=p7wOeF

如果您使用的是旧版 Excel,则可以使用数组函数模拟大多数功能。但它会变得更加混乱...

相关内容