- ベストアンサー
orをまとめることはできないか?
Dim 月 As Integer If 月 = 3 Or 月 = 6 Or 月 = 9 Or 月 = 12 Then End If の場合は上の様に記載すればいいのですが 「もしくは」の条件がたくさんある場合、 (月,"or",3,6,9,12) のようなことはできないのかな?と思いました。 今の条件は4つなので楽チンですが 条件が10個、20個となっても Or 月 = 数値 と書き続けるしかないのでしょうか? 連番ではなく、飛び飛びの数です。 ご教授よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
条件が多くなるとそこにパターンが生まれないでしょうか そのパターンを条件にしてしまえばそれほど多くの条件を 書かなくてすみます。 If 月 = 3 Or 月 = 6 Or 月 = 9 Or 月 = 12 Then は 月 MOD 3 =0 and 月<13 でもいけますよね
その他の回答 (5)
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにしてはどうでしょう。 Dim 月 As Integer If 月 / 3 = Int(月 / 3) Then ・・・・ End If
お礼
ありがとうございます。大変参考になりました。
- imogasi
- ベストアンサー率27% (4737/17069)
(1)配列に条件となる値を入れて、0からUBound(x)までのようその値と等しいか繰り回して聞く。ORなら見つかったところで繰り回し処理を脱出。質問のような書き方よりはましだろう。 (2)EXCELの場合は同一列の複数セルに条件値を入力し、そのセル範囲でFindメソッドで聞く。見つかれば条件をみたし、見つからなければ条件不成立。EXCELの予定する方法かもしれない。色々なデータはシートのセルに置くのが原則。 (3)(順次比較以外に)配列の値に関し、Find機能はVBAではないと思う。(だんだん言語によっては設けられていくと思う)。 自分のコードで検索すればよい。幸い、2分検索法(知ってますか)という、コード数も10行以下の、検索回数も少なくてすむアルゴリズムがある。自分で組めばよい。 (4)数式で表されるような(数列的な)ルール性があれば、それを条件で使う(プログラム化する)のが一番です。 (5)配列で1,3,9だけ該当の場合、 x=Array("","1","","2","","","","","","9","") という配列を作って y=2 if x(y)<>"" then '条件該当 Else '条件該当せず End IF といった方法もある。 (6)もっと条件が多ければ、ファイル(多分テキストファイルで済む)にデータを持ち、必要の都度、読み込んでそのデータと比較するなどになろう。
お礼
お詳しいですね。ありがとうございます。
- okormazd
- ベストアンサー率50% (1224/2412)
VBのようなので、プログラム言語の仕様です。 質問のの場合は 、 If 月 Mod 3=0 then でいいですが、If文を使う限り、 何らかの規則性でもなければ、一般的にはまとめて記述することはできません。
お礼
ありがとうございます。
- kmetu
- ベストアンサー率41% (562/1346)
あとこんなのも WorksheetFunction.Or(月 = 3 , 月 = 6 , 月 = 9 , 月 = 12)
お礼
関数も使えるのですね。ありがとうございます。
- watabe007
- ベストアンサー率62% (476/760)
規則性が無いのなら Select Case 月 Case 3, 6, 9, 12, 13,17 MsgBox "適合" Case Else MsgBox "不適合" End Select
お礼
Select Caseが使えるのですね。ありがとうございます。
お礼
パターンを探ってみます。ありがとうございます。