• ベストアンサー

EXCEL:列内で重複する名前の複数のデータを名前ごとに1行に並べ替える

excelデータで、以下のように、1列目に名前が入り、2列目に購入したものが入るデータがあったとします。 A あ B あ B い C う C あ C あ D い これを、 A あ B あ い C う あ あ D い のように、同じ名前のものは1行で、購入したものを右方向へそれぞれ新規セルに追加して書き換えたいのですが、関数を利用してどうしたらよいでしょうか。右方向に追加していくデータの順序はといません。同じ名前の人がいくつ購入しているかはランダムです。VLOOKUPとOFFSET関数を組み合わせるとできそうなのですが・・・よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

A列に作業列挿入します。 A  B  C  D  E  F  G   A  あ    1  2  3    B  あ  A   B  い  B   C  う  C   C  あ  D   C  あ   D  い A1セルに =B1&COUNTIF(B1:B$1,B1) 下フィル E2セルに =VLOOKUP($D2&E$1,$A:$C,3,FALSE) 右フィル、下フィルします。 エラー処理はしていません。 参考にして作ってみてください。

kassy1970
質問者

お礼

おかげさまで、本日たった今、会社業務を終了できました。 本当に助かりました。ありがとうございました。

kassy1970
質問者

補足

早速のご回答、本当にありがとうございます。 1行目の123は、半角英数で、自分で記入すればよいのですね。 また、D列のABCDは自分で記入しないといけないと思われますが、 膨大な生データB列より効率よく抽出する方法はありますか? もしくは、自分で記入しないで自動的に記述することはできないものでしょうか。よろしくお願いいたします。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>膨大な生データB列より効率よく抽出する方法 これもCOUNTIF関数を作業列として利用した方法があります。 作業列を挿入(仮にD列) D2セルに =IF(COUNTIF(B1:B$1,B2)=1,ROW(),"") 下フィルすると、最初に出てきた名前の場合のみ、その行番号が表示されます。 E2セルに =INDEX(B:B,SMALL(D:D,ROW(A1))) 下フィルすると、行番号があるデータだけ順に表示されます。 難しい関数ではありませんので、理解していただくと色々と応用ができるテクニックです。 参考にしてください。 E2セルのエラー処理を入れると =IF(ISERROR(SMALL(C:C,ROW(A1)),"",INDEX(A:A,SMALL(C:C,ROW(A1)))) こんな感じになるかと思います。

kassy1970
質問者

お礼

おかげさまで、本日たった今、会社業務を終了できました。 本当に助かりました。ありがとうございました。

関連するQ&A