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も見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
-
4
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
Visual Basic(VBA)
-
5
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
6
リストと一致する値のセルを塗りつぶしたい。
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フラッシュ暗算
-
UWSCにてある一定の動作を無限...
-
do-while文が禁止される理由
-
C言語 数字を削除する関数
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
Excel VBAで年度をまたぐ期間の...
-
for文while文の無限ループの違...
-
C言語のプログラムみてください...
-
プログラミングC#初心者
-
猫でもわかる、がわかりません。
-
プログラムで関数は使わない方...
-
「指定されたキャストは有効で...
-
信頼区間の1.96や1.65ってどこ...
-
プログラムでの数字につく”f”の...
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
マイナスからプラスへ転じた時...
-
intとlongは同じ?
-
20'(角度)の計算がわかりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
入力した文字列から母音だけを...
-
do-while文が禁止される理由
-
break文でループを一気に抜ける...
-
Excel VBAで年度をまたぐ期間の...
-
エクセルVBAで Do While (1)って?
-
入力した数値を倍々するプログラム
-
For文の終了値を関数にしても問...
-
UWSCにてある一定の動作を無限...
-
C言語forループが完結した場合...
-
n重のfor文にするには?
-
for文while文の無限ループの違...
-
Delphiで・・・
-
Cプログラムが終了しない
-
strstr()関数の実装内容について。
-
PAD図の書き方
-
__asm int 3でのブレイクポイン...
-
PIC のプログラムについて ど...
-
放電現象の2分法C言語プログラ...
-
線形探索(番兵法)のプログラ...
おすすめ情報