
我有很多類似這樣的數據。它有兩列:
但我需要它看起來像這樣。每行一個名稱,並根據需要將電子郵件新增為額外欄位。每個姓名的電子郵件數量未知:
我必須對一個包含數千行的巨大電子表格執行此操作。所以我無法使用轉置之類的方法手動轉換它們。我需要批量/批量/自動化解決方案。
我知道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
獲得:
答案2
從您的範例開始,A 列:姓名,B 列:電子郵件
- 輸入此陣列公式:
=INDEX($A$2:$A$6, MATCH(0, COUNTIF($D$1:$D1, $A$2:$A$16), 0))
到空白儲存格,例如 D2,然後同時按 Shift + Ctrl + Enter 鍵即可得到正確的結果,請參閱螢幕截圖:
- 向下拖曳儲存格以填滿 D 列中的所有值。
- 細胞內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)),"")
- 將儲存格向右拖曳 5-10 個儲存格(或您認為足夠的量)進行填寫,然後向下拖曳該行以填寫每個人的電子郵件。
答案3
答案4
如果您有新的Excel版本,您可以使用這些公式。
然後你可以這樣做:
藍色表格被命名為
Table1
。
使用的公式:
- E3:
=UNIQUE(Table1[Name])
- F2:N2:
="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 版本,則可以使用陣列函數來模擬大多數功能。但它變得更加混亂......