• ベストアンサー

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

  • [EXCEL2000]複数の列からデータを取り出して1列にまとめたい!

    (1)一行にA列、B列、C列があります。 (2)各行のどれか1つの列には、必ずデータが入っています。 (3)データの入っているセルからデータを取り出し、D列の同じ行のセルに移します。(コピーでもかまいません) (4)結果、D列には、A列~C列のデータが1列にまとまる! 具体的には↓のようになりますが、どのような関数を使えばよいですか?教えてください。 (具体例) A列 B列 C列 D列 12         12        50  50      32     32

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

  • vlookup複数列検索

    vlookupの複数列検索でどういった計算式がいいか教えてください。  A列 B列   C列  D列   2/1 100   6/1 200 とデータがあったとして 初めにA列の2行目のデータをvlookupで計算式をかけ A列になかったら C列の2行目を検索するようにしたいのですが 本来だったらC・D列をA・B列にもっていけばいいのでしょうが、私のやりたいこととして このような2重条件の計算式に持っていきたいです。 vlookupの複数条件は色々とやり方があるみたいで、どれが適してるのか 分からず困っています。 どなたかご存知の方教えてください。 よろしくお願いします。

  • Excel2列の重複チェック(左右逆も)

    1 A B 2 C D 3 E F 4 G H 5 D H 6 B A 7 A B 8 Z N 9 A C ExcelのA列B列に上記のようにアルファベットが記載されているとします。 このときに列ごとに重複が無いかをチェックする関数をご教授頂きたく思います。 単純な重複だけではなく、 ABもBAも同じとして認識するような関数を希望しております。 データの結果として 1 A B 2 C D 3 E F 4 G H 5 D H 6 B A 重複 7 A B 重複 8 Z N 9 A C このように記載されるか 1 A B 2 C D 3 E F 4 G H 5 D H 6 7 8 Z N 9 A C このようにデータが消えるかのどちらかのデータがでる形だと助かります。 関数で実現できるのかどうか色々調べましたがまったくわからず、こちらの 方々に助けていただければ幸いです。

  • 重複するデータの抽出について(エクセル)

    エクセル2003にて重複するデータの取り出しをしたいのですが、 わからないので教えてください。 例えば   A列   B列   C列    D列    E列・・・ 1  色  1回目  2回目  3回目   4回目 2  赤   あ    a      A       0 3  白   い    b      B       1 4  黄   う    c      C       2 5  黄   え    d      D       3 6  黒   お    e      E       4 7  赤   か    f      F       5 : このデータの中から、別のシートのA1に 赤と入力したら、B1にD列のA・Fを抽出 黄と入力したら、B1にD列のC・Dを抽出をしたいです。 VLOOKUP関数を使用してみたのですが、 赤と入力すると、D列のA(1番上のデータ)のみしか抽出出来ず、Fが抽出されません。 重複するデータがあるのはA列のみで、D列には重複するデータはありません。 わかりにくい文章ですみませんが、よろしくお願いします。

  • 【Excel】重複するデータの検索

    Excel2003を使用しています。 A列にデータが入力されていたら、同行のC列の値(文字列)を取り出すようにしています。(VLOOKUP関数を使用) A列のデータは4桁の数値なのですが、そのデータの数値が重複している場合があって、そのときは行番号の小さい方のC列の値が取り出されますよね? データは同じでも別の行に入力されていれば、C列に入力されている値(文字列)も違うので、それが取り出されるようにしたいのですが、そういうことは可能でしょうか?

  • 複数列のデータ(数値&文字)を結合させて1列にまとめる方法

    (1) 一行にA列、B列、C列があり、各行のいずれか1つの列に、必ずデータが入っています。(データの入っていないセルは「0」が表示) (2) データの入っているセルからデータを取り出し、D列の同じ行のセルに移します。 (3) 結果、D列には、A列~C列のデータが1列に表示される (例) No A列 B列 C列  D列 1  1A         1A 2        2B   2B  3     3C      3C 指定した複数列のデータを1列にまとめて表示する関数またはSQLを教えて下さい。 お忙しい所 大変恐縮ではございますが、何卒宜しくお願い致します。

  • Excel関数/複数列を対象にデータ参照するには

    - Sheet 1 -   A   B  C  D 1 09:00 G  H  J 2 10:00 K  L  M 3 11:00 N  P  Q 4 12:00 R  S  T - Sheet 2 -   A   B 1 G 2 H 3 J 4 K 5 L 6 M 7 N 8 P (以下略) となっているブックがあるとお考え下さい。 シート1のA列は時刻、B~D列は仕事内容を意味する文字列データが入っています。 シート2では仕事内容がA列に並んでいます(順番はJISコード順ではありません)。 シート2のB列に、仕事内容に対応する時刻データ(シート1のA列)を転記したいと考えています(たとえばB4には"10:00"、B8には"11:00"が入る)。シート1が書き換わるのに応じてシート2のB列に変更内容を反映させるには、どのような数式を設定すればよいでしょうか。 なお、シート1のB~D列は空欄もあり得ます。 VLOOKUP関数でできるか、と思ったのですが、複数の参照列がある場合は適当でないようです。INDEXとMATCHを組み合わせてあれこれ思案していますが、どうもいい方法が思い浮かびません。 VBAの方が簡単なのかもしれませんが、関数でのスマートな実現方法があれば御教示いただければ幸いです。よろしくお願いします。

  • Excel 複数の項目合致するデータを抽出したい

    是非、よろしくお願いいたします。 以下の状況です。 sheet1には A、B、C、Dという4列があります。データは1000行くらいです。 sheet2には A、B、C、Eという4列があります。データは2000行くらいです。 この状況で、sheet1のD列の右に新しい列を作り、 「sheet1の(例えば)A1、B1、C1と合致する行のsheet2のE列データ」を、 sheet2のABC列範囲を検索して抽出したいのです。 項目が一つであればvlookup関数でできるものを「複数項目に合致」のため上手くいきません。 この3列のデータを結合して一つにしてみましたが、結合後のデータが16桁以上のため末尾が「0」になってしまい、正確に検索できません。 何か上記を可能にする方法はないでしょうか? よろしくお願いいたします。

  • エクセルの縦長(4列500行)データの印刷について教えてください。

    エクセルの縦長(4列500行)データの印刷について教えてください。 エクセルのシート1のA B C D 列にそれぞれ500行のデータがはいっています。 印刷すると、用紙の右のほう半分は空白で、10枚印刷されてしまいます。 用紙の右のほうも使って、1枚にABCD列のセット×4くらい印刷できる方法は ないでしょうか? ↓こんな感じに印刷したいのですが.. ABCD ABCD ABCD ABCD 1 1 1 1 51・・51 101・・101 151・・151 2 2 2 2 52・・52 102・・102 152・・152 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 1列の縦長のデータはINDIRECT関数でできたのですが、 ↓ =INDIRECT("YK!A"&(COLUMN(A1)-1)*50+ROW(A1)) 列が増えると複雑ですごく時間がかかってしまいます。 どなたか詳しい方教えてください。よろしくお願いします。

専門家に質問してみよう