VBAでは、セル範囲と配列の相互変換ができるが、たとえ1列分しか変換しなくても二次元配列となってしまう。
VBAのJoin関数でひとつの文字列に加工しようと思ったら色々と工夫が必要なのだが、実はワークシート関数のTRANSPOSEを使うと簡単にできるという裏技がある。
たとえば次のようなデータを用意する。
これを二次元配列arrとして読み込み、Transpose関数を使って一次元配列arr2を作る。あとはJoinするだけ。
Sub 一次元データのみの二次元配列のJoin() Dim arr: arr = Range("A1:A3") Dim arr2: arr2 = WorksheetFunction.Transpose(arr) MsgBox Join(arr2, vbNewLine) End Sub
次に行データだったらどうするか。
そのままではうまくいかないので、Transposeを2回かませて列データに変更する。
Sub 一次元データのみの二次元配列のJoin_行バージョン() Dim arr: arr = Range("A1:C1") Dim arr2: arr2 = WorksheetFunction.Transpose(arr) Dim arr3: arr3 = WorksheetFunction.Transpose(arr2) MsgBox Join(arr3, vbNewLine) End Sub
参考
この事実を教えてくれたのはこちらのサイト。感謝。
配列研究室 STEP 3
上記サイトではEvaluate関数の短縮表記である[]を使って更に短く書いている。
今回のケースに適用すると、以下のとおり。
Sub 一次元データのみの二次元配列のJoin_行バージョン() MsgBox Join([TRANSPOSE(TRANSPOSE(A1:C1))], vbNewLine) End Sub
ただこれだとセル範囲がベタ書きになってしまうので、ThisWorkbookからRangeまで確実に指定したい時に応用が利かない。
※↓こう書きたい場合のこと
Sub 一次元データのみの二次元配列のJoin_行バージョン() Dim arr: arr = ThisWorkbook.Sheets(1).Range("A1:C1") Dim arr2: arr2 = WorksheetFunction.Transpose(arr) Dim arr3: arr3 = WorksheetFunction.Transpose(arr2) MsgBox Join(arr3, vbNewLine) End Sub
[]を使わずに少し短くしようと思ったら、こうかな?
Sub 一次元データのみの二次元配列のJoin_行バージョン() Dim arr: arr = ThisWorkbook.Sheets(1).Range("A1:C1") With WorksheetFunction MsgBox Join(.Transpose(.Transpose(arr))) End With End Sub
8/3 余談追記
この記事でリンクした「配列研究室 STEP 3」はExcel研究室の一角だった。
www.clayhouse.jp
しかも結構濃い目の書籍を出版されている土屋さんのサイトだった。
感謝の意を込めていくつか紹介させていただく。
こちらは今となっては珍しいWord VBA本。
最速攻略 Word マクロ / VBA徹底入門 〔Word 2013/2010/2007対応版〕
- 作者: 土屋和人
- 出版社/メーカー: 技術評論社
- 発売日: 2013/09/20
- メディア: 大型本
- この商品を含むブログを見る
こちらは残念ながら絶版してるけど、Evaluateの短縮表記[]はこの書籍で覚えた。イミディエイトウインドウを活用した即席1行コードが沢山紹介されている希少本。
EXCEL VBA 1行コード活用辞典 (CD-ROM付き)
- 作者: 土屋和人
- 出版社/メーカー: 技術評論社
- 発売日: 2006/05/02
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
こちらはExcelの配列を扱った専門書。VBAではなくてExcelの配列数式ってのがポイント。
すぐわかるSUPER Excel配列マジックを極める 営業、経理、総務もこれでExcelマスター! 面倒な集計や計算処理が格段に楽になる! (すぐわかるシリーズ)
- 作者: 土屋和人
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/09/13
- メディア: 大型本
- クリック: 1回
- この商品を含むブログを見る
こちらは2016年発刊なので比較的最近の本。
上の3点に比べるとクセのない王道的なVBA本かなと思う。
今すぐ使えるかんたんEx Excelマクロ&VBA プロ技 BESTセレクション [Excel 2016/2013/2010/2007対応版]
- 作者: 土屋和人
- 出版社/メーカー: 技術評論社
- 発売日: 2016/07/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
以上。