はじめに
Excelの業務自動化をきっかけに、はじめてVBAを触ったとき、正直こう思いました。
「どこにコードを書くのかわからない」
「インデント揃ってるのに動かない」
「MsgBoxって変数じゃないの?」
PythonやJavaなど、他の言語を少しでも触ったことがある人ほど、VBAは独特に感じると思います。
この記事では、VBA初心者が最初につまずきやすいポイントを中心に、「とりあえず1本動かせる」状態になるまでを整理します。
文法を網羅する記事ではありません。
「意味は完全に理解していないけど、動いた」という感覚をゴールにしています。
VBAは何をするための言語か
VBA(Visual Basic for Applications)は、Excelを操作するための言語です。
Webアプリを作ったり、APIを叩いたりするのが主目的ではありません。
「Excelで毎日やっている作業を自動化する」ためのものです。
この前提を知らないまま触ると、
「なんでこんな書き方なんだ?」と混乱しやすくなります。
VBAはどこに書くのか
- VBAはセルに直接書くわけではありません
- Excelを開く
- Alt + F11 を押す
- VBAエディタが開く
- 「挿入」→「標準モジュール」
この標準モジュールにコードを書きます。
最小のVBAプログラム
まずはこれだけです。
Sub Test()
MsgBox "こんにちは"
End Sub
Sub ~ End Sub:処理のかたまり
MsgBox:メッセージを表示する命令
カーソルをコード内に置いて F5キー を押すと実行できます。
VBAはインデントで意味を表さない
Python経験者が最初にハマるポイントです。
if x == 1:
print("A")
print("B")
If x = 1 Then
MsgBox "A"
MsgBox "B"
End If
VBAでは、インデントは意味を持ちません。
意味を決めるのは End If や Next などの終了キーワードです。
インデントはあくまで可読性のためのものです。
MsgBoxは変数ではない
MsgBox "Hello"
一見すると変数名っぽく見えますが、MsgBox は VBAに最初から用意されている組み込み関数です。
Pythonでいう print() に近い存在です。
Dim msg As String
msg = "Hello"
MsgBox msg
msg:自分で定義した変数
MsgBox:組み込み関数
この区別がつくと、VBAのコードが一気に読みやすくなります。
# はキーワードではない
ファイル出力でよく出てくるこの書き方。
Print #fileNo, "Hello"
この # は ファイル番号を指定するための記号です。
キーワードでも変数でもありません。
fileNo = FreeFile
Open filePath For Output As #fileNo
「この番号のファイルに書き込む」という意味になります。
なお、VBAのコメントは # ではなく '(シングルクォート) です。
JSONはVBAでは「ただの文字列」
VBAにはJSON型はありません。
jsonText = "{""name"": ""sample""}"
これはすべて 文字列 です。
ダブルクォートは "" と書く必要があります。
実務で「動いた」と感じやすい例
C5セルの値をファイル名にして、JSONファイルを出力する例です。
Sub ExportJson()
Dim fileName As String
Dim filePath As String
Dim jsonText As String
Dim fileNo As Integer
fileName = Range("C5").Value
filePath = Environ("USERPROFILE") & "\Desktop\" & fileName & ".json"
jsonText = "{""name"": """ & fileName & """}"
fileNo = FreeFile
Open filePath For Output As #fileNo
Print #fileNo, jsonText
Close #fileNo
MsgBox "出力完了"
End Sub
「セルを読む → ファイルを作る」という流れが見えると、
VBAの役割が一気にイメージしやすくなります。
まとめ
- VBAは Excel自動化専用の言語
- インデントは意味を持たない
- MsgBox は変数ではなく組み込み関数
- `# はファイル番号や日付専用の記号
- 完璧に理解してから書く必要はない
VBAは、正直かなり古い言語です。
ですが、Excel業務では今も現役で、「動かせるようになる」だけで武器になります。
まずはコピペで動かし、少しずつ「なぜ動くのか」を理解していくのがおすすめです。