- ベストアンサー
Do ~ loop until [VBA]
Do 命令文 Loop Until 条件式 について質問なのですが、条件式には複数の条件を指定することは出来るのでしょうか? 例えば、変数mが100より大きく、変数nと同じでない、という2つの条件を指定したいときは Loop Until m >= 100 and m <> n もしくは Loop Until m >= 100 and <> n でしょうか? また、上記の様な条件式でOKだとしたら、andで結べる条件に制限数はありますか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
他の2二人のコメントと同じで、まず、自分で試しましょう。 話はそれからです。 >andで結べる条件に制限数はありますか プログラム言語で、そのような制約があるものを見た事がありません。通常、変数に格納できる、サイズ又はデーター型です。使用できる文字コードや、予約されている単語などもそうですね。 よくあるのが、1行にどのくらいの文字数を埋める事ができるのか、と言う質問を小学生とか、初心者に聞かれることはありますが、これは、コンパイラーとか、そのソースを読み込んで実行する、プログラムによります。 ただ、AND、ORで結ぶのは、4、5つぐらいまでが実用向きです。ANDなどの演算子は、IF文と同じで、一つ増えるごとに、一つ実行速度が遅くなるわけです。つまり、ANDやIF文でくくらないような、アルゴリズムを考えてみませんか。そうすると、簡潔な文書で、見てわかりやすく、後にみても、処理系が分かりやすくまとまります。 特に、AND、ORでくくると、必ず最初の頃、穴があります。それを埋めるために、さらにコードをつなげないといけなくなると言う悪循環がでます。 VBAでもサブルーチン又はクラス定義ができます(他の方も指摘していますね)。それらを使い条件を整えてから、ループにはいる、又は、ループからぬける等、やり方は多岐にわたります。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
条件判定の部分を関数ブロツクに独立して書く方法もあると思う。 判定項目が複数で合ったり、相互比較などあって、条件該当判定が複雑なら別に関数のルーチンで判定のコードを書きTRUEかFALSEを返し、それを使えば良いのでは。 その場合はAND条件やOR条件はIF分のネストの問題に摩り替えられると思う。 ーー 本件は質問者が実際にやってみれば良い。論より証拠。 適否を判別する、別の原理や物差しはあるはず無い。 参考 Sub test01() m = 11 n = 5 Do aa m, n MsgBox m & " " & n '実際は処理のコードを書く n = n + 1 Loop While aa(m, n) = True End Sub Function aa(m, n) If m > 10 Then If m > n Then aa = True Exit Function Else aa = False Exit Function End If Else aa = False End If End Function
お礼
ご回答ありがとうございました。勉強になります。
- ap_2
- ベストアンサー率64% (70/109)
いや、聞く前に自分で試そうよ。 "And"は論理積を取っているだけなので、"+"や"-"のよーな計算式だと考えればよいです。混乱しないよう、カッコで括るのがオススメ。 Loop Until ( (m >= 100) And (m <> n) ) 当然、代入式にも使えます。普通やんないケド。 test = m >= 100 And m <> n ということで、制限はほぼナイはず。ただ、可読性あげるために速度犠牲にする類のモノなので、乱用はダメ。
お礼
ご回答ありがとうございました。勉強になります。
お礼
ご回答ありがとうございました。勉強になります。