• ベストアンサー

エクセル 複数のセルの文字を1つにまとめる

エクセルで教えて下さい A列の複数セルのデータを、B列に連結して表示する方法を教えて下さい。 ただし連結するセルの数はランダムです。 A列のデータが【¥】で始まるセルから、次の【¥】が始まるまでのセルを連結します。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

例示のデータのように実際のデータが英文字とひらがなだけなら、以下のような関数で文字列を連結できます。 (A1セル以下に文字列が入力されていて最大10個まで結合する場合) =IF(LEFT(A1)="\",PHONETIC(OFFSET(A1,,,MATCH("\*",A2:A10,0),1)),"") ひらがなデータの場合は、A列を選択してホームタブのひらがなの編集でふりがなを「ひらがな」にしてください。 ちなみに漢字データが含まれている場合は、Officeクリップボードを利用してふりがな情報を削除する必要があります。

その他の回答 (5)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

こんばんは! VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, lastRow As Long, buf As String lastRow = Cells(Rows.Count, "A").End(xlUp).Row If lastRow > 1 Then Range(Cells(2, "B"), Cells(lastRow, "B")).ClearContents End If For i = 2 To lastRow If Left(StrConv(Cells(i, "A"), vbNarrow), 1) = "\" Then buf = Cells(i, "A") For k = i + 1 To lastRow If Left(StrConv(Cells(k, "A"), vbNarrow), 1) <> "\" Then buf = buf & " " & Cells(k, "A") Else Exit For End If Next k Cells(i, "B") = Trim(buf) buf = "" i = k - 1 End If Next i End Sub 'この行まで ※ 関数でないのでA列のデータ変更があるたびにマクロを実行する必要があります。m(_ _)m

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

ANo.2です。 > 連結と不要データの削除までは考えてたのですが、 > これを1つにまとめる数式、配列などの方法はないでしょうか? Excelはセル範囲の文字列を結合する関数が用意されていませんので無理だと思います。 作業列は非表示にすれば良いので1つの式に拘る必要は無いと思いますが。 どうしてもという事でしたらB2セルに↓の式を入れ、条件付き書式で1文字目が「\」でない時はフォント色を白にして見えなくするという手も有ります。 =IF(LEFT(A3,1)="\",A2,A2&B3)

smi
質問者

お礼

追加での解答ありがとうございます。 1つにまとめたい意図は、自分が知っている以外の技術を知りたいという所と データ件数が多いため、処理時間や容量を抑えたいという思いからでした。 条件付き書式で設定する発想は思いつきませんでした。 ありがとうございます。

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.3

関数で処理する場合、Excel2007と2003以前とでネストできる数が変わるので、古い場合はそれなりに工夫が必要です。 で、お望みのことをやろうとするとこんな感じ b2に貼り付け、コピーしてください。 ¥が\に変わってしまっているので、置換してください。 以前作成したものの流用なので、”)”の数が合ってないかも 下のセルの一文字目を見て、¥でなければ連結するという単純な方式です。 =IF(left(A2,1)="\", IF(AND(left(A3,1)<>"\",left(A4,1)<>"\",left(A5,1)<>"\",left(A6,1)<>"\",left(A7,1)<>"\") ,IF(AND(left(A8,1)<>"\",left(A9,1)<>"\",left(A10,1)<>"\") ,IF(left(A11,1)<>"\" ,IF(left(A12,1)<>"\" ,IF(left(A13,1)<>"\" ,a2&a3&a4&a5&a6&a7&a8&a9&a10&a11&a12&a13 ,a2&a3&a4&a5&a6&a7&a8&a9&a10&a11&a12) ,b2&a3&a4&a5&a6&a7&a8&a9&a10&a11) ,b2&a3&a4&a5&a6&a7&a8&a9&a10) ,IF(left(A8,1)<>"\" ,IF(left(A9,1)<>"\" ,b2&a3&a4&a5&a6&a7&a8&a9 ,b2&a3&a4&a5&a6&a7&a8) ,b2&a3&a4&a5&a6&a7) ) ,IF(left(A3,1)<>"\" ,IF(left(A4,1)<>"\" ,IF(left(A5,1)<>"\" ,IF(left(A6,1)<>"\" ,a2&a3&a4&a5&a6 ,a2&a3&a4&a5) ,a2&a3&a4) ,a3) ,a2) ) ) ,"")

smi
質問者

補足

解答ありがとうございます。 ネストすれば1つの数式で処理が可能なんですね。 バージョンは2007なので、そのままこぴぺで利用できました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

作業列を使います。 添付の図を参照してください。 B2セル:=IF(LEFT(A2,1)="\",C2,"") C2セル:=IF(LEFT(A3,1)="\",A2,A2&C3)

smi
質問者

補足

画像つきの解答ありがとうございます。 連結と不要データの削除までは考えてたのですが、 これを1つにまとめる数式、配列などの方法はないでしょうか?

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.1

手作業でやるなら B2セルに「=IF(LEFT(A3)="¥",A2,A2&B3)」と入れて下方向にコピー B列全体を値に戻す フィルタでB列から「¥」を含まないデータを抽出してクリア 自動でやるならマクロでどうぞ。

smi
質問者

補足

解答ありがとうございます。 いただいた数式ですと、 セルB2には、A2からA16まで、 セルB7には、A7からA16まで連結されてしまいました。 ¥から¥までにする数式はどうなりますでしょうか。 よろしくお願いします