###いきさつ
Outlookで定型的なメールを送る際、いちいちアドレスを宛先に入れることが面倒だったので、自動化したいと思ったため
#VBAの基礎知識
- 基本構文
例:
ブック”study.xlsmのワークシート”Sheet1”のセルA1を選択する
Workbooks("study.xlsm").Worksheets("Sheet1”).Range("A1").Select
- メソッドの書き方例
例: セルA1を選択する
Range("A1").Select
- プロパティの設定
例:セルA1の値を設定する
Range("A1").value
※ プロパティ
Excelではセルの内容や背景色、フォントサイズなど色々。
- マクロ名の宣言
Sub {マクロ名}()
{マクロの処理}
End Sub
- 変数の宣言
Dim 変数名 [As データ型]
※ データ型
データ型 | 名称 | 格納できる値 |
---|---|---|
String | 文字列 | 最大約20億文字まで |
Integer | 整数型 | -32,768~32,767の整数 |
Long | 長整数型 | -2,147,483,648~2,147,483,647の整数 |
Date | 日付型 | 西暦100 年1月1日~西暦9999年12月31日までの日付と時刻 |
Object | オブジェクト型 | オブジェクト |
Variant | バリアント型 | ★すべてのデータ |
★とても便利な バリアント型
すべてのデータを格納できるので、とりあえず型は覚えなくても書ける。
型を省略して書くと、バリアント型となる。
- 変数への代入
変数名 = データ
ただし、オブジェクト型の変数に代入するときはSetを使う
Set 変数名 = データ
#本題
ExcelのボタンでOutlookのメール作成を自動化するVBA
Sub MakeMail()
' Outlookのメールを作成する
Dim ol As Object
' 起動しているOutlookを取得する
Set ol = GetObject(, "Outlook.Application")
If ol Is Nothing Then Exit Sub ' Outlookが起動していない場合、終了する
' メールを作成する
With ol.CreateItem(0)
.To = Worksheets("基本設定").Range("C4").Value ' 宛先
.CC = Worksheets("基本設定").Range("C5").Value ' CC
.BCC = Worksheets("基本設定").Range("C6").Value ' BCC
.Subject = Worksheets("基本設定").Range("C7").Value ' 件名
.Display ' 表示
Dim tuki
tuki = Month(Date) & "月"
.Body = Worksheets(tuki).Range("G2").Value & Worksheets("基本設定").Range("C8").Value '本文
End With
Set ol = Nothing
End Sub
以上のようなものを作りました。
参考サイトはこちら 意外となんとかなる日記
変数名をどうにかしたかったけれど、とりあえずこれで。
※ "基本設定"シートに以下の画像のようなデータがあるとする。
#ソースコードの説明
-
GetObject([pathname] [,class])
オブジェクトを参照するメソッド。Outlookを参照を取得するときには引数classに"Outlook.Application"、Excelの参照を取得するときには"Excel.Application"と指定する。
参照終了後はオブジェクト型変数にNothingを代入して、解放するようにすること。
-
Application.CreateItem(Item Type)
既定の Outlook アイテムのみを作成するメソッド。作成することができるアイテムは以下の通りらしい。
アイテム | 定数 |
---|---|
メール | 0 |
予定表 | 1 |
連絡先 | 2 |
仕事 | 3 |
履歴 | 4 |
メモ | 5 |
投稿 | 6 |
配布リスト | 7 |
参考サイトhttp://d.hatena.ne.jp/ken3memo/20090425/1240642355 |
※定数とは
この引数(数値)を与えたら、こういう動作をさせると決められているもの。
- Date
現在の日付を取得する関数。
Year(Date) '今年の年を取得
Month(Date) '今の月を取得
今回は下記画像のように月ごとのワークシートごとを作っていたので、今月のワークシートを対象にするために、変数tukiにデータを格納しました。
- With
Withを使うことで、コードをすっきり書くことができる。例えば、あるセルのデータを、同じワークシート上にあるセルに代入するとき、何度もワークシート名を書くのは面倒(下記コードで言うと、ActiveSheetと何度も書かなければならない)。
Sub 支払期日設定()
ActiveSheet.Range("A1").value=ActiveSheet.Range("A2").value + 14
End Sub
そこでWithを使うと、ワークシート名を省略することができる。
Sub 支払期日設定()
With ActiveSheet
.Range("A1").value =.Range("A2").value + 14
End With
End Sub