%3F.png)
次のようなデータがたくさんあります。2 つの列があります。
しかし、私は次のようにする必要があります。 1 行に 1 つの名前があり、必要に応じて電子メールが追加の列として追加されます。名前ごとに電子メールの数は不明です。
何千行もの巨大なスプレッドシートに対してこれを実行する必要があります。そのため、転置などを使用して各行を手動で変換することはできません。一括/バッチ/自動化ソリューションが必要です。
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 を使用している場合、ほとんどの機能は配列関数を使用してエミュレートできます。ただし、混乱がさらに大きくなります...