VBAでIf文を使っていると、条件が増えるにつれてコードが読みにくくなることがあります。
例えば、次のような条件です。
- 申請者名が入力されている
- 金額が0より大きい
- ステータスが「承認済み」
- 削除対象ではない
- 処理日が期限内である
これらを一つのIf文へ直接記述すると、どの条件を判定しているのか分かりにくくなります。
If applicantName <> "" _
And applicationAmount > 0 _
And approvalStatus = "承認済み" _
And isDeleted = False _
And processDate <= dueDate Then
' 登録処理
End If
コードとしては間違いではありません。
しかし、条件がさらに増えたり、仕様変更で一部の判定を修正したりすると、条件式全体を読み直さなければならなくなります。
このような場合は、判定結果をBoolean型の変数へ入れることで、If文を読みやすく整理できます。
この記事では、If文の条件を変数に入れる基本から、変数へ分けるメリット、実務で使いやすい変数名の付け方まで詳しく解説します。
✅ VBAでIf文の条件を変数に入れる基本的な方法
If文の条件は、Boolean型の変数へ代入できます。
Boolean型は、TrueまたはFalseを保持するデータ型です。
例えば、年齢が20歳以上かどうかを判定する場合は、次のように記述できます。
Sub CheckUserAge()
Dim userAge As Long
Dim isAdult As Boolean
userAge = 25
isAdult = userAge >= 20
If isAdult Then
MsgBox "成人です。"
End If
End Sub
次の部分で、比較結果を変数へ代入しています。
isAdult = userAge >= 20
userAgeが20以上であれば、isAdultにはTrueが入ります。
20未満であれば、Falseが入ります。
そのため、If文では比較式をもう一度書かず、次のように変数名だけで判定できます。
If isAdult Then
・比較式の結果をBoolean型の変数で受け取る
条件式は、最終的にTrueまたはFalseとして評価されます。
例えば、次の比較式もすべてBoolean型の結果を返します。
userAge >= 20
salesAmount > 0
customerName <> ""
approvalStatus = "承認済み"
これらの結果を、それぞれBoolean型の変数へ代入できます。
Dim isAdult As Boolean
Dim hasSalesAmount As Boolean
Dim hasCustomerName As Boolean
Dim isApproved As Boolean
isAdult = userAge >= 20
hasSalesAmount = salesAmount > 0
hasCustomerName = customerName <> ""
isApproved = approvalStatus = "承認済み"
条件式を変数へ入れることで、単なる比較処理ではなく、判定の意味を変数名で表現できるようになります。
If文の条件を変数へ入れる場合は、TrueまたはFalseを保持するBoolean型を使用します。Boolean型の基本や初期値、判定時の注意点については、【VBA】Boolean型とは?True/Falseの使い方と実務での注意点を徹底解説で詳しく解説しています。
✅ VBAのIf文で条件を変数に入れると読みやすくなる理由
条件を変数へ入れる最大のメリットは、If文を読んだだけで処理の意図を把握しやすくなることです。
例えば、次のコードを見てみましょう。
If applicantName <> "" _
And applicationAmount > 0 _
And approvalStatus = "承認済み" _
And isCanceled = False Then
MsgBox "申請を登録できます。"
End If
このコードでは、比較式を一つずつ読まなければ、何を確認しているのか判断できません。
一方、条件を変数へ分けると、次のように書けます。
Dim hasApplicantName As Boolean
Dim hasValidAmount As Boolean
Dim isApproved As Boolean
Dim canRegister As Boolean
hasApplicantName = applicantName <> ""
hasValidAmount = applicationAmount > 0
isApproved = approvalStatus = "承認済み"
canRegister = hasApplicantName _
And hasValidAmount _
And isApproved _
And Not isCanceled
If canRegister Then
MsgBox "申請を登録できます。"
End If
If文を見ると、canRegister、つまり「登録できる場合」に処理することがすぐに分かります。
また、登録できる条件も、変数名を読むだけで把握できます。
- 申請者名がある
- 有効な金額である
- 承認済みである
- 取消済みではない
比較演算子やセル番地を読み解かなくても、業務上の意味を理解できる点が大きなメリットです。
・条件式を業務上の意味へ置き換えられる
条件を変数へ入れる方法は、単にコードを短くするためのものではありません。
比較式を、業務上の意味が分かる名前へ置き換えるための方法です。
例えば、次の条件式だけでは、何のための判定か分かりにくい場合があります。
amount >= 100000 And status = "承認済み"
これを変数へ入れると、目的を明確にできます。
isHighValueOrder = amount >= 100000
isApproved = status = "承認済み"
さらに、最終的な判定も変数で表現できます。
requiresManagerCheck = isHighValueOrder And isApproved
このように書けば、「高額かつ承認済みの注文は管理者確認が必要」という業務ルールが、コードから読み取れます。
Boolean型の変数へ入れる条件式では、=や<>、>=などの比較演算子を使用します。複数条件で比較演算子を安全に使い分ける方法については、【VBA】比較演算子を用いた複数条件の使用方法|実務で迷わない条件分岐の設計をご覧ください。
条件を変数へ分けても、変数名から判定内容が分からなければ可読性は向上しません。意味が伝わる変数名の付け方や命名規則については、【VBA】変数名の付け方|キャメルケース・スネークケースなど命名規則を徹底解説も参考にしてください。
✅ VBAで複数のIf条件をBoolean型の変数へ分ける方法
複数条件を変数へ入れる場合は、条件ごとに一つのBoolean型変数を用意します。
次の例では、売上データを出力できるかどうかを判定します。
出力条件は次のとおりです。
- 顧客名が入力されている
- 売上金額が0より大きい
- ステータスが「確定」
- 出力済みではない
Sub CheckExportConditions()
Dim customerName As String
Dim salesAmount As Currency
Dim salesStatus As String
Dim isExported As Boolean
Dim hasCustomerName As Boolean
Dim hasValidSalesAmount As Boolean
Dim isConfirmed As Boolean
Dim canExport As Boolean
customerName = "株式会社サンプル"
salesAmount = 250000
salesStatus = "確定"
isExported = False
' 出力に必要な条件を個別に判定
hasCustomerName = Trim(customerName) <> ""
hasValidSalesAmount = salesAmount > 0
isConfirmed = salesStatus = "確定"
' すべての条件を満たした場合のみ出力可能
canExport = hasCustomerName _
And hasValidSalesAmount _
And isConfirmed _
And Not isExported
If canExport Then
MsgBox "売上データを出力できます。"
Else
MsgBox "出力条件を満たしていません。"
End If
End Sub
・条件判定と実行処理を分けて管理する
このコードでは、条件判定と実際の処理を分けています。
最初に、出力に必要な条件を一つずつ確認します。
hasCustomerName = Trim(customerName) <> ""
hasValidSalesAmount = salesAmount > 0
isConfirmed = salesStatus = "確定"
次に、それらをまとめて最終的な判定を作ります。
canExport = hasCustomerName _
And hasValidSalesAmount _
And isConfirmed _
And Not isExported
最後に、If文では「出力できるかどうか」だけを確認します。
If canExport Then
この構成にすると、条件の追加や変更が発生したときも、判定部分を中心に修正できます。
例えば、「売上金額が1万円以上でなければ出力できない」という仕様に変わった場合は、次の1行を変更するだけです。
hasValidSalesAmount = salesAmount >= 10000
メイン処理のIf文を変更する必要はありません。
個別に判定したBoolean型の変数は、ANDやORを使って最終的な条件へまとめられます。複数条件の組み合わせ方や、誤判定を防ぐ設計については、【VBA】IF文のandとorを組み合わせた複数条件|実務で迷わない条件設計で詳しく解説しています。
✅ VBAでIf条件を変数に入れるべき場面
すべてのIf文で条件を変数へ入れる必要はありません。
単純な条件まで変数へ分けると、かえってコードが長くなることがあります。
例えば、次のような判定であれば、直接If文へ書いても十分に読みやすいでしょう。
If rowCount = 0 Then
MsgBox "データがありません。"
End If
一方、次のような場合は変数へ分けるメリットがあります。
- ANDやORで複数条件を組み合わせている
- 条件式が長い
- 同じ条件を複数箇所で使う
- 業務上の意味を明確にしたい
- 条件ごとにデバッグしたい
- 将来的に条件が増える可能性がある
- 条件を満たさない理由を記録したい
・条件が3つ以上になる場合は変数化を検討する
明確な決まりではありませんが、条件が3つ以上になる場合は、一度変数へ分けることを検討するとよいでしょう。
例えば、次のコードはまだ読めますが、変更時に確認しづらい構成です。
If userName <> "" _
And departmentName <> "" _
And userStatus = "有効" Then
' 登録処理
End If
変数へ分けると、次のようになります。
hasUserName = userName <> ""
hasDepartmentName = departmentName <> ""
isActiveUser = userStatus = "有効"
canRegisterUser = hasUserName _
And hasDepartmentName _
And isActiveUser
If canRegisterUser Then
' 登録処理
End If
コードの行数は増えますが、各条件の役割が明確になります。
実務では、短いコードよりも、仕様変更や不具合調査のときに迷わないコードの方が扱いやすい場合があります。
ANDとORが混在する複数条件では、括弧を使って判定のまとまりを明確にすることも重要です。括弧を使った安全な条件設計については、【VBA】IF文の括弧を用いた複数条件|可読性と誤判定を防ぐ設計手法で詳しく解説しています。
条件を整理せずにIf文を追加していくと、ネストが深くなり、処理の流れを追いにくくなることがあります。If文を入れ子にするべき場面と避けるべき場面については、【VBA】ネスト(入れ子)とは?IF文を正しく使うための基本と実務判断で詳しく解説しています。
✅ VBAのIf条件を変数に入れるとデバッグしやすくなる
複数条件を一つのIf文へ直接書くと、処理が実行されなかったときに、どの条件がFalseだったのか分かりにくくなります。
If customerName <> "" _
And salesAmount > 0 _
And salesStatus = "確定" Then
' 出力処理
End If
このIf文を通過しなかった場合、次のどれが原因か確認しなければなりません。
- 顧客名が空白だった
- 売上金額が0以下だった
- ステータスが「確定」ではなかった
条件を変数へ分けておけば、ローカルウィンドウやイミディエイトウィンドウで各判定結果を確認できます。
Debug.Print "顧客名あり: " & hasCustomerName
Debug.Print "金額有効: " & hasValidSalesAmount
Debug.Print "確定済み: " & isConfirmed
Debug.Print "出力可能: " & canExport
実行結果の例は次のようになります。
顧客名あり: True
金額有効: True
確定済み: False
出力可能: False
この結果から、ステータスの条件を満たしていないことがすぐに分かります。
・どの条件を満たしていないか確認できる
条件を変数へ分ける設計は、開発中のデバッグだけでなく、運用開始後の原因調査にも役立ちます。
例えば、処理対象にならなかった理由をログへ記録できます。
If Not hasCustomerName Then
Debug.Print "顧客名が入力されていません。"
End If
If Not hasValidSalesAmount Then
Debug.Print "売上金額が正しくありません。"
End If
If Not isConfirmed Then
Debug.Print "ステータスが確定ではありません。"
End If
一つの長い条件式だけでは、「処理しなかった」という結果しか分かりません。
条件を個別に管理しておけば、「なぜ処理しなかったのか」まで確認できるようになります。
これは、複数の利用者が使う業務マクロや、処理結果を後から確認する必要がある仕組みで特に重要です。
条件式の結果が想定と異なる場合は、Boolean型の変数だけでなく、演算子が評価される順番も確認する必要があります。VBAにおける演算子の優先順位については、【VBA】演算子の処理される優先順位|計算ミスを防ぐ基本ルールと実務での注意点をご覧ください。
✅ VBAでIf条件を入れるBoolean型変数の名前を付ける方法
条件を変数へ入れても、変数名が分かりにくければ可読性は向上しません。
例えば、次のような名前では判定内容を読み取れません。
Dim flag1 As Boolean
Dim check2 As Boolean
Dim resultFlag As Boolean
変数名だけを見ても、何がTrueで何がFalseなのか分からないためです。
Boolean型の変数には、判定結果が自然に読める名前を付けることが重要です。
よく使われる形は次のとおりです。
is:状態を表すhas:値や対象を持っているか表すcan:処理できるか表すshould:処理すべきか表すneeds:対応が必要か表す
例えば、次のように命名できます。
Dim isApproved As Boolean
Dim hasCustomerName As Boolean
Dim canExport As Boolean
Dim shouldContinue As Boolean
Dim needsReview As Boolean
・Trueの状態が自然に読める名前にする
Boolean型の変数は、Trueになったときの意味が自然に読める名前にすると分かりやすくなります。
例えば、次の名前は少し判断しづらいです。
Dim customerNameCheck As Boolean
Trueのときに「顧客名がある」のか、「顧客名がない」のかが分かりません。
次のように書けば意味が明確です。
Dim hasCustomerName As Boolean
同様に、次のような変数名も避けた方がよいでしょう。
Dim errorFlag As Boolean
エラーがあるとTrueなのか、エラーがないとTrueなのかが曖昧です。
意味を明確にするなら、次のようにします。
Dim hasError As Boolean
Dim isValid As Boolean
変数名は短さよりも、条件の意味が誤解なく伝わることを優先します。
Boolean型では、Trueになったときの状態が自然に伝わる変数名を付けることが重要です。キャメルケースなどの命名規則や、保守しやすい変数名の考え方については、【VBA】変数名の付け方|キャメルケース・スネークケースなど命名規則を徹底解説で詳しく解説しています。
✅ VBAで複雑なIf条件を関数へ切り出す方法
条件がさらに複雑になる場合は、Boolean型の変数だけでなく、判定処理をFunctionへ切り出す方法もあります。
例えば、申請データを登録できるかどうかを判定する処理を関数にすると、次のように書けます。
Sub RegisterApplication()
Dim applicantName As String
Dim applicationAmount As Currency
Dim approvalStatus As String
Dim isCanceled As Boolean
applicantName = "田中"
applicationAmount = 50000
approvalStatus = "承認済み"
isCanceled = False
If CanRegisterApplication( _
applicantName, _
applicationAmount, _
approvalStatus, _
isCanceled) Then
MsgBox "申請データを登録します。"
Else
MsgBox "登録条件を満たしていません。"
End If
End Sub
Private Function CanRegisterApplication( _
ByVal applicantName As String, _
ByVal applicationAmount As Currency, _
ByVal approvalStatus As String, _
ByVal isCanceled As Boolean) As Boolean
Dim hasApplicantName As Boolean
Dim hasValidAmount As Boolean
Dim isApproved As Boolean
hasApplicantName = Trim(applicantName) <> ""
hasValidAmount = applicationAmount > 0
isApproved = approvalStatus = "承認済み"
CanRegisterApplication = hasApplicantName _
And hasValidAmount _
And isApproved _
And Not isCanceled
End Function
If文には、次のように判定の目的だけが残ります。
If CanRegisterApplication(...) Then
これにより、メイン処理では「申請を登録できるか」を確認していることがすぐに分かります。
・条件を関数へ切り出すメリット
判定処理をFunctionへ切り出すと、次のメリットがあります。
- メイン処理が短くなる
- 条件判定を再利用できる
- 判定部分だけテストしやすい
- 業務ルールの変更箇所が明確になる
- 同じ条件式を複数箇所へ書かずに済む
例えば、同じ登録条件を別の処理でも使う場合、Functionを呼び出すだけで済みます。
If CanRegisterApplication( _
applicantName, _
applicationAmount, _
approvalStatus, _
isCanceled) Then
同じ条件式を複数箇所へコピーすると、仕様変更時に一部だけ修正し忘れる可能性があります。
関数へまとめておけば、判定ロジックを一か所で管理できます。
条件判定を関数へ切り出しても分岐パターンが多くなる場合は、If文ではなくSelect Case文を使った方が読みやすくなることがあります。文字列による複数分岐の整理方法については、【VBA】Select Caseで文字列を判定する方法|複数条件を見やすく分岐する実務テクニックも参考にしてください。
✅ VBAでIf条件を変数に入れすぎると読みにくくなる場合
条件を変数へ入れる方法は便利ですが、すべての比較式を変数化すればよいわけではありません。
単純な条件まで細かく分けると、コード量が増え、かえって流れを追いにくくなることがあります。
例えば、次のコードは変数化しすぎています。
Dim isRowCountZero As Boolean
Dim shouldShowMessage As Boolean
isRowCountZero = rowCount = 0
shouldShowMessage = isRowCountZero
If shouldShowMessage Then
MsgBox "データがありません。"
End If
この程度の条件であれば、直接書いた方が分かりやすいでしょう。
If rowCount = 0 Then
MsgBox "データがありません。"
End If
・変数化する目的を明確にする
条件を変数へ入れるべきかどうかは、次の観点で判断します。
- 条件に業務上の意味があるか
- 条件が複数あるか
- 同じ条件を再利用するか
- デバッグやログ出力で個別確認したいか
- 将来的に条件が変更される可能性があるか
単純な比較式を一度しか使わない場合は、直接If文へ書いても問題ありません。
一方、複数条件をまとめる場合や、条件の意味を名前で表したい場合は、変数化する価値があります。
・1回しか使わない変数でも意味があれば有効
「1回しか使わない変数は不要」と考える方もいます。
しかし、使用回数だけで判断する必要はありません。
例えば、次の条件式は1回しか使わなくても、変数名によって意味が明確になります。
isWithinApprovalLimit = applicationAmount <= approvalLimit
If isWithinApprovalLimit Then
比較式そのものよりも、業務上の意味を伝えられる場合は、1回だけ使う変数でも十分に価値があります。
Boolean型の変数が増えすぎて処理を追いにくくなる場合は、条件分岐の構造自体を見直すことも必要です。Select Case文で複数条件を整理する方法については、【VBA】Select Case文でAND条件を使う方法|複数条件を見やすく分岐する実務テクニックをご覧ください。
✅ VBAでIf条件を変数に入れる実務的な入力チェック例
次のコードでは、売上データを登録する前に、複数の入力項目を確認します。
確認する条件は次のとおりです。
- 顧客名が入力されている
- 売上金額が0より大きい
- 売上日が入力されている
- ステータスが「確定」
- 登録済みではない
Sub ValidateSalesData()
Dim targetWorksheet As Worksheet
Dim customerName As String
Dim salesAmount As Currency
Dim salesDate As Variant
Dim salesStatus As String
Dim isRegistered As Boolean
Dim hasCustomerName As Boolean
Dim hasValidSalesAmount As Boolean
Dim hasSalesDate As Boolean
Dim isConfirmed As Boolean
Dim canRegister As Boolean
Set targetWorksheet = ThisWorkbook.Worksheets("売上データ")
customerName = CStr(targetWorksheet.Range("B2").Value)
salesAmount = targetWorksheet.Range("C2").Value
salesDate = targetWorksheet.Range("D2").Value
salesStatus = CStr(targetWorksheet.Range("E2").Value)
isRegistered = CBool(targetWorksheet.Range("F2").Value)
' 入力項目ごとに判定結果を変数へ格納
hasCustomerName = Trim(customerName) <> ""
hasValidSalesAmount = salesAmount > 0
hasSalesDate = IsDate(salesDate)
isConfirmed = salesStatus = "確定"
' 登録可能かどうかをまとめて判定
canRegister = hasCustomerName _
And hasValidSalesAmount _
And hasSalesDate _
And isConfirmed _
And Not isRegistered
If canRegister Then
MsgBox "売上データを登録できます。"
Else
ShowValidationErrors _
hasCustomerName, _
hasValidSalesAmount, _
hasSalesDate, _
isConfirmed, _
isRegistered
End If
End Sub
Private Sub ShowValidationErrors( _
ByVal hasCustomerName As Boolean, _
ByVal hasValidSalesAmount As Boolean, _
ByVal hasSalesDate As Boolean, _
ByVal isConfirmed As Boolean, _
ByVal isRegistered As Boolean)
Dim errorMessage As String
If Not hasCustomerName Then
errorMessage = errorMessage & "・顧客名が入力されていません。" & vbCrLf
End If
If Not hasValidSalesAmount Then
errorMessage = errorMessage & "・売上金額が正しくありません。" & vbCrLf
End If
If Not hasSalesDate Then
errorMessage = errorMessage & "・売上日が正しくありません。" & vbCrLf
End If
If Not isConfirmed Then
errorMessage = errorMessage & "・ステータスが確定ではありません。" & vbCrLf
End If
If isRegistered Then
errorMessage = errorMessage & "・すでに登録済みです。" & vbCrLf
End If
MsgBox errorMessage, vbExclamation
End Sub
・判定結果をエラーメッセージへ再利用する
このコードでは、Boolean型の変数を最終判定だけでなく、エラーメッセージの作成にも使っています。
例えば、hasCustomerNameがFalseなら、顧客名が未入力であることを表示します。
If Not hasCustomerName Then
errorMessage = errorMessage & "・顧客名が入力されていません。" & vbCrLf
End If
一つの長いIf条件だけで判定すると、処理できなかったことは分かっても、何が原因なのか利用者には伝わりません。
条件を個別の変数へ分けておけば、どの入力項目に問題があるかを具体的に案内できます。
入力値に余分なスペースが含まれていると、Boolean型の判定結果が意図せずFalseになることがあります。Trim関数やReplace関数を使って文字列を整える方法については、【VBA】スペースを一括削除する方法|Replace関数・Trim関数の使い分けと実務活用をご覧ください。
・利用者が修正できる情報を返す
実務では、単に「エラーです」と表示するだけでは不十分です。
利用者が次に何を修正すればよいか分かるメッセージが必要です。
例えば、次のような表示では原因が分かりません。
MsgBox "登録できません。"
個別の判定結果を使えば、次のように具体的な情報を返せます。
・顧客名が入力されていません。
・売上日が正しくありません。
・ステータスが確定ではありません。
条件を変数へ入れる設計は、コードの可読性だけでなく、利用者への案内を改善するうえでも役立ちます。
Boolean型の変数で判定した条件は、複数行のデータから対象だけを抽出するときにも活用できます。For文とIf文を組み合わせた実務的なデータ抽出については、【VBA】条件に合うデータを抽出する方法|For文・IF文で実務データを自在に扱うで詳しく解説しています。
✅ VBAでIf条件を変数に入れるときによくあるミス
条件を変数へ入れる際は、いくつか注意点があります。
・変数名とTrueの意味が一致していない
例えば、次のコードは読み手を混乱させます。
isValid = customerName = ""
isValidがTrueなのに、実際には顧客名が空白という状態だからです。
次のように、変数名と判定内容を一致させます。
hasCustomerName = customerName <> ""
または、空白状態を表したいなら次のようにします。
isCustomerNameEmpty = customerName = ""
・判定前の値を更新したあと再計算していない
Boolean型の変数には、代入した時点の判定結果が保存されます。
例えば、次のコードでは注意が必要です。
hasCustomerName = customerName <> ""
customerName = "田中"
If hasCustomerName Then
MsgBox "顧客名があります。"
End If
customerNameを更新しても、hasCustomerNameは自動では更新されません。
再度判定する必要があります。
customerName = "田中"
hasCustomerName = customerName <> ""
条件を変数へ入れるときは、元データを変更したあとに判定結果も更新する設計にします。
・Boolean型を文字列として扱う
Boolean型はTrueまたはFalseを保持するための型です。
次のように文字列として管理すると、比較が増えて読みづらくなります。
Dim validationResult As String
validationResult = "OK"
If validationResult = "OK" Then
二つの状態だけを表すなら、Boolean型を使う方が自然です。
Dim isValid As Boolean
isValid = True
If isValid Then
一方、「未入力」「形式不正」「期限切れ」のように複数の状態を表す場合は、Boolean型だけでなく、文字列やEnumを使う設計も検討します。
文字列を条件式へ使用する場合は、比較演算子の書き方や空文字の扱いにも注意が必要です。文字列を安全に比較する方法については、【VBA】演算子で文字列を比較する方法|一致判定・大小比較・注意点を実務で理解するで詳しく解説しています。
✅ VBAでIf条件を変数に入れて可読性を高めるポイント
If文の条件を変数へ入れるときは、次の点を意識すると実務で扱いやすいコードになります。
- 条件式の結果はBoolean型で受け取る
- 変数名からTrueの意味が分かるようにする
- 複数条件は個別に判定してからまとめる
- 条件判定とメイン処理を分ける
- 再利用する条件はFunctionへ切り出す
- 単純な条件まで無理に変数化しない
- 元データを変更したら判定結果も再計算する
- 条件を満たさない理由をログやメッセージへ活用する
条件を変数へ入れる目的は、コードを短くすることではありません。
比較式を業務上の意味へ置き換え、読み手が処理の意図を理解しやすくすることが目的です。
If文の条件を変数へ入れるには、TrueまたはFalseを管理するBoolean型への理解が欠かせません。Boolean型の基本や実務での注意点については、【VBA】Boolean型とは?True/Falseの使い方と実務での注意点を徹底解説で詳しく解説しています。
✅ VBAでIf文の条件を変数に入れる方法のまとめ
If文の条件は、Boolean型の変数へ代入できます。
例えば、次の比較式はTrueまたはFalseを返します。
hasCustomerName = Trim(customerName) <> ""
hasValidAmount = applicationAmount > 0
isApproved = approvalStatus = "承認済み"
個別の判定結果をまとめれば、最終的な条件を業務上の意味で表現できます。
canRegister = hasCustomerName _
And hasValidAmount _
And isApproved
そして、If文には判定の目的だけを残せます。
If canRegister Then
この書き方には、次のメリットがあります。
- If文の意図が伝わりやすい
- 複雑な条件式を分解できる
- どの条件がFalseなのか確認しやすい
- 条件変更に対応しやすい
- ログやエラーメッセージへ再利用できる
- 同じ判定をFunctionとして共通化できる
ただし、単純な条件まで無理に変数へ入れると、かえってコードが長くなる場合があります。
条件の数、業務上の意味、再利用性、デバッグの必要性を踏まえて、直接If文へ書くか、Boolean型の変数へ分けるかを判断することが大切です。
条件式をただ短くするのではなく、数か月後に別の人が読んでも判断理由が分かる形へ整理することで、保守しやすく壊れにくいVBAコードになります。