
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も見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
do-while文が禁止される理由
-
n重のfor文にするには?
-
エクセルVBAで Do While (1)って?
-
Excel VBAで年度をまたぐ期間の...
-
C++ DirectX カーソルの移動処...
-
break文でループを一気に抜ける...
-
for文while文の無限ループの違...
-
入力した数値を倍々するプログラム
-
C言語 for文を使った一例について
-
C言語のプログラムみてください...
-
猫でもわかる、がわかりません。
-
H8/3048マイコンAD/DA変換について
-
C言語forループが完結した場合...
-
if文の中にfor文なのか、for文...
-
C言語 数字を削除する関数
-
C++のvolatileについて
-
Cプログラムが終了しない
-
C言語の関数の戻り値がおかしい?
-
Aの値からBの値を除するとは??
-
エクセルで可視セルにのみ値貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
Excel VBAで年度をまたぐ期間の...
-
C言語forループが完結した場合...
-
For文の終了値を関数にしても問...
-
プログラムで関数は使わない方...
-
Cプログラムが終了しない
-
for文while文の無限ループの違...
-
入力した数値を倍々するプログラム
-
if文を使わずに奇数・偶数を判断
-
UWSCにてある一定の動作を無限...
-
入力した文字列から母音だけを...
-
エクセルでC言語のfor文と同じ...
-
猫でもわかる、がわかりません。
-
PIC のプログラムについて ど...
-
C言語、whileループを抜け出す...
-
VBScriptでSQLに接続し、CSV出...
-
エクセルVBAで Do While (1)って?
-
ループの特定入力終了
おすすめ情報