
VB6です。
For文の終了値が関数になっている場合、この関数の評価はFor文を実行する最初に1回しか行われない(関数は1度しか呼ばれない)ということがVBの規約か何かどこかで明記されているでしょうか。
例)
For i = 0 To Func(i)
(処理)
Next
Function Func(i as integer) as integer
Func = i + 1
End Function
という風に記述した場合、(処理)が2回実行されるてループを抜けることが確認できました。これはi=0のときに関数Funcを一回だけ実行しているということです。(デバッグモードでそれを確認)
これは、規定の動作なのかそれともたまたまなのでしょうか。
上記のFor文でもし毎回Funcが評価されると無限ループになってしまいます。
No.2ベストアンサー
- 回答日時:
興味深い話なので調べてみました。
ヘルプの「For...Next ステートメント」には、
「プログラムの実行がループに移り、ループ内の一連のステートメントがすべて実行されると、step の値が counter に加算されます。この時点で終了条件が満たされていない場合は、ループ内のステートメントが再び実行されます。」
とあります。
つまり、For文の終了値は、ループ前の1回目にだけ評価されて内部的にその値が保存され、2回目のループを始める際の終了条件の評価としてはその保存値が使われるのだと、深読みしてできないことはないと思います。
そのような解釈で納得されてはいかがでしょうか。
そもそも、終了条件がループの中で変わるような繰り返し処理にはDo...Loopステートメントを使うのが一般的であって、For...Nextステートメントを使うべきではないと思います。
もちろん、そのような事は承知の上での疑問だとは思いますし、僕も実際興味を持ちました。
頑張ってくださいヽ(^。^)ノ
No.1
- 回答日時:
式の評価は最初の一回だけですよ。
VBの文法書(F1キーを押したときに出るマニュアル)
にはそのような記述は見あたりませんが、昔からそうです。たまたまではありません。
昔は、マイクロソフトBasic の他に、
N-Basic , F-Basic 等があったのです。
今後もし、他のBasic (そんなものは今後もなさそう)
に移植(昔はよくあった)することを考えると、
上記の部分で誤動作するので、終了値を関数にするのは
やめた方がいいと言うくらいですね。
わかりにくいですし・・・ね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) For~Nextステートメントの終了条件について 1 2023/01/08 18:36
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
For文の終了値を関数にしても問...
-
数字以外を排除するには
-
入力した文字列から母音だけを...
-
C言語に関する質問
-
ループを途中で抜けたいのですが。
-
猫でもわかる、がわかりません。
-
プログラムで関数は使わない方...
-
Cプログラムが終了しない
-
ループが回らない
-
プログラムの解説をお願いします。
-
エクセルVBAで Do While (1)って?
-
strstr()関数の実装内容について。
-
Excel VBAで年度をまたぐ期間の...
-
C言語forループが完結した場合...
-
整定時間
-
UWSCにてある一定の動作を無限...
-
Enterキーを押されたら次の処理...
-
複数桁10進数の*桁目だけを抽出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
ループを途中で抜けたいのですが。
-
C言語forループが完結した場合...
-
break文でループを一気に抜ける...
-
C言語、whileループを抜け出す...
-
入力した文字列から母音だけを...
-
プログラムで関数は使わない方...
-
For文の終了値を関数にしても問...
-
Cプログラムが終了しない
-
if文の中にfor文なのか、for文...
-
他言語で言うcontinue文
-
文字列を後ろから1文字ずつ表示...
-
if文を使わずに奇数・偶数を判断
-
整定時間
-
for文while文の無限ループの違...
-
excel VBA if文について
-
n重のfor文にするには?
-
特定の文字列が出てくるまでの...
-
VBScriptでSQLに接続し、CSV出...
おすすめ情報