名簿などの横並びの文字列を結合
マクロ講座67回-2
横並びの文字列を結合する Excel2013 マクロ講座 67b回
名簿などで別々のセルに分けられた文字を結合する
名簿などのデータベースでは、管理しやすいように別々のセルに分けてデータを入力してあります。
そのデータを他で利用したい時に、全部まとめてひとつの文字列にしたいなどというケースがありますが、
手作業では大変ですし、関数を使っても大量に結合する場合は面倒です。
そこで今回は、横並びの文字列をマクロで結合しましょう。
またデータ数が相当ある場合を想定して、範囲の行数が何行あるかをマクロで取得します。
(サンプルファイルは、こちらから マクロ67b回サンプルデータ)
データベースなどの横並びの文字列を結合
文字列結合のイメージ的には、以下のように分割された文字列を1つに結合しようということです。
この例では住所ですが、データベースでは、県ごとや市町村ごとに分割した方が、都合がいいのですが、それを利用するときは、結合したい場合もあります。
行数を取得する
この作業をマクロで一瞬で行います。まず、行数が何行あるかを調べ、その行数分の結合処理をしていこうと思います。
行数を取得する方法のひとつが、
Selection(Selection.Count).Rowです。
Selection(Selection.Count).Rowです。
サンプルでは、1行目から範囲選択した最終行までを結合処理します。コードはこのようになります。
そして、実行したい処理の部分にFor Each~Nextを使います。
For i = 1 To Selection(Selection.Count).Row 実行したい処理 Next i
コードのポイントを図にすると、"最初の行から最後までを、指定した処理をしなさい。"
実行したい処理For Each~Nextは、文字列を結合する前回のコードをRangeではなく、Cellsで指定した形にします。
For Each 範囲 In Range(Cells(i, 1), Cells(i, 4)) 結合文字 = 結合文字 & 範囲.Text & " " Next 範囲 Cells(i, 5).Value = 結合文字
最終的にコードはこのような形になります。
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 + ↓ で最終行までを選択しておいてから、マクロを実行します。
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