アプリ版:「スタンプのみでお礼する」機能のリリースについて

Do
命令文
Loop Until 条件式
について質問なのですが、条件式には複数の条件を指定することは出来るのでしょうか?

例えば、変数mが100より大きく、変数nと同じでない、という2つの条件を指定したいときは
Loop Until m >= 100 and m <> n
もしくは
Loop Until m >= 100 and <> n
でしょうか?

また、上記の様な条件式でOKだとしたら、andで結べる条件に制限数はありますか?


よろしくお願いします。

A 回答 (3件)

他の2二人のコメントと同じで、まず、自分で試しましょう。



話はそれからです。

>andで結べる条件に制限数はありますか

プログラム言語で、そのような制約があるものを見た事がありません。通常、変数に格納できる、サイズ又はデーター型です。使用できる文字コードや、予約されている単語などもそうですね。

よくあるのが、1行にどのくらいの文字数を埋める事ができるのか、と言う質問を小学生とか、初心者に聞かれることはありますが、これは、コンパイラーとか、そのソースを読み込んで実行する、プログラムによります。

ただ、AND、ORで結ぶのは、4、5つぐらいまでが実用向きです。ANDなどの演算子は、IF文と同じで、一つ増えるごとに、一つ実行速度が遅くなるわけです。つまり、ANDやIF文でくくらないような、アルゴリズムを考えてみませんか。そうすると、簡潔な文書で、見てわかりやすく、後にみても、処理系が分かりやすくまとまります。

特に、AND、ORでくくると、必ず最初の頃、穴があります。それを埋めるために、さらにコードをつなげないといけなくなると言う悪循環がでます。

VBAでもサブルーチン又はクラス定義ができます(他の方も指摘していますね)。それらを使い条件を整えてから、ループにはいる、又は、ループからぬける等、やり方は多岐にわたります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。勉強になります。

お礼日時:2011/11/16 21:09

条件判定の部分を関数ブロツクに独立して書く方法もあると思う。


判定項目が複数で合ったり、相互比較などあって、条件該当判定が複雑なら別に関数のルーチンで判定のコードを書き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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。勉強になります。

お礼日時:2011/11/16 21:09

いや、聞く前に自分で試そうよ。




"And"は論理積を取っているだけなので、"+"や"-"のよーな計算式だと考えればよいです。混乱しないよう、カッコで括るのがオススメ。
 Loop Until ( (m >= 100) And (m <> n) )
当然、代入式にも使えます。普通やんないケド。
 test = m >= 100 And m <> n

ということで、制限はほぼナイはず。ただ、可読性あげるために速度犠牲にする類のモノなので、乱用はダメ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。勉強になります。

お礼日時:2011/11/16 21:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!