- ベストアンサー
エクセルのA列で同じデータがあった場合、C列にB列のデータを合体して表示
エクセルのA列で同じデータがあった場合、C列にB列のデータを合体して表示、…というと説明不足ですが、要は以下のような感じです。 A B あああ a あああ b いいい c ううう d えええ e いいい f このときC列には A C あああ ab あああ ab いいい cf ううう d えええ e いいい cf となるようにしたいです。 ご教授ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2です! たびたびお邪魔します。 重複の数が多い場合にも対応できる方法をお望みみたいなので、 一気にやろうとすると途方もなく長い数式しか思いつきませんので ↓の画像のように作業用の表を使う方法はどうでしょうか? とりあえず、データが1000行目まで対応できる方法です。 作業列E2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(A1),"") という数式を入れ、オートフィルでずぃ~~~!っと下へコピーします。 (これは作業用の表の列方向にA列の項目を重複なしに表示するためです。) そして、F2セルに =IF(COUNT($E$2:$E$1000)<COLUMN(A1),"",INDEX($A$2:$A$1000,SMALL($E$2:$E$1000,COLUMN(A1)))) という数式を入れ列方向(右方向)のオートフィルでコピーします。 F3セルに =IF(OR(F$2="",COUNTIF($A$2:$A$1000,F$2)<ROW(A1)),"",INDEX($B$2:$B$1000,SMALL(IF($A$2:$A$1000=F$2,ROW($A$1:$A$999)),ROW(A1)))) (この数式だけが配列数式になりますので、前回同様に Shift+Ctrl+Enterキーで確定してください。) これを列方向と行方向にオートフィルでコピーします。 そして、F16セルに(画像ではF16セルにしていますが、何行目でも構いません) =CONCATENATE(F3,F4,F5,F6,F7,F8,F9,F10,F11,F12) という数式を入れ、列方向にコピーします。 とりあえず、重複が10あっても大丈夫です。 最後にC2セルに =IF(A2="","",A2&INDEX($F$16:$K$16,,MATCH(A2,$F$2:$K$2,0))) という数式を入れ、オートフィルで下へコピーしています。 以上、長々と書いた上に、結構手間がかかる方法ですが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
>こちらも試してみました。 >たしかにできるのですが、他の回答者さんと同じく2列までが限度なのでしょうか。 はい? ゴメンナサイ,ホントにちゃんと試してみたのですか? 回答1のやり方は,2つ限定などではありません。沢山あっても当然間違い無く出来ます。 それで。 やってみたけど実際できなかったのでしたら,何かあなたのお手許で実地に合わせて式をやりなおした時に間違えたか,さもなくば「実際にデータが違っている(一致していない)」かです。 たとえば「あああ」の次の「あああ」が,じつは「あああ□」とかになっているかもしれません。回答1の式のD列の結果をよく見てみると,おかしなデータの所で結果がおかしくなっているのを見つけることができます。 まっさらのシートを用意して, あなたもご自分のご相談投稿の説明を見ながら,全くその通りにサンプルデータを手で打ち直して, 改めて数式を間違えないように作成して確認してみてください。 ネットの画面から式をコピーして入れてみると,間違い無くていいかもしれません。 そのあとどうしても本番データで上手く行かなかったときは 1.あなたが実際にエクセルに入れて動かした式を,あなたの実際のエクセルの数式バーからコピーして,教えてください。 2.実際に具体的にどんなデータを入れていて,どんな結果になってしまってダメだったのか,「例えば」じゃなく「実際におかしいデータ」をウソ編集なくありのまま教えてください。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 とりあえずA列に重複は二つまでという限定になりますが・・・ ↓の画像でC2セルに =IF(COUNTIF($A$2:$A$100,A2)=1,B2,IF(COUNTIF($A$2:$A$100,A2)=2,INDEX($B$2:$B$100,SMALL(IF($A$2:$A$100=A2,ROW($A$1:$A$99)),1))&INDEX($B$2:$B$100,SMALL(IF($A$2:$A$100=A2,ROW($A$1:$A$99)),2)),"")) (100行目まで対応できるようにしています。) これは配列数式になってしまいますので、 この画面から直接コピー&ペーストしただけではエラーになると思います。 C2セルに貼り付け後、F2キーを押す、又はC2セルをダブルクリック、又は数式バー内で一度クリックします。 編集可能になりますので Shift+Ctrl+Enterキーで確定してみてください。 数式の前後に{ }マークが入り配列数式になります。 このC2セルをオートフィルで下へコピーすると画像のような感じになります。 重複が三つという場合も上記の数式で応用できますが 数式としてはかなり長いものになってしまいます。 そして、配列数式はデータ量が多い場合はコンピュータにかなりの負担をかけますので 作業用の列を使ったりする方法をおススメします。 以上、長々と書きましたが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m
お礼
ありがとうございます、 >とりあえずA列に重複は二つまでという限定になりますが・・・ 重複がいくつになるかというのがわからないのですが、重複を限定しないで出来ますでしょうか?
- keithin
- ベストアンサー率66% (5278/7941)
文字を繋ぐ「上手い」関数って意外とありませんので,次のように1ステップ置くのが結局一番簡単です。 D1に =B1&IF(COUNTIF(A2:A999,A1),INDEX(D2:D999,MATCH(A1,A2:A999,0)),"") と置いて下向けにコピー。 目的のC1に =IF(D1="","",INDEX(D:D,MATCH(A1,A:A,0))) と置いて下向けにコピー。
お礼
ありがとうございます。 こちらも試してみました。 たしかにできるのですが、他の回答者さんと同じく2列までが限度なのでしょうか。 あああ difjsiajas というような場面も出てくるので個数に限定しないやり方はないものでしょうか??
お礼
{=IF(COUNTIF($A$2:$A$100,A2)=1,B2,IF(COUNTIF($A$2:$A$100,A2)=2,INDEX($B$2:$B$100,SMALL(IF($A$2:$A$100=A2,ROW($A$1:$A$99)),1))&INDEX($B$2:$B$100,SMALL(IF($A$2:$A$100=A2,ROW($A$1:$A$99)),2)),""))} ↑これをC2にctrl+shift+Enterで確定すると、 あああ a いいい b bg ううう c c えええ d d おおお e e あああ f いいい g bg あああ h あああ I あああ j あああ k といようになり、できない、ということを言いたかったのでした。 A列で3つ以上のものが出てくるとダメです。 ウソ偽りないです。説明不足ですみません。
補足
失礼しました。回答先を間違えておりました。 しかし出来なかったのは「本当」です。 しかし出来なかったのが「ウソ」になりました。 今回改めて試してみたらうまくいきました。 ※おそらく1行目からではなく2行目からやっていたか、あるいはコピーし間違えたかです。 とてもよく出来た関数だと思っております。 ありがとうございました。 今後はよくテストしたいと思います。 またご協力頂いた他の方や閲覧して思考された方もおられるでしょう。皆様に感謝しております。 また将来の同じような悩み、質問を抱えている方がここを通りかかりましたら「この方法でOKです」ということを記しておきたいと思います。