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 解决方案也非常受欢迎。
从您的示例开始 A 列:名称,B 列:电子邮件
=INDEX($A$2:$A$6, MATCH(0, COUNTIF($D$1:$D1, $A$2:$A$16), 0))
输入一个空白单元格,例如 D2,然后同时按下 Shift + Ctrl + Enter 键以获得正确的结果,请看截图:=IFERROR(INDEX($B$2:$B$16, MATCH(0,COUNTIF($D2:D2,$B$2:$B$16)+IF($A$2:$A$16<>$D2,1,0),0)),"")小智 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 | —— |