はじめに
セルの範囲の文字列を結合して1つのセルに書き出す
イミディエイトウィンドウとは、VBA(Visual Basic for Application)を利用する時に使うVBE(EXCELなどに付属しているプログラムの開発環境のエディター/Visual Basic Editor)で使用することができる機能で、主にコードの実行結果を試すなど、デバッグする時に使うものです。
イミディエイトウィンドウにVBAコードを書いて、一気に処理する方法を説明しています!
今回は、「セルの範囲の文字列を結合して1つのセルに書き出す」方法です。
↓イミディエイトウィンドウの立ち上げ方などはこちら
やり方
前提:指定したセルの範囲の文字列を結合して、別のセルに書き出します。指定する範囲は1列か1行です。
ネットや他のアプリケーションからコピペした時に、一つのセルに収まって欲しいのに、行や列が分かれちゃうことがあります。
「CONCATENATE関数」「CONCAT関数」「TEXTJOIN関数」「”&”演算子」など文字列を結合する関数はワークシート関数にも用意されていますが、今回はイミディエイトウィンドウでVBAのコードでやってみたいと思います。
1列の結合
【サンプル】
適当な文章ですが、1列で行に分かれた文章が入っています。C2セルに結合した文章を表示させたいと思います。
コード
ちゃんとしたコード
Range(“C2”).value=Join(Evaluete(“Transpose(A2:A6)”),””)
省略コード
[c2]=join([transpose(a2:a6)],””)
Join関数というVBAの関数を利用しています。第1引数に配列を入れて、第2引数に結合した要素の区切りを何にするかを指定します。今回はそのまま繋げたいので、第2引数には「””」空白と言うか何もなしを指定しています。
TRANSPOSE関数はワークシート関数です。普通にEXCELシートでも使えます。引数で指定したセルの範囲の、行と列を切り替えて配列に変換します。※ブログの最後におまけで詳しく説明します。
TRANSPOSE関数で配列にしたセルの範囲を、Join関数の引数に指定してくっつけているという感じです。
「Alt + F11」でVBEを開きます。イミディエイトウィンドウに上記のコードを入力して「Enter」で実行して下さい。
実行動画
結果画面です。
1行の結合
【サンプル】
今度は、1行に文章が入っているバージョンです。A5セルに結合した文章を表示させたいと思います。
コード
ちゃんとしたコード
Range(“A5”).value=Join(Evalute(“Transpose(Transpose(A2:E2))”),””)
省略コード
[a5]=join([transpose(transpose(a2:e2))],””)
一列の時とはTRANSPOSE関数の使い方が違いますね。先程説明した通り、TRANSPOSE関数は、指定したセルの範囲の行列を入れ替えて配列にします。
Join関数には、横につながった配列を入れたいので、横の範囲からTRANSPOSE関数で縦の配列にしたものをもう一回TRANSPOSE関数で横の配列に変換してから、Join関数の引数に入れています。
「Alt + F11」でVBEを開きます。イミディエイトウィンドウに上記のコードを入力して「Enter」で実行して下さい。
実行動画
結果画面です。
以上で完成です!
おまけ
TRANSEPOSE関数
ワークシートでTRANSPOSE関数を実行しています。
A5セルに、「=TRANSPOSE(A2:E2)」と入力されており、A2:E2のセル範囲をは縦の配列に変換しているのが分かります。
A19セルには「=TRANSPOSE(A13:A17)」と入力されており、A13:A17のセル範囲を横の配列に変換しているのが分かります。
Join関数には横の配列を入れたいので、変換して縦になってしまった場合は、再度TRANSPOSE関数を実施して、横に変換していたんですね。
横の配列、縦の配列と表現していましたが、プログラミングの言い方では、横の配列を1次元配列、縦の配列を2次元配列と呼びます。
構造などは、本ブログの趣旨からは外れるので割愛しちゃいます。興味がある方は、ググってみて下さい。
まとめ
以前は、「CONCAT関数」がなかったので(今でもバージョンによっては使えない)、「CONCATENATE関数」や「”&”演算子」でポチポチやるよりは楽だったんでしょう。今は「CONCAT関数」使った方が早いですね、笑
オススメの本
VBAはこの本きっかけだったな~
コメント