
No.4ベストアンサー
- 回答日時:
まず、「フラグを立てろと」ということですが、
意味は、条件に対する結果だとおもってください。
すると「何の為に」が条件
Loop構文だと
ループ(繰り返し)を終わる条件を 満たよ/満たしていないよ(フラグ)
ということになります。
※注 Do Loop の場合は繰り返す条件または、繰り返しを終わる条件を指定できます。
例題で考えます。
「例題1」
最初に入力した文字と同じ文字を入力するまで、何度でも再入力を要求するプログラムを作る。
「考え方」
最初に入力した文字と同じ場合にループを終わる。
ループ(繰り返し)を終わる条件 = 最初に入力した文字と同じ場合
満たよ/満たしていないよ(フラグ)= 最初に入力した文字と同じ場合
になる。
解答Aと解答Bを用意しました。解答Bの方が質問の解答に、あってますが
例題の解答としては、Aの方がシンプルです。解答Bの場合に、なる場合は
大抵終わる条件が複数ある場合です。
「解答A」
Private Sub Form_Load()
Dim sStr As String
Dim sLoopStr As String
Dim lCnt As String
sStr = InputBox("文字をいれてください。")
Do Until sStr = sLoopStr
sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目")
Loop
End
End Sub
「解答B」
Private Sub Form_Load()
Dim sStr As String '最初
Dim sLoopStr As String '2回目以降
Dim lCnt As String '回数
Dim bFlg As Boolean 'フラグ
sStr = InputBox("文字をいれてください。")
bFlg = False
lCnt = 1
Do Until bFlg = True
sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目")
If sStr = sLoopStr Then
bFlg = True 'フラグを立てる
End If
lCnt = lCnt + 1
Loop
End
End Sub
そこで、条件を複数にします。
「例題2」
例題1に回数制限をつけます。5回間違えたら入力した文字にかかわらず終了します。
解答は、以下のようにします。
Private Sub Form_Load()
Dim sStr As String '最初
Dim sLoopStr As String '2回目以降
Dim lCnt As String '回数
Dim bFlg As Boolean 'フラグ
sStr = InputBox("文字をいれてください。")
bFlg = False
lCnt = 1
Do Until bFlg = True
sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目")
If sStr = sLoopStr Then
bFlg = True 'フラグを立てる
End If
If lCnt = 5 then
bFlg = True 'フラグを立てる
End If
lCnt = lCnt + 1
Loop
End
End Sub
No.5
- 回答日時:
>フラグを立てる意味は見難いか、否かだけなんですかね????
そうですね。基本的にはプログラムを見やすくするためのテクニックだと思ってください。
自分だけでなく第三者にとっても見易い、分かり易いプログラムが書けるってのはプログラマにとって重要な資質の一つです。
if 式A OR 式B OR 式C OR 式D OR 式E THEN 処理1
って書くよりも、
Flag = False
if 式A THEN Flag =True
if 式B THEN Flag =True
if 式C THEN Flag =True
if 式D THEN Flag =True
if 式E THEN Flag =True
If Flag = True Then 処理1
って書くほうが見やすいですよね.
要は、フラグを使うことによってプログラムが見やすくなるんであれば、フラグを使ったほうが絶対にいいってことです。
No.3
- 回答日時:
こんな感じ
dim Flag as boolean
'幾つかの条件にヒットしたとき、ループを抜ける
Flag=false
do
ループ内の処理を行う
if … then Flag = True'脱出条件の判定
if … then Flag = True
Loop until Flag=True
ってな感じですね。
If … then Exit Do
ってやってしまってもいいんですが、プログラムが見難くなります。
No.2
- 回答日時:
フラグ(Flag)というのはもともと「旗」という意味です。
旗で、今どういう状態にあるかを表しておくわけです。
例えば「降水確率80%」という旗が掲揚されていれば、出かける人はそれを見て傘を持ちます。
旗を立てたり、下ろしたりする仕事と、旗を見て行動を変えるという事柄が別々のタイミングで起こるわけですね。
フラグを立てたり見たりするのはループの中が多いですが、必ずしもそれだけではありません。複数のプログラムの間でフラグを共有することも多いです。(似たものでセマフォ:腕木式信号機:というのもあります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
VBAで3秒だけ時間を止めたい
-
乱数の桁数指定、または範囲指定。
-
エクセルの当番表を作っていま...
-
アセンブラによるウェイト(WAIT...
-
フラグについて
-
VBA横データを縦にしたいです
-
GIFアニメをループさせたくない
-
アクティブセルから、A列最終行...
-
Do whileでExitせず、ループの...
-
CSVファイルの特定の行だけを読...
-
流れ図(フローチャート)が分か...
-
DoEventsが必要な理由について
-
エクセル関数で1〜12の数字がル...
-
VisualStudioにてモザイクの画...
-
WinAPI「MsgWaitForMultipleObj...
-
vb.netです。2次元配列の要素を...
-
ループの後判断どんな時使うの
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
UWSCに制限時間を付けたいです
-
Escキーを押すと、中断する時と...
-
乱数の桁数指定、または範囲指定。
-
VBA for i=1 to lastrow
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
pythonでファイルのコメント行...
-
素数表について。
-
VBAでの一時停止と再開の方法
-
「偶数・奇数の和」のフローチ...
-
DoEventsが必要な理由について
-
vb.netです。2次元配列の要素を...
-
Do whileでExitせず、ループの...
-
ループフリー
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
おすすめ情報