名簿などの横並びの文字列を結合

マクロ講座67回-2 
横並びの文字列を結合

横並びの文字列を結合する Excel2013 マクロ講座 67b回

名簿などで別々のセルに分けられた文字を結合する

名簿などのデータベースでは、管理しやすいように別々のセルに分けてデータを入力してあります。 そのデータを他で利用したい時に、全部まとめてひとつの文字列にしたいなどというケースがありますが、 手作業では大変ですし、関数を使っても大量に結合する場合は面倒です。
そこで今回は、横並びの文字列をマクロで結合しましょう。 またデータ数が相当ある場合を想定して、範囲の行数が何行あるかをマクロで取得します。

(サンプルファイルは、こちらから マクロ67b回サンプルデータ

データベースなどの横並びの文字列を結合

文字列結合のイメージ的には、以下のように分割された文字列を1つに結合しようということです。
横並びの文字列を結合するマクロ1
この例では住所ですが、データベースでは、県ごとや市町村ごとに分割した方が、都合がいいのですが、それを利用するときは、結合したい場合もあります。
横並びの文字列を結合するマクロ2

行数を取得する

この作業をマクロで一瞬で行います。まず、行数が何行あるかを調べ、その行数分の結合処理をしていこうと思います。 行数を取得する方法のひとつが、
Selection(Selection.Count).Rowです。
横並びの文字列を結合するマクロ3
サンプルでは、1行目から範囲選択した最終行までを結合処理します。コードはこのようになります。 そして、実行したい処理の部分にFor Each~Nextを使います。
    For i = 1 To Selection(Selection.Count).Row
    	実行したい処理
    Next i
コードのポイントを図にすると、"最初の行から最後までを、指定した処理をしなさい。"
横並びの文字列を結合するマクロ4
実行したい処理For Each~Nextは、文字列を結合する前回のコードをRangeではなく、Cellsで指定した形にします。
      For Each 範囲 In Range(Cells(i, 1), Cells(i, 4))
          結合文字 = 結合文字 & 範囲.Text & " "
      Next 範囲
      Cells(i, 5).Value = 結合文字

横並びの文字列を結合するマクロ5

最終的にコードはこのような形になります。
Sub 選択範囲の文字列結合4()
'半角スペースで区切り
    Dim 結合文字 As String
    Dim 範囲 As Range
    Dim i As Integer '行数が3万を超えるならLongで
    For i = 1 To Selection(Selection.Count).Row
      結合文字 = ""
      For Each 範囲 In Range(Cells(i, 1), Cells(i, 4))
          結合文字 = 結合文字 & 範囲.Text & " "
      Next 範囲
      Cells(i, 5).Value = 結合文字
    Next i
End Sub
あらかじめショートカットキーのCtrl + Shift + ↓ で最終行までを選択しておいてから、マクロを実行します。
横並びの文字列を結合するマクロ6

UsedRangeで範囲を選択せずに実行する

コードが少し増えてもいいなら、UsedRangeで範囲を選択せずに文字列の結合を実行するマクロができます。 UsedRangeの場合は、オブジェクトなのでSetを使います。
Sub 範囲を選択しない文字結合5()
 '半角スペースで区切り 範囲を選択しないでOK
    Dim 結合文字 As String
    Dim 範囲 As Range
    Set 範囲 = ActiveSheet.UsedRange
    Dim i As Integer
    For i = 1 To 範囲.Rows.Count
      結合文字 = ""
      For Each 範囲 In Range(Cells(i, 1), Cells(i, 4))
          結合文字 = 結合文字 & 範囲.Text & " "
      Next 範囲
      Cells(i, 5).Value = 結合文字
    Next i
End Sub