こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
「ExcelのメールアドレスをOutlookの宛先に貼り付けたいけれど、一つずつセミコロン(;)で繋ぐのは非常に手間がかかる……」
そんなふうに感じたことはないでしょうか?
数件ならまだしも、100件単位になるとかなりの重労働ですよね。手作業はミスの原因になりますし、貴重な時間も奪われます。思わず投げ出したくなる瞬間もあるはずです。
そこで今回は、バラバラのデータを一瞬で連結させる、VBAの「Join関数」をご紹介します。この関数をマスターすれば、これまで1時間かかっていた作業が、わずか3秒で終わります。
そもそも「Join関数」とは?
簡潔に言えば、「配列(箱)に格納された複数の文字を、任意の区切り文字で繋ぎ、一つの文字列(ひも)にまとめる」機能です。
- 箱の中身:[“田中”, “佐藤”, “鈴木”]
- 接着剤:”、”(読点)
- Joinの結果:”田中、佐藤、鈴木”
シンプルな仕組みですが、効率化への貢献度は抜群です。
【実践】コピー&ペーストで使えるVBAコード
では、最もニーズの多い「メールアドレスを『;』で連結する」作業を自動化してみましょう。
ExcelのA列に、メールアドレスが入力されている場面を想定してみましょう。以下のコードをコピーし、VBAの標準モジュールに貼り付けるだけで、すぐにご利用いただけます。
Sub MakeMailList()
Dim ws As Worksheet
Dim lastRow As Long
Dim mailArray As Variant
Dim resultString As String
' 現在のシートをセット
Set ws = ActiveSheet
' A列のデータがある最終行を取得(動的な範囲指定に必須)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' A列のデータを一括で配列(箱)に取り込む
' Rangeを1次元配列にするためTransposeを使用
mailArray = Application.Transpose(ws.Range("A1:A" & lastRow).Value)
' Join関数で連結
' 区切り文字(セパレーター)はセミコロン ";" を指定
resultString = Join(mailArray, ";")
' 結果をメッセージボックスで表示
MsgBox resultString
End Sub
コードの仕組みを解説
- Application.Transpose: Excel上の縦方向のデータを、VBAで処理しやすい横方向の「配列」へ変換しています。
- Join(mailArray, “;”): 処理の要です。配列内の全データをセミコロンで一気に連結するよう指示しています。
たとえデータが数百件あっても、処理は一瞬(0.1秒未満)で完了します。手作業とは比較にならないスピードです!
応用編:さらに活用シーンを広げるヒント
このJoin関数は、区切り文字を変えるだけで様々なビジネスシーンで応用可能です。
- CSVデータを作成したい時: 区切り文字を “,”(カンマ)にする。
- SQLの条件文(IN句など)を作りたい時: 区切り文字を “,” にし、各要素をクォーテーションで囲む加工を組み合わせる。
- メッセージを改行して表示したい時: 区切り文字を vbCrLf(改行コード)にする。
ぜひ試してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント