ここから本文です

VBA 実行時エラー9の回避方法が知りたいです。 以下のコードを書きました。

アバター

ID非公開さん

2019/4/2217:58:46

VBA 実行時エラー9の回避方法が知りたいです。

以下のコードを書きました。

'---日数取得
Dim NO As String
Dim DC As String '日数

If Cells(4 + i, 1) <> "" Then
For i = 0 To 30
NO = ActiveSheet.Cells(4 + i, 1).Value
x = Worksheets(NO).Range("G39").Value
Cells(4 + i, 4) = x
Next i
End If

セルA列のNOと同じ名前のシートにあるG39の値を
セルD4に表示するのを30回繰り返す、のつもりです。

で、セルAが空白になったら繰り返しを終わりにする
と書いているつもりなのですがうまくできていなくて、
実行時エラー9 インデックスが有効範囲にないとなり
デバックモードに突入してしまいます。

どこが足りていないのか教えていただけませんか?

閲覧数:
43
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

tok********さん

2019/4/2218:58:08

>セルAが空白になったら繰り返しを終わりにする

が主訴なので、

If Cells(4 + i, 1) = "" Then Exit For

がいいかも。
メンテナンスや動作テストの為に30回繰り返したくないって時に、止めたいセルを空白にしとけば済みます。
<>"" だと、空白行はスルーしてくれるけど次の行に処理が行っちゃいますね。

For i = 0 To 30
If Cells(4 + i, 1) = "" Then Exit For
NO = ActiveSheet.Cells(4 + i, 1).Value
x = Worksheets(NO).Range("G39").Value
Cells(4 + i, 4) = x
Next i

アバター

質問した人からのコメント

2019/4/23 14:46:24

<>"" だと、空白行はスルーしてくれるけど次の行に処理が行く

なるほど!そういうことなんですね。奥が深い・・・
勉強になりました。ありがとうございました!

ベストアンサー以外の回答

1〜1件/1件中

hmm********さん

2019/4/2218:31:18

>セルAが空白になったら繰り返しを終わりにする
Endプロパティを使用して最終行を取得するのが一般的だか
今のコードを変えるなら
If文をFor Next内に
For i = 0 To 30
If Cells(4 + i, 1) <> "" Then
NO = ActiveSheet.Cells(4 + i, 1).Value
x = Worksheets(NO).Range("G39").Value
Cells(4 + i, 4) = x
End If
Next i

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる