Excelの値をテキスト化してメール本文に貼りつけたい
やりたいことはタイトルの通りで、その方法を探していますが、
私の知識が乏しく、どういう過程を踏んだらいいのかわかりません。。
やりたいことの詳細
上記のような表があって、日ごとにシートが分かれています。
この内容をガラケーで見られるテキストメールにして送信したいのです。
メール本文は下記のような感じ
おはようございます。本日の予定です。
●Aさん:東京 Aさんの行先1、Aさんの行先2、3、4、、、
●Bさん:東京 Bさんの行先1、Bさんの行先2、3、4、、、
●Cさん:埼玉 Cさんの行先1、Cさんの行先2、3、4、、、
・
・
・
以上です。よろしくお願いいたします。
つまり
"●" + ① + ":" + ② + ③
ということです。
●とか:は別のものに置き換えてもいいし、
③は7つのセルをカンマなどで結びたくて、
場合によっては7つすべてあるわけではない。
という状況。
文字列をクリップボードに貼りつけて、メールに貼る
ちょっと考えてみたんだけど、
Excelの表に入っている値を、ひとつずつ取り出してカンマで結んで、
ひとつの文字列を作ってクリップボードにコピーして、
それをメールに貼りつける。。のがいいかな。
"●" & A4 & ":" & "行先1" & "行先2"・・・
まずは一人分でそれが出来るか実験。
クリップボードへのコピー
クリップボードに文字列をコピーするには、こちらを参照しました。
[Excel VBA] クリップボードにコピーする、で体験した意外な落とし穴 - dzone. blog
クリップボードの操作をするには、
Microsoft Form 2.0 Object Library を参照するよう設定が必要なのですが、
ツール>参照設定 を見てみても、最初は該当項目が見つかりませんでした。
http://www.relief.jp/itnote/archives/017881.php
こちらを参考にして、いちどユーザーフォームを挿入→(今回はユーザーフォームが必要ないので)解放、
とすると、自動的に参照設定されました!
もちろん、ダウンロードファイルを探して設定してもいいと思いますが。
テスト
Option Explicit Sub schedule_copy() Dim CB As New DataObject Dim a As String Dim com As String com = "、" a = "●" & Range("A4") & Range("A5") & ":" & Range("B4") & com & Range("C4") & com & Range("D4") With CB .SetText a .PutInClipboard End With End Sub
これを実行して、メーラーを立ち上げ、本文に貼りつけしてみました。
できた!
複数人分のループ化
が、フクザツでぜんぜんわからない
考え方を変える
複数人にするとすごく複雑になるので、
まず表のとなりのセルに文字列をつくって、それをくっつけて改行をいれて、コピーしました。
I4セルに下記の通り式をいれて、コピーしてAさんからFさんまでの文字列を作成。
I2セルに「、」をいれて、行先ごとに区切るようにしました。
="●" & A4 & A5 & ":" & $B4 & $I$2 & $C4 & $I$2 & $D4 & $I$2 & $E4 & $I$2 & $F4 & $I$2 & $G4 & $I$2 & H4
VBAのコードを修正
Sub schedule_copy() Dim CB As New DataObject Dim all As String all = Range("I4") & vbNewLine & Range("I6") & vbNewLine & Range("I8") & _ vbNewLine & Range("I10") & vbNewLine & Range("I12") & vbNewLine & Range("I14") With CB .SetText all .PutInClipboard End With End Sub
うーん、出来るけど、この式をすべてのシートにいれて隣に文字列が表示されていることを考えると煩わしいので、
やっぱりすべてVBAで解決できたほうがいいな…
修正。。やっぱりループの書き方がわからない
Option Explicit Sub schedule_copy() Dim CB As New DataObject Dim all As String Dim A As String 'Aさん Dim B As String 'Bさん Dim com As String com = "、" Dim cor As String cor = ":" A = "●" & Range("A4") & Range("A5") & cor & Range("B4") & com & Range("C4") & com _ & Range("D4") & com & Range("E4") & com & Range("F4") & com & Range("G4") & com & Range("H4") B = "●" & Range("A6") & Range("A7") & cor & Range("B6") & com & Range("C6") & com _ & Range("D6") & com & Range("E6") & com & Range("F6") & com & Range("G6") & com & Range("H6") all = A & vbNewLine & B With CB .SetText all .PutInClipboard End With End Sub
とりあえずAさんとBさんだけでかいてみました。
すごく見づらい…わかりづらい…
課題
文字列を取得するのを、AさんからFさんまでループ化したい。
配列…とか??
というわけで今日はここまで。