• 締切済み

エクセル2007 複数セルのデータを1つに連結

いつもお世話になります。 エクセルで、複数セルのデータを1つに連結して表示させる方法を教えてください。 データ件数が多い(1000件以上)ため、 関数(CONCATENATE)や、連結記号(&) は、セルを1つずつ選択する時間が掛かるため、 その他に方法があれば教えてください。 また関数(CONCATENATE)でセル範囲をドラッグなど簡単に指定できる方法があれば教えてください。 【やりたいこと】  A列が同じデータの場合、B列の値をC列のセルに連結して表示させたい 【イメージ】 A列 B列 C列 xxx aaa aaa bbb ccc ddd eee xxx bbb xxx ccc xxx ddd xxx eee yyy ffff fff ggg hhh yyy gggg yyy hhh zzz iii iii jjj zzz jjj

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

C列にデータ結合する場合に区切り文字(仮にスペース)を考慮すると関数では厳しいと思う。 面白そうなのでマクロにしてみましたが如何でしょうか。 (1)対象のシートタブ上で右クリック→コードの表示→サンプルコードを貼り付け→F5キー押下 サンプルコード Sub Sample() Dim wk() Set Dic = CreateObject("Scripting.Dictionary") For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row buf1 = Cells(i, 1) buf2 = Cells(i, 2) If Not Dic.Exists(buf1) Then Dic.Add buf1, buf2 ReDim Preserve wk(n) wk(n) = i: n = n + 1 Else Dic.Item(buf1) = Dic.Item(buf1) & " " & buf2 End If Next i ''出力 Keys = Dic.Items For j = LBound(wk) To UBound(wk) Cells(wk(j), "C") = Keys(j) Next j End Sub

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

「手作業ならできるが、面倒だ」という類のことは、エクセルではそれを避けるには、VBAでやるしかない。勉強して。 VBAでやるとしても (1)この質問に書いてないのは、セルは3列だけか。存在する列全部を結合するのか (2)セル結合をしたほうが良いのか(VBAなら出来ないことも無いから)?値を結合して所定のセルに入れるのか。 ーー こんな簡単なコードで出来るのでは? Sub test01() d = Range("a65536").End(xlUp).Row MsgBox d For i = 2 To d c = Cells(i, 256).End(xlToLeft).Column MsgBox c s = "" For j = 1 To c s = s & Cells(i, j) Next j Cells(i, "G") = s Next i End Sub セル結合するなら 上記の一部後半を Range(Cells(i, "A"), Cells(i, j - 1)).MergeCells = True Cells(i, "G") = s Cells(i, "A") = s Next i End Sub >関数(CONCATENATE)でセル範囲をドラッグなど簡単に指定できる方法があれば ない。 =CONCATENATE(A2,B2,C2) などのA2,B2,C2はセルをクリックで指定できる。CONCATENATEだからではなく、関数一般で出来るはなし。 A2:C2のような指定は出来ないようだ。疑問に思ったら解説書や、WEBで「エクセル関数 CONCATENATE」で照会するとかやってみる労を惜しむな。

すると、全ての回答が全文表示されます。
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

実際にセルに入力されているデータが、アルファベットであれば、以下の数式をC1に入れ、下へコピーでできます。 =IF(COUNTIF(A$1:A1,A1)=1,PHONETIC(OFFSET(B1,0,0,COUNTIF(A:A,A1))),"") そうではない場合、結合する部分をVBAを使用し、ユーザー定義関数等にすればできます。 VBEの画面で標準モジュールを追加し、以下のように記述 Function joint(R As Range) As String Dim C As Range For Each C In R joint = joint & C.Value Next C End Function セルには、以下のように入力。 =IF(COUNTIF(A$1:A1,A1)=1,joint(OFFSET(B1,0,0,COUNTIF(A:A,A1))),"")

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • 長期間使用しているプリンターDCP-J973Nで、突然カートリッジを探知しないエラーメッセージが表示されました。カートリッジの入れ直しや新しいカートリッジへの交換を試みましたが、問題は解決しませんでした。
  • プリンターDCP-J973Nでカートリッジを探知できないトラブルが発生。カートリッジの再挿入や新カートリッジの使用にもかかわらず、エラーが解消されません。使用環境はWindows11、無線LAN接続、回線はひかり回線です。
  • DCP-J973Nがカートリッジを探知できないエラーについて相談があります。長年使用しており、様々なカートリッジの調整を試みましたが、未だに問題が解決しません。使用OSはWindows11で、無線LAN接続です。
回答を見る

専門家に質問してみよう