gooドクター有料プランが1ヶ月間無料!

コードそのものは公開できませんが、下記のように変数を使って繰り返し処理をしています。しかし、なぜかkが10になっても繰り返しが終わらず、kが11になってエラーになってしまいます。どんな原因が考えられるでしょうか。よろしくお願いします。
dim i as long
dim n as long
dim k as long

n = 3
k = 10

for i = n To k
処理
next i

gooドクター

A 回答 (3件)

連投すみません。

投稿後気が付きました
>なぜかkが10になっても繰り返しが終わらず
この解釈は間違っていますよ。i が10になった繰り返し処理が終わります。
next i で i に+1されます。
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。確かにループを抜けてから11になっていました。これで解決です。

お礼日時:2021/02/16 18:19

こんにちは


想定できる原因は、すでに回答にありますが、変数 k の使い方に問題があるのではないでしょうか。(ループに問題があるのではない)
ご自身でkの値をモニターしてkに11が代入されるタイミングを確認するのはいかがでしょう。
方法はいくつかありますが、
ウォッチウィンドウを表示してkを設定すれば変化がわかります。
http://excelvba.pc-users.net/fol8/8_3.html

ちなみにループ内でkの値を変更しても変数 i が10に達するとforを抜けると思います。抜けた時(Next iの下)で変数 i は、11ですが。

変数の使用方法としては、改善が必要と思います。(例えが上手くないだけかも知れませんが)
わかり易く変数 k を流用しないとか、ロジックを見直すとかです。

n = 3
k = 10
変数の初期値を設定する目的であれば、kは定数にするべきと思います。
Const k = 10
更に付け加えると、変数にする意味が無いのではと思います。
変数を使用する場合は、
例:k=Cells(Rows.Count, 1).End(xlUp).Row などなど
範囲(回数)が確定していない時です。例は処理前のA列(値のある)最終行

処理によりループ範囲を変えたい場合は、
for nextでなく do loop を使用する事も考えてみてください。
例えば、条件を満たすまでループさせたいのなら、
Do While 条件式 や Do Until 条件式 で
条件式を満たすまで繰り返す処理
Loop
とする方法があります。(注意:条件式を満たさなければ無限ループ)

ループ内の処理がわかりませんが、カウント変数 i を使用した方が良いのでは?
    • good
    • 0

エラー内容も不明ですが。



処理中に
k = k + 1
とかして、仮に配列のインデックスの上限が10なのに11を呼び出そうとしてエラーを起こしている?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング