
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- 計算機科学 Excel ある行と列が交わったところにマークを付けるには 7 2023/01/24 08:46
- 婚活 36歳独身です。 なかなか婚活してもいい相手に巡り会えず、 結婚できないフラグが立ってきています。 9 2023/07/30 21:37
- 中途・キャリア 中途採用の面接にて1時間の枠が30分で終わりました。不合格フラグかと思ったのですが、逆質問で配属後の 3 2023/05/12 18:40
- 新卒・第二新卒 面接で、「結果はマイナビのメールからお伝えします」と言われました。 これって面接落ちフラグでしょうか 3 2023/03/08 14:40
- 中途・キャリア バイトしてる人教えて!面接後にて連絡はいつくらいにきた?! 1 2022/05/03 13:38
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
- その他(メールソフト・メールサービス) Eメールに、その他ってのがあってタップすると【フラグ】って出て来るのですが、これはなんでしょうか? 1 2022/05/11 11:03
- Ruby 初心者プログラミング 3 2022/10/12 11:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
CSVファイルの特定の行だけを読...
-
vb.netです。2次元配列の要素を...
-
VBAでの一時停止と再開の方法
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
流れ図(フローチャート)が分か...
-
範囲指定したセルを1つずつ飛...
-
GIFアニメをループさせたくない
-
なぜⅰなのか?
-
VBA for i=1 to lastrow
-
ボタンが押された時にループか...
-
VBAでln関数の計算
-
DOSコマンドのループ内のTIMEコ...
-
乱数の桁数指定、または範囲指定。
-
データベースをEOFまでループさ...
-
スプレッドシート GASの繰り返...
-
vbscriptでIE自動入力(途中で...
-
CASL2のアセンブリ(?)で質問...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
vb.netです。2次元配列の要素を...
-
VBAで3秒だけ時間を止めたい
-
エクセルの当番表を作っていま...
-
UWSCに制限時間を付けたいです
-
DOSコマンドのループ内のTIMEコ...
-
VBAでの一時停止と再開の方法
-
CSVファイルの特定の行だけを読...
-
DoEventsが必要な理由について
-
GIFアニメをループさせたくない
-
VBA for i=1 to lastrow
-
Do whileでExitせず、ループの...
-
VBA Boxが空白の場合のメッセー...
-
vb.netからエクセル関数書き込み
-
イベントの発生を待つ
-
乱数の桁数指定、または範囲指定。
-
エクセル関数で1〜12の数字がル...
おすすめ情報