ExcelでVBAプログラミング(エクセルマクロ)

Excelにはマクロを作るための、VBAプログラミングできる環境があるらしい。
試しに遊んでみよう。

(以降は Excel2010 での説明)

■ 準備

VBAプログラミングには [開発] タブを使用する。

このタブが無い場合は、
[ファイル]-[リボンのユーザ設定]-[開発]をチェックして追加する。


■ はじめてのVBAプログラミング:メッセージボックスを表示させてみる
[開発]-[マクロ]を選択。

表示されるダイアログに、自分の好きなマクロ名を入れる。

ここでは、とりあえず message にしてみる。

マクロ名を入れたら[作成]ボタンを押す。

するとエディタが起動する。

ここで表示される

Sub message()

End Sub

の間にプログラムを記述する。

まずは、次のようにして見る。

Sub message()
    MsgBox "hello"
End Sub

これで、このマクロを実行すると"Hello"という文字のメッセージボックスが表示される。

マクロを実行するには、Excelに戻ってもう一度[開発]-[マクロ]を押して、
表示されるダイアログで message を選択して [実行] を押す。
(エディタの[実行]-[Sub/ユーザーフォームの実行]でも実行できる)

すると、次のメッセージボックスが表示される。


■ ボタンでマクロを実行する

[開発]-[挿入]-[フォームコントロール]で[ボタン]を選択すると、マウスドラッグで好きな場所に好きな大きさのボタンを置ける。

その直後に表示されるダイアログで、message を選ぶと、これまでに作ったマクロとボタンを関連付けることができる。
(ボタンを押すと、マクロが実行される)

ボタンのラベルは自由に変更できる。



■ 変数とIf-Else 構文
VBAでの条件分岐は次のように記述する

If 条件式 Then
   命令文
EndIf

次の例では、はい/いいえ/キャンセル のボタンがついたメッセージボックスが表示されて、[はい]が押された場合に "ですよね" というメッセージが表示される。

Sub message()
    ret = MsgBox("VBAおもしろい?", vbYesNoCancel, "質問")
    If ret = vbYes Then
        MsgBox "ですよね"
    EndIf     
End Sub

実行結果

Elseを使った条件分岐は次のように記述する

If 条件式 Then
   命令文1
Else
   命令文2
EndIf
If 条件式1 Then
   命令文1
ElseIf 条件式2
   命令文2
Else
   命令文2
EndIf

Sub message()
    ret = MsgBox("VBAおもしろい?", vbYesNoCancel, "質問")
    If ret = vbYes Then
        MsgBox "ですよね"
    ElseIf ret = vbNo Then
        MsgBox "ふーん"
    Else
        MsgBox "どっちなのさ"
    End If
End Sub


■ 繰り返しのためのFor構文

VBAでのFor文は次のように記述する
(Step の記述がなければ i の値は1つずつ増える)

For i = 0 To 10 Step 2
   命令文
Next

Sub message()
    For i = 5 To 0 Step -1
        MsgBox "カウントダウン " & i
    Next
    MsgBox "どーん"
End Sub


■ セルの値の操作

Cells(行番号, 列番号).Value

で、セルの値を取得したり、セルに値を設定したりできる。

次のプログラムでは、九九の表を作れる

Sub message()
    For i = 1 To 9
        For j = 1 To 9
            Cells(i, j).Value = "" & j & "x" & i & "=" & (i * j)
        Next
    Next
End Sub

実行結果




参考:
VBAの基本構文 - @//メモ
エクセルVBAマクロ - MsgBoxとInputBox


ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本

ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本

Excel VBA 逆引き辞典パーフェクト 2010/2007/2003対応

Excel VBA 逆引き辞典パーフェクト 2010/2007/2003対応