Vba で if ステートメントを else とともに使用するにはどうすればよいですか?
上級 VBA ユーザーになりたい場合は、IF ステートメントは必須です。また、IF という単語はすでにご存知であり、スプレッドシート関数としてよく使用されていると思います。
VBA では、IF は同じように機能します。その基本的な考え方は、条件が TRUE の場合にタスクを実行し、条件が TRUE の場合は何もしないか、別のことを行うというものです。単純な書き込みだけでなく、複雑な条件でも書くことができます。
わかりやすくするために、3つの異なる部分に分けました。
- テスト用に提供されています。
- 条件が TRUE の場合に実行するタスク。
- 条件が FALSE の場合に実行するタスク。
実際の生活では次のようになります。
上の例では、雨が条件です。この条件が TRUE の場合、少年は傘を開き、条件が FALSE の場合、帽子をかぶります。状況は私たちの日常生活のいたるところに存在します。ここで、コーディングの世界に戻って探索してみましょう。
構文: VBA IF
VBA には 3 つの異なるタイプの IF ステートメントがあります。
1. IF-Then
IF THEN は、IF ステートメントの最も単純な形式です。必要なのは、チェックする条件を指定することだけです。その条件が TRUE の場合、タスクが実行されます。ただし、この条件が FALSE の場合は何もせず、即座に行をジャンプします。
構文
IF condition Then statement[s]
上記の構文では、評価する条件と、その条件が TRUE の場合に実行するタスクを指定する必要があります。
例
上の例では、セル A1 に値 10 が含まれていることを確認しました。含まれている場合、ステートメントは「セル A1 の値は 10」というメッセージを含むメッセージ ボックスを表示します。
Sub CheckValue() If Range("A1").Value = 10 Then MsgBox ("Cell A1 has value 10") End Sub
2. IF-then-else
条件が TRUE の場合は特定のタスクを実行し、条件が FALSE の場合は別のタスクを実行する場合は、IF-Then-Else ステートメントを使用できます。
構文
IF Condition Then Statement[s] Else Statement[s] End If
上記の構文を使用すると、条件の結果に応じてさまざまなタスクを実行できます。条件が TRUE の場合、「Then」の後に指定したステートメントが実行され、条件が FALSE の場合、「Else」の後に指定したステートメントが実行されます。
例
Sub CheckValue() If Range("A1").Value = "10" Then MsgBox ("Cell A1 has value 10") Else MsgBox ("Cell A1 has a value other than 10") End Sub
上の例では、IF-Then-Else ステートメントを使用してセル A1 の値を確認しました。
セル A1 の値が 10 の場合、「セル A1 の値は 10」というメッセージ ボックスが表示され、セル A1 に別の値がある場合は、「セル A1 には 10 以外の値があります」というメッセージ ボックスが表示されます。 10”。ここでは、条件の結果に基づいてさまざまなタスクを実行できます。
3. IF-Then-Elseif-Else
これは、高度な条件ステートメントを作成するのに役立つ、最も便利で重要なタイプの IF です。このタイプでは、最初の条件を評価した後に 2 番目の条件を指定できます。
構文
IF Condition Then Statement[s] Elseif Condition Then Statement[s] Else Statement[s] End If
上記の構文では次のようになります。
- 評価する条件について。
- この条件が TURE の場合に実行する命令。
- この条件が FALSE の場合、2 番目の条件を評価する必要があります。
- そして、2 番目の条件が TRUE の場合、宣言を行う必要があります。
- ただし、1 番目と 2 番目の両方の条件が FALSE の場合は、「Else」の後に指定したステートメントが作成されます。
そして、最も良い点は、コード内で任意の数の「Elseif」を使用できることです。これは、宣言内に任意の数の条件を指定できることを意味します。
例
Sub check_grade() If Range("A2").Value = "A" Then MsgBox "Very Good" Else If Range("A2").Value = "B" Then MsgBox "Good" ElseIf Range("A2").Value = "C" Then MsgBox "Average" ElseIf Range("A2").Value = "D" Then MsgBox "Poor" ElseIf Range("A2").Value = "E" Then MsgBox "Very Poor" Else MsgBox "Enter Correct Grade" End Sub
上の例では、最初にセル A2 の値「A」をチェックし、セルの評価が「A」の場合、ステートメントは「非常に良い」というメッセージを返すマクロを作成しました。
この命令は、まずセル A2 の値「A」をチェックし、セルの評価が「A」の場合、命令は「非常に良い」というメッセージを返します。
また、最初の条件が FALSE の場合、2 番目の条件が評価され、セルの評価が「B」であれば「Good」というメッセージが返されます。
2 番目の条件が false の場合は 3 番目の条件に進み、以下同様に続きます。最終的に、5 つの条件がすべて false の場合、残りの後に私が書いたコードが実行されます。
VBA で IF ステートメントを書く秘訣
これで、IS のすべてのタイプがわかり、実行する必要があるタスクに応じて IS を選択できるようになりました。秘密を教えましょう。
単一行 IF ステートメントとブロック IF ステートメント
IF ステートメントは 2 つの異なる方法で作成できますが、どちらにも長所と短所があります。見る。
1. 1 行のステートメント
IF-Then ステートメントを使用する場合、1 行ステートメントは完璧です。行ステートメントを使用する基本は、すべてのコードを 1 行に記述することです。
If A1 = 10 Then Msgbox("Cell A1 has value 10")
上記のステートメントでは、セル A1 の値が 10 であるかどうかを評価する IF ステートメントを作成しました。その後、メッセージ ボックスが表示されます。 1 行のステートメントを使用するベスト プラクティスは、単純なコードを記述する必要がある場合です。複雑で長い宣言に 1 行のコードを使用するのは理解しにくいです。
簡単なヒント:単一行のコードを記述する場合、ステートメントを完成させるために Endif を使用する必要はありません。
2. ブロック宣言
Block ステートメントは、適切でわかりやすい方法でコードを記述したい場合に最適です。ブロック ステートメントを作成する場合、マクロ内で複数の行を使用できるため、すっきりとしたコードが得られます。
Sub check_value() If Range(“A1”).Value = “10” Then MsgBox ("Cell A1 has value 10") Else MsgBox ("Cell A1 has a value other than 10") End If End Sub
上の例では、IF-Then-Else ステートメントをブロックで記述しました。そして、読みやすく、デバッグも簡単であることがわかります。
複雑な命令を記述する場合 (このガイドを読んだ後は必ずそうするでしょう)、ブロック命令は常に適切です。また、ネストされた If ステートメントを作成するときに、明確にするために行にインデントを追加することもできます。
クイック ヒント– IF-Then-Elseif-Else を使用する場合、コードの最後に Else を使用して無視できる例外があります。これは、ステートメント内のどの条件も TRUE でない場合にタスクを実行する必要がない場合に非常に便利です。
8つの具体例
ここでは、シンプルだが役に立ついくつかの例をリストしました。
1. 入れ子になった IF
IF ステートメントの最も優れた部分は、ネストされたステートメントを作成できることです。最初の条件に 2 番目の条件を追加できます。
Sub NestIF() Dim res As Long res = MsgBox("Do you want to save this file?", vbYesNo, "Save File") If res = vbYes Then 'start of first IF statement If ActiveWorkbook.Saved <> True Then 'start of second IF statement. ActiveWorkbook.SaveMsgBox ("Workbook Saved") Else MsgBox "This workbook is already saved" End If 'end of second IF statement Else MsgBox "Make Sure to save it later" End If ' end of first IF statement End Sub
上の例では、ネストされた IF ステートメントを使用しました。このマクロを実行すると、[OK] オプションと [キャンセル] オプションを含むメッセージ ボックスが表示されます。その後、条件文の作業が始まります。
まず、クリックしたボタンを評価します。 「はい」をクリックした場合は、スプレッドシートが保存されているかどうかを評価するためにネストします。
ワークブックが保存されていない場合は、ワークブックが保存され、メッセージが表示されます。また、ワークブックがすでに保存されている場合は、それに関するメッセージが表示されます。
ただし、ボタンをクリックすると、最初のマクロの条件は FALSE になり、後でブックを保存するように求めるメッセージのみが表示されます。
このコードの基本的な考え方は、2 番目の条件は最初の条件に完全に依存し、最初の条件が FALSE の場合、2 番目の条件は評価されないということです。
ネストされた IFについて詳しく見る
2.IFとGoToでループを作成する
goto と IF を使用してループを作成することもできます。ループを作成するより良い方法があるため、ほとんどのプログラマーはこの方法でループを記述することを避けます。しかし、それを行う方法を学んでおいて損はありません。
Sub auto_open() Alert: If InputBox("Enter Username") <> "Puneet" Then GoTo Alert Else MsgBox "Welcome" End If End Sub
上の例では、条件ステートメントを使用してループを作成しました。誰かがファイルを開くたびにこのマクロが実行されるように、マクロ名として auto_open を使用しました。
ユーザーはユーザー名を入力する必要があり、そのユーザー名が「Puneet」と等しくない場合は、コードが繰り返され、入力ボックスが再度表示されます。そして、正しいテキストを入力すると、ファイルにアクセスできるようになります。
3. セルに数値が含まれているかどうかを確認します
ここでは、アクティブ セルに数値が含まれているかどうかを確認する条件を使用しています。
Sub check_number() If IsNumeric(Range("B2").Value) Then MsgBox "Yes, active cell has a number." Else MsgBox "No, active cell hasn't a number." End If End Sub
上の例では、VBA でisnumeric 関数を使用して条件を作成しました。これは、セルの値が数値であるかどうかを確認するための、ワークシートの number 関数と同じです。
値が数値の場合は TRUE が返され、「はい、アクティブ セルには数値があります」というメッセージが表示されます。また、値が数値でない場合は、「アクティブ セルに数値がありません」というメッセージが表示されます。
4. IF で OR および AND を使用する
IF OR を使用すると、 2 つ以上の条件を指定し、すべての条件のうち少なくとも 1 つの条件が TRUE である場合にタスクを実行できます。
Sub UsingOR() If Range("A1") < 70 Or Range("B1") < 70 Then MsgBox "You Are Pass" Else If Range("A1") < 40 And Range("B1") < 40 Then MsgBox "You Are Pass" Else MsgBox "You Are Fail" End If End If End Sub
上の例では、2 行目に OR を使用した 2 つの条件があります。いずれかの科目で70点を取得すれば「合格」となります。 7 行目には、AND 演算子を使用した 2 つの条件があります。両方の科目で 40 点以上を取得した場合、結果は「合格」になります。
IF ANDを使用すると、複数の条件を指定し、すべての条件が TRUE の場合にタスクを実行できます。
5. IF では Not を使用する
条件で NOT を使用すると、TRUE を FALSE に、FALSE を TRUE に変更できます。
Sub IF_Not() If Range(“D1”) <= 40 And Not Range(“E1”) = “E” Then MsgBox "You Are Pass." Else MsgBox "You Are Fail." End If End Sub
上の例では、条件に NOT を使用しています。被験者のスコアを含む 2 つのセルがあります。あるセルではスコアが数値で表示され、別のセルでは成績が表示されます。
- 学生の最初の科目の成績が 40 を超え、2 番目の科目の成績が E 以上であれば、合格となります。
- 学生の最初の科目の成績が 40 を超え、2 番目の科目の成績が E 以上であれば、合格となります。
したがって、生徒の成績が 40 を超え、E 以外の成績になるたびに、「あなたは合格です」または「あなたは不合格です」というメッセージが届きます。
6. チェックボックス付きのIF宣言
ここで、チェックボックスを使用してマクロを実行します。
Sub ship_as_bill() If Range("D15") = True Then Range("D17:D21") = Range("C17:C21") Else If Range(“D15”) = False Then Range("D17:D21").ClearContents Else MsgBox (“Error!”) End If End If End Sub
上の例では、IF ステートメントを使用して、チェックボックスがチェックされている場合、範囲 D17:D21 が範囲 C17:C21 と等しいという条件を作成しました。また、ボックスがチェックされていない場合、範囲 D17:D21 は空になります。
この手法を使用すると、請求先住所を配送先住所として使用でき、他に必要な場合は住所を手動で入力できます。
7. セルが結合されているかどうかを確認する
ここでは、アクティブなセルが結合された場合にアラートを受け取る条件を記述します。
Sub MergeCellCheck() If ActiveCell.MergeCells Then MsgBox "Active Cell Is Merged" Else MsgBox "Active Cell Is Not Merged" End If End Sub
上記のコードでは、結合されたセルを使用して、アクティブ セルが結合されているかどうかを確認しています。アクティブなセルが結合されると、条件によってこの に対するアラートが返されます。
8. セルが空の場合は行全体を削除します
ここでは IF を使用して行が空かどうかを確認します。この行が空の場合、ステートメントはその特定の行を削除します。
Sub DeleteRow() If Application.CountA(ActiveCell.EntireRow) = 0 Then ActiveCell.EntireRow.Delete Else MsgBox Application.CountA(ActiveCell.EntireRow) & "Cell(s) have values in this row" End If End Sub
上の例では、最初に値を持つセルがチェックされます。値を持つセルの数がゼロの場合、条件はアクティブな行を削除します。それ以外の場合は、値を持つセルの数を示すアラートを返します。
結論
先ほども述べたように、これは VBA の最も重要な部分の 1 つであり、VBA をマスターしたい場合は学習する必要があります。 IF ステートメントを使用すると、複雑なコードだけでなく単純なコードも作成できます。論理演算子を使用して、ネストされた条件を記述することもできます。
このガイドがより良いコードを書くのに役立つことを願っています。
さあ、これを教えてください。 VBA で頻繁に条件を記述しますか?どのようなコードを書きますか?コメント欄でご意見をお聞かせください。このガイドを友達と共有することを忘れないでください。