知っておいて欲しい基本的なこと

VBAの利用で知っておいたほうがよい基本的なことをまとめます。

モジュール名の変更

標準モジュールの名前はデフォルトで Module1 となっています。 標準モジュールを挿入するとModule2, Module3 と順に作成されます。 各モジュールの名前を変更することができます。プロパティウィンドウの(オブジェクト名)と書かれた右側を修正しEnterを押すと変更されます。

※ わかりやすくするため最初のモジュールは「Main」 という名前に変更ください。

モジュール名


文字列の連結

複数の文字列を1つの値としてセルやメッセージに表示するときは 各文字や変数 の間に & を入れることで1つにできます。

Dim answer As String: answer = "1番"
' 正解は1番です とイミディエイトウィンドウに出力します
Debug.Print "正解は" & answer & "です"   


' 改行は vbLf で表現します
Debug.Print  "1行目" & vbLf & "2行目"

長い行の改行

1行が長くなると見づらくなるため複数行にまたいで入力することができます。 継続する行の末尾を「スペース + _ (アンダーバー)」で終わるように記入してください

If Range("A1").Value = 100 And _
   Range("B1").Value = 100 Then 

定数

プログラム実行中に変更しない変数はプログラムに直接記述することもできますが Constを利用した定数で書いておくと後からわかりやすいです。

' 円の計算
Debug.Print radius * radius * 3.14 

'↓
Const PI = 3.14  ' 慣例として定数は大文字で定義する
Debug.Print radius * radius * PI


日付や時刻

日付や時刻を操作する方法をいくつか紹介します。

Dim d as Date: 

d = #2017/1/4# 
d = #2017/1/4 12:14# 
d = Date ' 今日の日付
d = Now ' 今日の日付時刻

Debug.Print Year(d), Month(d), Day(d) ' 年月日
Debug.Print WeekDay(d), WeekName(d) ' 曜日数字(1=日曜)、曜日文字

ソースコードを見やすく

インデントや空行、コメント、長い行を折り返すなどを組み合わせて見通しのよいプログラムを記入ください。 この後紹介する 別の関数にしたりモジュールファイルの分割も効果的です。

' ここに関数の説明を書いておくとあとでわかりやすくなります
Sub Execute()
    ' インデントは4文字スペースもしくはTabキーを押して
    ' まとまりのある単位としてください
    Dim i As Long    
    ' 定義と初期化は同じ行で書いておくと見やすいです
    Dim s As String: s = "数字は:"  

    For i = 1 To 5
        s = s & i & ": "
    Next
    MsgBox s

    ' 新しい処理のまとまりの前に空行を1-2行入れると見やすくなります
    With Worksheets("Sheet1")
        For i = 1 To 5    
            .Cells(i, 1).Value = "test" & i
        Next    
	End With
End Sub

メッセージボックスのカスタマイズ

Excelのボタンをクリックしてユーザにメッセージを伝える時MsgBoxが利用できます。 プログラムでMsgBoxを使う箇所が複数あり、その右側にアイコンを付けることで重要性を表現することができます。

' シンプルにメッセージのみ表示される
MsgBox "メッセージ"    

'右に 赤丸に×印のアイコンを表示
MsgBox "エラー相当のメッセージ", vbCritical  

'右に 黄色三角に!のアイコンを表示
MsgBox "警告相当のメッセージ", vbExclamation 

参考: MsgBox関数の使い方(1) - メッセージボックスの表示方法