ここから本文です

【エクセル】行で重複しているものを統合させ、1行にまとめる方法について教えて...

asdf_takachoさん

2013/9/507:20:39

【エクセル】行で重複しているものを統合させ、1行にまとめる方法について教えて下さい!

項目A 項目B 項目C
あ かかか カカカ
あ ききき キキキ
あ くくく ククク
あ けけけ
あ こここ
い さささ サササ
い ししし シシシ
う すすす ススス
う せせせ
え そそそ

上記のデータ(※数字ではなく文字)において、行で重複しているものを統合させて下記のように1行に書き換えたいです。

項目A 項目B 項目C
あ かかかきききけけけこここ カカカキキキククク
い さささししし サササシシシ
う すすすせせせ ススス
え そそそ

※分かりにくければ、下記サイト・添付画像をご参考いただけますでしょうか。
http://www.excel.studio-kazu.jp/kw/20050706173827.html

重複を1つにするだけでなく、同時に別の行のセル(文字)も1つに統合させたいのですが、これは可能でしょうか?もしできる方法があれば、教えていただきたいです。CONCATENATE関数、統合などもいろいろ調べてみたのですがわかりません。どうぞよろしくお願いいたします。

補足>>実際には項目Aで例えば「あ」が何行まで重複することが考えられるのでしょう?
最大でも、5行くらいです。ただし、項目Aの重複は不規則に並んでいます。

カカカキキキククク,ススス,Sheet1,A1,項目,CONCATENATE関数,すす

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
9,052
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

mskz1954さん

2013/9/509:43:10

関数では厳しいと思いまいたのでマクロ(VBA)ですが如何でしょうか。
データをSheet1としてSheet2に並び替えています。
Sheet1のシートタブ上で右クリック→コードの表示→サンプルコード貼り付け→シート上でAlt+F8キー押下、sample実行

Sub sample()
Dim i As Long, db, wk, wk1
Set db = CreateObject("Scripting.Dictionary")
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
wk = Cells(i, "A")
If db.exists(wk) Then
wk1 = db(wk)
Else
wk1 = ","
End If
wk1 = Split(wk1, ",")
wk1(0) = wk1(0) & Cells(i, "B")
wk1(1) = wk1(1) & Cells(i, "C")
db(wk) = Join(wk1, ",")
Next
wk = db.keys
With Sheets("sheet2")
.Cells.ClearContents
Range("A1:C1").Copy .Cells(1, "A")
For i = 0 To UBound(wk)
.Cells(i + 2, "A") = wk(i)
.Cells(i + 2, "B").Resize(, 2) = Split(db(wk(i)), ",")
Next
End With
Set db = Nothing
End Sub

質問した人からのコメント

2013/9/11 16:36:01

参考になりました!皆さま、ありがとうございました!

このQ&Aで解決しましたか?質問する

閉じる

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

taihenda3356さん

2013/9/509:12:50

統合は集計の機能ですからデータが文字列の時は無理かと思います。文字列を結合するCONCATENATE関数は範囲指定が出来なくて一つ一つのセルを指定するしかないので不便ですがしょうがないですね。
関数で一回横に書き出して結合する、という方法でやってみました。
F2に
=IF(SUMPRODUCT(($A$1:$A$11=$E2)*($B$1:$B$11<>""))<COLUMN(A1),"",INDEX($B$1:$B$11,MATCH($E2,$A$1:$A$11,0)+COLUMN(A1)-1))
横(空白が出るまで)下にオートフィルでコピー

※A列が昇順にならんでいるのが条件です。
F7に
=IF(SUMPRODUCT(($A$1:$A$11=$E2)*($C$1:$C$11<>""))<COLUMN(A1),"",INDEX($C$1:$C$11,MATCH($E2,$A$1:$A$11,0)+COLUMN(A1)-1))
(BがCになっただけです)
横下にオートフィルでコピー
これで最長列がJ列だと分かるので
D13に
=CONCATENATE(F2,G2,H2,I2,J2)&" "&CONCATENATE(F7,G7,H7,I7,J7)
下にオートフィルでコピー

統合は集計の機能ですからデータが文字列の時は無理かと思います。文字列を結合するCONCATENATE関数は範囲指定...

mitokuboさん

編集あり2013/9/514:21:37

実際には項目Aで例えば「あ」が何行まで重複することが考えられるのでしょう。
補足を有難うございます。

5行が最高ということで関数で対応する方法です。
お示しの表がシート1に有って2行目から下方にデータが入力されているとします。
操作が複雑になりますのでたくさんの作業列を設けて対応します。

D2セルには次の式を入力して下方にドラッグコピーします。

=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,ROUNDDOWN(MAX(D$1:D1),-2)+101,INDEX(D$1:D1,MATCH(A2,A$1:A1,0))+COUNTIF(A$1:A1,A2)))

項目Aの重複は複雑に並んでいても問題はありません。
F2セルには次の式を入力して下方にドラッグコピーします。

=IF(ROW(A1)>MAX(D:D)/100,"",INDEX($A:$A,MATCH(ROW(A1)*100+1,$D:$D,0)))

G2セルには次の式を入力してP2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF($F2="","",IF(COLUMN(A1)=1,INDEX($B:$B,MATCH(ROW(A1)*100+COLUMN(A1),$D:$D,0)),IF(COLUMN(A1)<=5,IF(COUNTIF($D:$D,ROW(A1)*100+COLUMN(A1))=0,F2,F2&INDEX($B:$B,MATCH(ROW(A1)*100+COLUMN(A1),$D:$D,0))),IF(COLUMN(A1)=6,IF(COUNTIF($D:$D,ROW(A1)*100+COLUMN(A1)-5)=0,"", INDEX($C:$C,MATCH(ROW(A1)*100+COLUMN(A1)-5,$D:$D,0))),IF(COLUMN(A1)<=10, IF(COUNTIF($D:$D,ROW(A1)*100+COLUMN(A1)-5)=0,F2, F2&INDEX($C:$C,MATCH(ROW(A1)*100+COLUMN(A1)-5,$D:$D,0))),"")))))

これで答えは出ているようなものですがシート2にお求めの答えを表示させるとしてA2セルには次の式を入力してC2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(COLUMN(A1)=1,Sheet1!$F2,IF(COLUMN(A1)=2,Sheet1!$K2,IF(COLUMN(A1)=3,IF(Sheet1!$P2=0,"",Sheet1!$P2),"")))

最後にB列やC列の幅を広げて終了します。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。