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

Tin*_*ger 4 vba microsoft-excel

我有很多看起来像这样的数据。它有两列:

姓名 电子邮件
鲍勃 bob@example.com
鲍勃 bobby@example.com
鲍勃 bob1@example.com
莎莉 sally@example.com
莎莉 sallyabc@example.com

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

姓名 电子邮件 1 电子邮件 2 电子邮件 3
鲍勃 bob@example.com bobby@example.com bob1@example.com
莎莉 sally@example.com sallyabc@example.com

我必须为包含数千行的巨大电子表格执行此操作。所以我不能使用转置之类的东西手动转换它们中的每一个。我需要一个批量/批量/自动化解决方案。

我知道 VBA 是一个存在的东西,但我不知道如何编码。如果这是解决方案,您能否给我一些代码应该是什么样子的方向?

非 VBA 解决方案也非常受欢迎。

Ser*_*nny 6

从您的示例开始 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 个单元格(或您认为足够的单元格)填写,然后向下拖动该行以填写每个人的电子邮件。

结果: 在此处输入图片说明


来源


小智 5

使用Miller并从这个 CSV 开始:

Name,Email
bob,bob@example.com
bob,bobby@example.com
bob,bob1@example.com
sally,sally@example.com
sally,sallyabc@example.com
Run Code Online (Sandbox Code Playgroud)

你可以运行:

mlr --csv nest --ivar ";" -f Email then nest --explode --values --across-fields -f Email then unsparsify input.csv >output.csv
Run Code Online (Sandbox Code Playgroud)

获得:

姓名 电子邮件_1 电子邮件_2 电子邮件_3
鲍勃 bob@example.com bobby@example.com bob1@example.com
莎莉 sally@example.com sallyabc@example.com ——