目次
概要
構文・ステートメントに関するVBAのTIPS。になればよいけどリンク集。
構文・ステートメントとは
プログラムの構成単位で、手続きや命令、宣言などを「ステートメント」または「文」という。
「ステートメント」の書き方のルールを、構文や、文法という。
VBAのドキュメントでは、ステートメントという用語が二つの意味で使われている。
上記以外の意味では、VBAに用意されたSubステートメント、Dimステートメント等の命令文のことを指す。
本項目では、初めのステートメントの構文について、主に記載する。
ステートメントの記述
- 1ステートメントは1行で書くことが基本。
- 1行が非常に長くなる場合もあるため、「_」 を末尾に記述することで、ステートメントを途中で改行する記述が許されている。
Text = _ "Hoge" & _ "Fuga"
- 複数ステートメントを1行に書く方法(マルチステートメント)も用意されている。
ステートメントを、「:」でつなげることで1行にまとめることができる。Dim i As Long: i = 1 ' If文もEnd Ifを書かなければマルチステートメントで書ける。 If i = 0 Then: i = 1: i = 2: Else: i = i + 1: i = i + 2
コメント
コメントとは、プログラムの実行に何も影響を与えないメモのこと。
処理の内容を簡潔に記載することで処理内容の意図を分かりやすくする。
- 「'」を記述することでコメント文を記載できる。
' 行ごとコメント Sub 実行() Dim i As Integer ' 文末コメント ' 行連結文字の後ろはコメント化できない i = 100 + 100 + _ ' NG 100 + 100 End Sub
- 「Rem」を行頭に書いても、その行はコメント行とみなされる。
ただし、「'」のように文末に使用することはできない。Rem コメント1 Sub Test1() Dim str As String Rem コメント2 End Sub
条件付きコンパイル
VBAの特定のコードブロックを選択してコンパイルするには、条件付きコンパイルステートメントを使用する。
条件付きコンパイルステートメントは、実行時ではなくコンパイル時に実行される。
- 条件に基づいてコンパイルするコードのブロックを指定するには#If...Then...#Else ディレクティブを使用する。
- 主な用途としては、Win32APIを使用しているときに、Excel32ビットとExcel64 ビットの互換性を保つ為に使われる。
例えば、以下のように宣言の切り替えを行う際に使用する。#If Vba7 Then Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr #Else Declare Function GetActiveWindow Lib "user32" () As Long #End If
- #If...Then...#Else ディレクティブを広域コメントアウトに使用することを考えた方もいる。便利かもしれない。
#If COMMENT_OUT Then コメント:作りかけ Sub Test1() Dim str As String End Sub #End If
感嘆符演算子
「!」演算子は、ディクショナリ アクセス演算子としてクラスまたはインターフェイスでのみ使用する。
- 以下のように、ADODBでAccessDBのテーブルにアクセスした結果から、フィールド名を指定して取得するケースで見かける記述。
With adoRs ' ADODB.Recordset Do Until .EOF Debug.Print !名前.Value, !番号.Value, ![なん ・・ だと].Value adoRs.MoveNext Loop End With
- 「!名前.Value」は「adoRs("名前").Value」または「adoRs.Fields("名前").Value」さらには「adoRs.Fields.Item("名前").Value」と同等。
FieldsのItemプロパティは省略してもデフォルトで呼び出される既定のプロパティであり、RecordsetのFieldsプロパティも既定のプロパティであり省略可能。
つまり、「adoRs.Fields.Item("名前").Value」→「adoRs.Fields("名前").Value」→「adoRs("名前").Value」→「adoRs!名前.Value」と省略した形。 - クラスまたはインターフェイスには、単一の String 引数を受け入れる既定のプロパティが必要。
- ! 演算子の直後の識別子は、既定のプロパティに文字列として渡される引数値になる。
- そのまま使えない文字列については「[]」で囲うことで指定可能。
- Dictionaryでも使える。
- MS公式では、VBAのリファレンスには載っていない(多分)。VBのリファレンスに載っている。でもVBAでも使える。
TIPS
別ページの一覧を入れる。
'IT系/VBA/基本/構文・ステートメント/' には、下位層のページがありません。
リンク集
重複を恐れないリンク集。
- Visual Basic のステートメントを記述する (VBA) | Microsoft Docs
- 宣言ステートメント (VBA) を作成する | Microsoft Docs
- 代入ステートメントを作成する (VBA) | Microsoft Docs
- 実行可能ステートメントを作成する (VBA) | Microsoft Docs
- 条件付きコンパイルについて (VBA) | Microsoft Docs
- VBAの用語について:ステートメントとは|VBA技術解説
- VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説
- 条件付きコンパイル(32ビット64ビットの互換性)|VBA技術解説
- VBAにおけるピリオドとカンマとスペースの使い方|VBA技術解説
- VBAでの括弧()の使い方、括弧が必要な場合|VBA技術解説
- VBAの省略可能な記述について|VBA技術解説
- 文字の結合(&アンパサンド)と継続行(_アンダーバー)|VBA入門
- 文字列結合&でコンパイルエラーになる理由|VBA技術解説
- VBA コメント - Tipsfound
- Excel VBAのコメントの書き方とエキスパート試験のポイント | Excel VBA エキスパート試験対策
- VBAでの広域コメントアウトの代替案 - えくせるちゅんちゅん
- こんなの知らなかった。感嘆符 (!) 演算子
- VBAの感嘆符演算子 - Qiita
- コード内の特殊文字 - Visual Basic | Microsoft Docs