非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Excelマクロ】セルの値をループ使わず結合する方法

   

Excelマクロでセルデータを配列にして取得することは簡単なのですが、2次元配列になってしまうのでちょっと不都合が出てきます。例えば区切り文字で結合するときなど。Forループを用いれば簡単ですが処理速度を気にする場合はなるべくループは使いたくないところです。

そこで今回は、セルデータ→2次元配列→1次元配列化→結合という処理をループを使わずやってみようと思います。

横列データの結合

横方向のデータを取得して結合する場合は以下のソースコードとなります。最初にセルデータを取得する際に2行分持ってくるところがミソになります。じゃないとIndex関数でエラーになります。

Set mySheet = ActiveSheet
'2行目まで取得するところがミソ
d1 = mySheet.Range("A1:H2").Value
'1行目だけ抜き出して一次配列に
d2 = WorksheetFunction.Index(d1, 1)
'結合
dd = Join(d2, ",")
MsgBox dd
 

 

実行結果はこちら。うまく結合できました。

 

縦列データの結合

縦列の場合は以下の通り。Transpose関数で行列逆転させることで可能になります。

Set mySheet = ActiveSheet
'2列目まで取得するところがミソ
d1 = mySheet.Range("A1:B5").Value
'行列反転させて1行目だけ抜き出して一次配列に
d2 = WorksheetFunction.Index(WorksheetFunction.Transpose(d1), 1)
'結合
dd = Join(d2, ",")
MsgBox dd
 

 

実行結果はご覧のとおりです。

スポンサーリンク

 - Excel, VBA