- ベストアンサー
VBAでorを使用して合致条件を判別する方法
- VBAでif文を使用して条件判定を行う際に、iの値が1, 2, 3のいずれかに合致しているかどうかを判定する方法について教えてください。
- 現在はif文を使用して個別に条件を判定していますが、iの値が1, 2, 3のいずれかに合致している場合に処理を行う方法を教えてください。
- VBAでiの値が1, 2, 3のいずれかに合致している場合に処理を一括で行う方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 こんな感じのことでしょうか? Sub Re8336327() Dim nMatchIdx As Long Dim i As Long For i = 0 To 4 Select Case i Case 1, 2, 3 ' ' 共通の処理、処理(1) ' ' ★★ここの時点でiの値がどの条件にマッチしているかを取りたい nMatchIdx = Application.Match(i, Array(1, 2, 3), 0) Debug.Print "i = "; i, "条件("; nMatchIdx; ")にマッチ" ' ←確認用の仮コード End Select Select Case nMatchIdx Case 1 ' ' 条件( 1 )の場合の個別処理 Case 2 ' ' 条件( 2 )の場合の個別処理 Case 3 ' ' 条件( 3 )の場合の個別処理 Case Else ' ' 条件( 1 )~条件( 3 )にマッチしない場合のの個別処理(必要なら) ' ' 条件( 1 )~条件( 3 )にマッチしない場合のの個別処理(必要なら) End Select Next i End Sub ベタに書くと以下のようになりますが、 繰り返し同じ処理を書くのに抵抗があると、、、。 Sub Re8336327a() Dim i As Long For i = 0 To 4 Select Case i Case 1 ' ' 共通の処理、処理(1) ' ' 条件( 1 )の場合の個別処理 Case 2 ' ' 共通の処理、処理(1) ' ' 条件( 2 )の場合の個別処理 Case 3 ' ' 共通の処理、処理(1) ' ' 条件( 3 )の場合の個別処理 Case Else ' ' 条件( 1 )~条件( 3 )にマッチしない場合のの個別処理 End Select Next i End Sub ただ、if i=1 or i=2 or i=3 then 条件に合致する場合の 共通の処理であるとところの"処理(1)"そのものを サブルーチンとして別のプロシージャにかいてしまえば、 Sub Re8336327a() Dim i As Long For i = 0 To 4 Select Case i Case 1 ' ' 共通の処理 ProcSub ' ' 条件( 1 )の場合の個別処理 Case 2 ' ' 共通の処理 ProcSub ' ' 条件( 2 )の場合の個別処理 Case 3 ' ' 共通の処理 ProcSub ' ' 条件( 3 )の場合の個別処理 Case Else ' ' 条件( 1 )~条件( 3 )にマッチしない場合のの個別処理 End Select Next i End Sub Sub ProcSub() ' ' 処理(1) End Sub これでも案外スッキリ書けますけれど。 後は、状況やお好み次第ですけれど。
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Q、iは、1,2,3のどれで合致しているか判別する方法はありますか? A、i の値で判別します。
お礼
ほんと、ばかですね。
- web2525
- ベストアンサー率42% (1219/2850)
If文をネストしなくとも Select Case http://officetanaka.net/excel/vba/statement/SelectCase.htm こんな形でも処理はできる
お礼
やっぱり、どうがんばっても冗長な記載になりますよね。。。 ありがとうございました!!