![見出し画像](https://assets.st-note.com/production/uploads/images/171038595/rectangle_large_type_2_80a70c04ee4d0c7727bc20236f4ed19e.jpeg?width=1200)
VBAの基本~変数定義やif文やfor文と言った基礎構文から内部関数の定義方法【備忘録】~
中山テックです。
さて、普段からVBAで開発している方は除きますが、たまにVBA使うと構文忘れる事ありませんか?
私は、よくあります(汗
という訳で今回は忘れっぽい私向けにVBA構文を備忘的に残したいと思います。
参考になるのであれば是非ご覧ください。
変数
![VBA変数の使い方](https://assets.st-note.com/img/1737457850-K7QLFSt0arZz5UbiEd9N6YIB.jpg?width=1200)
Dim 変数名 AS 型
※簡単なガントチャートを作った時のVBAを流用しています
構文は上記の通りで、変数名は「何に使う」か、わかりやすい名前を付けてあげましょう。
そして型は数字や日付といった用途に合わせて指定します。
Integer:-2,147,483,648 から 2,147,483,647 までの符号付き 32 ビット (4 バイト) の整数を保持
String:文字列。ダブルクォート("文字")で囲みます
Date:日付の型。前回のブログではセルに指定した日付を格納するために使っていた
Worksheet:Excelのシートオブジェクト。主にシート内を検索するVBAを組む時に使ったり
IF文
![VBA IF文の使い方](https://assets.st-note.com/img/1737458350-HoFCKtJfp0yV7OiBLN5WvP1m.jpg?width=1200)
IF 条件式(例:A=1とか) Then
【処理】
Else If(条件式) Then ←省略可
【処理】
Else ←省略可
【処理】
End If
条件分岐の際に使用します。
上記画像では指定の日付がFROMとTOの間に入っているかを判定しています。
2つの条件がある場合はAND(かつ)やOR(または)等を指定します。
IF ~ ThenとEnd Ifは必須で、Else IFやElseはなくても問題ありません。
FOR文
![VBA FOR文の使い方](https://assets.st-note.com/img/1737458461-1yoNeFkqQGzjvusI3md278P0.jpg?width=1200)
FOR 開始条件(i=0とか) TO 終了条件(100とかループ回数)
【処理】
Next 開始条件の変数
指定回数分、ForとNext変数の間の処理を繰り返します(ループ)。
ForとNext変数はセットであると覚えて頂ければと。
始点と終点の間はTOでつなぐこともお忘れなく。
また、Forループを抜ける際は「Exit for」を定義します。
Subプロシージャ
![VBA Subプロシージャの使い方](https://assets.st-note.com/img/1737458434-HxGkS496oXvZpCFdw5T2UQRV.jpg?width=1200)
いわゆるmain関数と同じような感じで、始点に当たります(原点にして頂点)。
複数定義も可能で、マクロの実行の際にはそれぞれ独立して実行することが出来ます。
上記のa1cellプロシージャはA1セルに「Hello World」と入れるだけの簡単な処理です。
全てのシートで適用可能です。
![Subプロシージャ定義からのマクロ実行](https://assets.st-note.com/img/1737458489-1sZSwzf2CnMaVgTrtEodY7Pc.jpg?width=1200)
プロシージャ定義することでマクロから実行可能です。
今いるシートはもちろん、別シートでも使用できます。
![Subプロシージャ作成後の実行結果](https://assets.st-note.com/img/1737458506-hL7NAwbDuS0oXdqMzamgEBPr.jpg?width=1200)
Functionプロシージャ
![Functionプロシージャ定義](https://assets.st-note.com/img/1737458602-ip5R9jFwMDZN7BE1GVc4W3rl.jpg?width=1200)
Function プロシージャ名(変数名 As 型) ※変数名はなくてもOK
プロシージャ名 = 返却値
End Function
こちらもプロシージャではありますが、マクロの実行が出来ません。
そして返却値を返す場合はFunctionプロシージャ名に代入します。
詳しくはこちらのページもご覧ください。
リファレンス
if文の応用(電卓)
こちらのVBAをご覧ください。
Private Sub CommandButton1_Click()
If Cells(1, 2) = 1 Then
Cells(4, 2) = Cells(2, 2) + Cells(3, 2)
ElseIf Cells(1, 2) = 2 Then
Cells(4, 2) = Cells(2, 2) - Cells(3, 2)
ElseIf Cells(1, 2) = 3 Then
Cells(4, 2) = Cells(2, 2) * Cells(3, 2)
ElseIf Cells(1, 2) = 4 Then
Cells(4, 2) = Cells(2, 2) / Cells(3, 2)
End If
End Sub
恐ろしい程シンプルなVBAです。
まずB1セルを判定し1なら加算、2なら減算、3なら乗算、4なら除算とします。
続いてB2セルとB3セルの四則演算の結果をB4セルに表示するだけです。
![](https://assets.st-note.com/img/1737550423-Q9BIKRnOFLHk6SuVq7cX1y3z.jpg?width=1200)
334×234=78,156という計算を行ってみました。
もちろん、答えは合ってます(当然)。
for文の応用(セルの色を変える)
こちらのVBAをご覧ください。
Private Sub CommandButton1_Click()
For i = 1 To 20
Cells(i, 1).Interior.Color = RGB(255, i * 10, 255)
Cells(i, 1) = "AAA"
Next i
End Sub
RGBで色指定しておりますが、Gの箇所を可変にしてセルの色を変えてます。
※初期値は(255,1,255)とマゼンタ(ピンク系)からスタート
![](https://assets.st-note.com/img/1737549743-kjVrnN5fKy6gI8eOxUtb20Du.jpg?width=1200)
CommandButton1をクリックすると・・・
![](https://assets.st-note.com/img/1737549798-OPV7mxUQHNKYdieF4Db0u9Jh.jpg?width=1200)
見事に色が薄くなっていき、さらにセルに「AAA」の文字が入りました。
For文は規則的にループを回し、セルに色を持たせるという応用も効かせられます。
![ねこ社員と代表の掛け合い](https://assets.st-note.com/img/1737458616-EKWkOTvIuR2GwoZPsa0UzfVB.jpg?width=1200)
まとめ
備忘なのでメモ書きみたいになってすみません。
しかし、普段から使っていない場合の構文確認としては十分かと思います。
私と同じように毎日のように開発していない方がご覧になり「参考になった」と思って頂けたら幸いです。