条件にあう複数のセルをまとめる

ステップ0 背景と条件

今回は顧客リストから、会社ごとの担当者あてのメールを送らなきゃいけない案件が発生しました。

顧客リストはこんな感じ。ざっと500行ぐらいあります。

顧客リストって、だいたいどこもこんな感じなんでしょうか?
VBAで扱いにくいですよね。

さて、皆さんならどうしますか?

いちばん基本的なやり方は、オートフィルターで社名で絞って、メールアドレスをコピーし、メーラーのTo欄に貼りつけるかな、と。

そのやり方でもいいんですよ。めんどくさいけど。

ただ、今回の案件では、

  • 今後も毎月、同様のメールを送り続ける必要がある
  • 担当者は変更になることがある
  • 相手先の会社も増減になる可能性がある

といった条件があり、毎回、手作業でちまちまオートフィルタを操作するのはイヤだな、と。

まぁ、いろいろ方法はあるんでしょうけれど、今回オレがやったのを備忘録がてらに書いておきます。

当社は幸い、office365が導入されており、いわゆる新関数が使えます。

ステップ1 社名の一覧表を作成

とにかく、相手先の会社の数だけメールを送るので、社名の一覧がないと話にならんのですよ。
なので、とりあえず、社名一覧を作ります。
これには、新関数のUNIQUEが力を発揮します。

適当なセル(ここではH2)に

=UNIQUE(テーブル1[会社名])

と書くと、スピルが発動して、いきなり下図のようになります。スピルすげぇ。。

ついでにG2セルにも

=ROW(H2#)-1

と入れています。スピルについては、どこかでググってもらえればいいかと思いますが、リクエストがあれば説明します。

最後にVBA化することを見据えて、連番を入れたら社名が表示されるようにしておきましょう。

やり方はいろいろあると思いますが、今回はこんな感じにしておきました。

=OFFSET(H2,J2-1,0)

J2に手動で番号を入れると、該当する社名が表示されますね。

ステップ3 メールアドレス一覧を抜き出そう

さて、選択した社名に対する、メアド一覧を表示させます。

こんな時に力を発揮するのは・・・、Filterですね。こちらも適当に

=FILTER(テーブル1[メールアドレス],テーブル1[会社名]=J4)

とかで大丈夫です。J2セルを適当に手入力すれば、メアドの数だけスピルしてくれます。

ステップ4 複数のセルをつなげる

次のステップは、抜き出されたメアドをつなげることです。

残念ながら適当な関数は見つけられなかったので、仕方なく自作しました。

こんな感じです。
第一引数でつなげたいセルを選んで、第二引数の記号で区切ってつなぐ、ってことにしました。メアドなので、";(セミコロン)"区切りにしてます。

ステップ5 最後はVBAで

ここまでできたら、あとはVBAで、会社名の数だけFor分を回して、メーラーを起動すれば、イケるっしょ(笑)

最後に

忘備録なので、解説とかがっつり端折っちゃってますが、「ここがわからん」「ここガダメ」などご意見、ご要望などありましたら、フォームからぜひ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA