Excel VBAコース(7):Excel VBA言語基本 - 文法(Syntax)
今回の記事では、Excel VBA言語基本中の文法(Syntax)について見ていきます。
前の記事で続く内容だ。
Excel VBAコース(6):Excel VBA言語基本 - 変数
3.2。言語文法(Syntax)
VBA言語文法はVisual Basic文法と同じです。最初はすべての文法をすべて知る必要がなく、ここに要約した文法だけ知っても十分だ。完全な文法は、下部に添付されたVisual Basic CHMヘルプファイルを参照してください。
VBA言語のオンラインヘルプ(英語のみ)は、以下のURLで確認できます。
https://docs.microsoft.com/en-us/office/vba/api/overview/language-reference
3.2.1.条件文(IF)
式の値に応じてステートメントグループを条件付きで実行します。
シングルラインIF文法
If condition Then [statements] [Else elsestatements]
Single line IF sample code
If Digits = 1 Then MyString = "One" Else MyString = "More than one"
マルチプルラインIF文法
If condition Then [statements] [ElseIf condition -n Then [elseif statements]...] [Else [else statements]] End If
Visual Basic ヘルプ
- condition
- 必須要素。次の 2 つの形式のうち、1 つ以上の式です。
- True私 Falseと評価される式または文字式として conditionこの ヌル裏面 Falseとして扱われます。
- TypeOf objectname Is objecttype 形の式です。 Objectnameはオブジェクト参照であり、 objecttypeは有効なオブジェクト型です。 Objectnameこの objecttypeで指定されたオブジェクト型の場合、式はTrue、それ以外の場合はFalseです。
- statements
- ブロック形式ではオプションの要素であり、 Else句のない単一行型では必須の要素です。複数のドアはコロンで区切られています conditionこの Trueの場合に実行されます。
- condition -n
- オプションの要素 conditionと同じです。
- elseif statements
- オプションの要素関連 condition-nこの Trueの場合に実行される 1 つ以上のステートメントです。
- else statements
- オプションの要素以前の conditionイナ condition-n食事 Trueそうでない場合に実行される1つ以上のステートメント。
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
Multiple line IF sample code
Dim Number, Digits, MyString Number = 53 ' 변수를 초기화합니다. If Number < 10 Then Digits = 1 ElseIf Number < 100 Then '조건이 True로 평가되면 다음 문이 실행됩니다. Digits = 2 Else ' 조건이 False로 평가되면 다음 문이 실행됩니다. Digits = 3 End If
3.2.2。条件関数(IIF)
式を評価した結果に応じて、2つの値のうちの1つを返します。
IIFは関数であり、If〜Else〜End If構文を簡単に表すために使用されます。
IIF文法
IIf(expr, true part, false part)
Visual Basic ヘルプ
コンポーネント | 説明 |
expr | 必須要素。評価したい式 |
true part | 必須要素。 exprこの Trueの場合に返す値または式です。 |
false part | 必須要素。 exprこの Falseの場合に返す値または式です。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/iif-function
IIFサンプルコード
Function CheckIt (TestMe As Integer) CheckIt = IIf(TestMe > 1000, "Large", "Small") End Function
3.2.3。条件文(Select Case)
式の値に応じて、いくつかのグループのステートメントのいずれかを実行します。
Select Case 条件文文法
Select Case test expression [Case expressionlist-n [statements-n]] ... [Case Else [else statements]] End Select
Visual Basic ヘルプ
コンポーネント | 説明 |
test expression | 必須要素。すべての式または文字式です。 |
expression list-n | ケース ステートメントを使用する場合は必須です。 expression, expression To expression, Is comparisonoperator expressionなどの形式の1つ以上の区切りリストで構成されています。 To キーワードは値の範囲を指定します。 To キーワードを使用する場合は、小さい値が Toドアの前に来なければなりません。値の範囲を指定するには、比較演算子(Is ドア いいねドアを除く)と共に Is キーワードを使用します。 Is キーワードを入力しないと自動的に挿入されます。 |
statements-n | オプションの要素 testexpressionに対応する expressionlist存在する場合、対応する1つ以上のステートメントが実行されます。 |
else statements | オプションの要素 testexpressionに対応する ケース句がない場合、対応する1つ以上のステートメントが実行されます。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
Select Case 条件文 sample code
Function Bonus(performance, salary) Select Case performance Case 1 Bonus = salary * 0.1 Case 2, 3 Bonus = salary * 0.09 Case 4 To 6 Bonus = salary * 0.07 Case Is > 8 Bonus = 100 Case Else Bonus = 0 End Select End Function
3.2.4。繰り返し文(For)
問い合わせグループを指定した回数だけ繰り返す。
For Next 繰り返し文の文法
For counter= start To end [Step step] [statements] [Exit For] [statements] Next [counter]
コンポーネント | 説明 |
counter | 必須要素。ループカウンタとして使用される数値変数。この変数は Boolean または配列要素にはできません。 |
start | 必須要素。 カウンターの開始値 |
end | 必須要素。 カウンターの最終値 |
step | オプションの要素ループを一度実行するたびに変化する counterの量です。指定しない場合 stepのデフォルト値は1です。 |
statements | オプションの要素 Forと Next 1つ以上のステートメントで、指定した回数だけ実行されます。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/fornext-statement
For Next 繰り返し文 sample code
Dim Words, Chars, MyString For Words = 10 To 1 Step -1 ' 10번 반복을 설정합니다. For Chars = 0 To 9 ' 10번 반복을 설정합니다. MyString = MyString & Chars ' 숫자를 문자열에 추가합니다. Next Chars ' 카운터 증가 MyString = MyString & " " ' 빈 칸을 추가합니다. Next Words
3.2.5。繰り返し文(For Each)
配列またはコレクションの各要素の照会グループを繰り返します。
For Each 繰り返し文文法
For Each element In group [statements] [Exit For] [statements] Next [element]
コンポーネント | 説明 |
element | 必須要素。コレクションまたは配列の要素を繰り返し実行するために使用する変数です。コレクションから elementはVariant変数、通常のオブジェクト変数、または特定のオブジェクト変数にすることができます。配列から elementはただ Variant 変数しかできません。 |
グループ | 必須要素。各オブジェクトのコレクションまたは配列の名前(ユーザー定義型配列を除く)。 |
statements | オプションの要素 グループの各項目で実行される1つ以上のステートメント。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
For Each 繰り返し文 sample code
Dim Found, MyObject, MyCollection Found = False ' 변수를 초기화합니다. For Each MyObject In MyCollection ' 각각의 요소에 대해 반복합니다. If MyObject.Text = "Hello" Then ' Text가 "Hello"라면. Found = True ' Found변수를 True로 설정합니다. Exit For ' 루프를 종료합니다. End If Next
3.2.6。繰り返し文(While)
与えられた条件がTrueの間は、一連のステートメントを実行し続けます。
While反復文の文法
While condition [statements] Wend
コンポーネント | 説明 |
condition | 必須要素。 True私 Falseとして評価される式または文字式。もし conditionこの Null の場合 condition銀 Falseとして扱われます。 |
statements | オプションの要素与えられた条件 Trueイン中に1つ以上のステートメントを実行します。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
While 繰り返し文 sample code
Dim Counter Counter = 0 ' 변수를 초기화합니다. While Counter < 20 ' 변수 Counter 값을 검사합니다. Counter = Counter + 1 ' 변수 Counter 값을 1씩 증가시킵니다. Wend ' 변수 Counter의 값이 19보다 크면 While 루프를 종료합니다. Debug.Print Counter ' 직접 실행
3.2.7。繰り返しステートメントの制御(Exit, Continue)
反復文の実行中に特定の条件で反復を中断する構文は、Exit Forを使用することができます。しかし、繰り返しをスキップするためのcontinue構文はVBAではサポートされていません。 IFブロックまたはGoto構文で制御します。
If blockの使い方
- 特定の条件を満たす場合にのみ構文が実行されるようにIf blockでラップする方法
- コードの初期に確定した変数値に基づいて continue 処理を行う場合に使用できる
- 条件が複雑な場合、または初期に変数値が確定しない場合は使用しにくい
For iSht = 1 To aBook.Worksheets.Count Set oSht = aBook.Sheets(iSht) If (IsColumnMappingSheet(oSht)) and (lRowOffset >= 0) ... ... End If Next iSht
Gotoの使い方
- コードの途中で計算または特定の条件によって continue 処理を行う場合に使用する
- ループの最下部(次のすぐ上)に移動する場所をラベルとして指定し、If条件文でGoto構文を使用する
- 開始、中間のどの部分でも使用可能
For iSht = 1 To aBook.Worksheets.Count Set oSht = aBook.Sheets(iSht) If Not IsColumnMappingSheet(oSht) Then GoTo Continue_To_Next_Sheet ... If lRowOffset < 0 Then GoTo Continue_To_Next_Sheet ... Continue_To_Next_Sheet: Next iSht
3.2.8。プロシージャ
プロシージャは代表的にSub、Functionがある。
Subプロシージャ文法
[Private | Public] [Static] Sub name [(arglist)] [statements] [Exit Sub] [statements] End Sub
コンポーネント | 説明 |
パブリック | オプションの要素モジュール内のすべてのプロシージャで該当 Sub プロシージャを呼び出すことができることを示します。もし Option Private ステートメントがあるモジュールで使用している場合は、プロシージャをプロジェクトの外部から呼び出すことはできません。 |
プライベート | オプションの要素 Sub プロシージャは、宣言されたモジュール内の他のプロシージャからのみ呼び出すことができることを示します。 |
Friend | オプションの要素クラスモジュールでのみ使用されます。 Sub プロシージャはプロジェクト全体で認識されますが、オブジェクトのインスタンスコントローラでは認識できないことを示します。 |
Static | オプションの要素 Sub プロシージャのローカル変数が関数呼び出しごとに保持されることを示します。プロシージャで使用しても Sub 外で宣言された変数は Static 属性がありません。 |
名前 | 必須要素。 Sub 名前であり、標準変数命名規則に従います。 |
arglist | オプションの要素呼び出されたとき Sub プロシージャに渡される引数を表す変数のリスト。複数の変数の場合は、コンマ(、)記号で区切ります。 |
statements | オプションの要素 Sub プロシージャで実行されるステートメントのセットです。 |
arglist 引数は次のコンポーネントになっています。
[オプション] [ByVal | ByRef] [ParamArray] varname[( )] [As タイプ] [= defaultvalue]
コンポーネント | 説明 |
オプション | オプションの要素引数が必須ではないことを示すキーワードです。 オプションを使用すると arglistで使用される引数はすべてオプションです。 オプション キーワードを使用して宣言する必要があります。すべて オプション 買収は Variantでなければなりません オプション銀 ParamArrayと一緒に使用することはできません。 |
ByVal | オプションの要素引数が値によって渡されることを示します。 |
ByRef | オプションの要素引数が参照によって渡されることを示します。 Visual Basicでは ByRefがデフォルトです。 |
ParamArray | オプションの要素 arglistの最後の引数として使用され、最後の引数が Variant 要素の オプション 配列であることを示します。 ParamArray キーワードを使用すると、任意の数の引数を使用できます。 ByVal, ByRef または オプションと併用できません。 |
varname | 必須要素。引数を表す変数の名前を表し、標準変数の命名規則に従います。 |
タイプ | オプションの要素プロシージャに渡される引数のデータ型を指します。 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(現在はサポートしていません)、Date、String(可変長文字列のみ可)、Object、Variantパラメータ オプションそれ以外の場合は、カスタム型とオブジェクト型を指定することもできます。 |
defaultvalue | オプションの要素定数または定数式であり、 オプション パラメータの場合のみ有効です。 Object 形式の場合、明示的なデフォルト値として Nothingのみ可能です。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/sub-statement
Subプロシージャ sample code
' 하위 프로시저 정의입니다. ' 두개의 인수를 가진 하위 프로시저입니다. Sub SubComputeArea(Length, TheWidth) Dim Area As Double ' 지역 변수를 선언합니다. If Length = 0 Or TheWidth = 0 Then ' 만약 두 인수가 모두 0이면, Exit Sub ' Sub를 즉시 종료합니다. End If Area = Length * TheWidth ' 사각형의 면적을 계산합니다. Debug.Print Area ' 지역을 디버그 창에 인쇄합니다. End Sub
Functionプロシージャ文法
[Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function
コンポーネント | 説明 |
パブリック | オプションの要素 機能 プロシージャは、すべてのモジュールのすべてのプロシージャにアクセスできることを示します。プロシージャ Option Privateを持っているモジュールで使用されると、プロジェクト外では使用できません。 |
プライベート | オプションの要素 機能 プロシージャは、このプロシージャが宣言されたモジュールからのみ他のプロシージャにアクセスできることを示します。 |
Friend | オプションの要素クラスモジュールでのみ使用されます。 機能 プロシージャはプロジェクト全体で認識されますが、オブジェクトのインスタンスコントローラでは認識できないことを示します。 |
Static | オプションの要素 機能 プロシージャのローカル変数が呼び出し内で保存されることを示します。 Static 属性は 機能 外部で宣言された変数がプロシージャで使用されても、この変数には影響しません。 |
名前 | 必須要素。 機能の名前で、標準変数命名規則に従います。 |
arglist | オプションの要素呼び出すと 機能 プロシージャに渡される引数を表す変数のリスト。変数が複数ある場合は、カンマで区切ります。 |
タイプ | オプションの要素 機能 プロシージャによって返される値のデータ型は次のとおりです。 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(現在サポートされていません)、Date、String、(可変長を除く)、Object、Variant、カスタム形式 |
statements | オプションの要素 機能 プロシージャー内で実行されるステートメントのグループ。 |
expression | オプションの要素 機能 値を返します。 |
arglist 引数には次の構文とコンポーネントがあります。
[オプション] [ByVal | ByRef] [ParamArray] varname[( )] [As タイプ] [= defaultvalue]
コンポーネント | 説明 |
オプション | オプションの要素引数が不要であることを示します。引数を使用するには arglistのすべての次の引数をオプションで使用します。 オプション キーワードを使用して宣言する必要があります。もし ParamArrayを使用すると オプションはどの引数にも使用できません。 |
ByVal | オプションの要素引数が値によって渡されることを示します。 |
ByRef | オプションの要素引数が参照によって渡されることを示します。 Visual Basicでは ByRefがデフォルトです。 |
ParamArray | オプションの要素最後の引数 Variant 要素の オプション 配列であることを示すため arglistの最後の引数としてのみ使用されます。 ParamArray キーワードを使用すると、任意の数の引数を使用できます。 ByVal, ByRef, オプションと一緒に使用することはできません。 |
varname | 必須要素。引数を表す変数の名前で、標準変数命名規則に従います。 |
タイプ | オプションの要素プロシージャに渡される引数のデータ型は、 Byte, Boolean, Integer, 長い, Currency, シングル, Double, Decimal(現在サポートしていません) 日付, String (可変長の場合)、 Object, Variant、特定のオブジェクト型などになります。パラメータ オプションそれ以外の場合は、カスタム形式も指定できます。 |
defaultvalue | オプションの要素 定数私は定数式です。 オプション パラメータに対してのみ有効です。フォーマット Object面の明示的なデフォルト値は Nothingのみです。 |
*注:上記はハングルに翻訳されたchmヘルプから抜粋した。オンラインヘルプは以下のURLを参照してください。
Function プロシージャ sample code
' 다음의 사용자 정의 함수는 ' 전달된 인수의 제곱근을 반환합니다. Function CalculateSquareRoot(NumberArg As Double) As Double If NumberArg < 0 Then ' 인수를 계산합니다. Exit Function ' 프로시저 호출을 종료합니다. Else CalculateSquareRoot = Sqr(NumberArg) ' 제곱근을 반환합니다. End If End Function
3.2.9。エラー処理
Java、C#でのtry、catch、finally構文はサポートされていません。 On Error Goto構文でエラーを処理します。
構文 | 説明 |
On Error GoTo label | エラーが発生した場合は、指定したラベルに実行位置を移動する |
On Error Resume Next | 発生したエラーを無視し、次のコマンドで実行を続けます |
On Error GoTo 0 | 設定されたエラー処理方式(Goto、Resume)を初期化 |
エラー処理の基本コードは次のとおりです。
Sub ErrorTest() On Error GoTo ErrHandler 'Error 처리 시작 (=try) Dim i As Integer i = 1 / 0 On Error GoTo 0 'Error 처리 종료 (=finally) Exit Sub ErrHandler: 'Error 처리 (=catch) MsgBox Err.Description End Sub
上記のコードはわざとゼロ除算エラーを発生させ、ErrHandler領域の構文が実行されます。
3.2.10。 VB(Visual Basic)ドキュメントヘルプ(CHM)
CHM(Compiled HTML Help)ファイルで作成されたハングルVisual Basicのドキュメントを以前に受け取っておきましたが、ソースは不明です。 Visual Studio 6.0に含まれているヘルプファイルのようです。
ウイルスなどが気になる場合は、このファイルをダウンロードせずにオンラインヘルプを利用してください。
このファイルは、開く前にブロックを解除してくれば正常に使用できる。ファイルを選択して右クリックし、プロパティで右下の「ブロック解除」をチェックし、OKを押してファイルを開くだけです。 (下記画像参照)
3.2.11. Office 2013 VBA ドキュメント (CHM, 英語)
Office 2013製品(Excel、Access、OneNote、Outlook、PowerPoint、Publisher、Visio、Word)をVBAで扱う方法についてのドキュメントです。
https://www.microsoft.com/en-us/download/details.aspx?id=40326
上のURLの下部のInstall Instructionsを展開すると、CHMファイルの内容が見えないときに対処する方法が説明されている。以前に説明した「遮断解除」についての内容である。
Office 2013以降のバージョンのオフラインヘルプ(CHM)は見つかりませんでした。
この記事では、VBA文法について説明しました。最も基本的な内容だけで推測されており、この文法だけを確実に理解すれば、ほとんどVBAコードは読み書きできる。次に、データ型(Data type)について見てみましょう。
<<関連記事一覧>>
- Excel VBAコースを開始します。 (講座予告、feat.Excel VBAを推奨する理由)
- Excel VBAコース(1):Excel VBAの概要
- Excel VBAコース(2):Excel VBAの基礎
- Excel VBAコース(3):Excel Object Model
- Excel VBAコース(4):Excel Object Modelを扱う
- Excel VBAコース(5):Excelファイル拡張子、VBE、フォント設定
- Excel VBAコース(6):Excel VBA言語基本 - 変数
- Excel VBAコース(7):Excel VBA言語基本 - 文法(Syntax)
- Excel VBAコース(8):Excel VBA言語基本 - データ型(Data type)、データ構造(Data structure)
- Excel VBAコース(9):Excel VBA How-To
- Excel VBAコース(10):Excel VBAで開発され使用されているツール
- Excel VBAコース全体目次