- ベストアンサー
EXCEL VBA のFor~Next文で質問です。
お世話になります。VBA初心者です。 環境はWIN2000,EXCEL2000です。 下記のようなマクロを組んだらNextに対するForがありませんと、エラーが出てしまいました。 申し訳ありませんが、手直しお願いします。 やりたいことは、D97へコピーが終わったら、次はM7からコピーをし、M97へのコピーが終わったらV7からコピーを始めたいのです。 With sheetGR For ii = 7 To 97 Step 10(行の指定) For iii = 4 To 31 Step 9(列の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If Exit For If Cells(97, iii) <> "" Then Next iii End If Next ii End With
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
For To Step Exit For Next で一組になります。 If文内でNextの設定はできません。 この場合は下記の様になるのではないですか? With sheetGR For ii = 7 To 97 Step 10(行の指定) For iii = 4 To 31 Step 9(列の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If If Cells(97, iii) = "" Then Exit For Next iii Next ii End With
その他の回答 (3)
コードを一通り拝見したのですが、どうも処理の意図が読めません。特に不可解なのが、1つめのIf文の後にある「Exit For」です。ここにExit Forを置いておくと、If文の結果に関係なく、「For iii = 4 To 31 Step 9」のループはiii=4で1回実行されただけで終わってしまいます(つまりFor文にしている意味がない) また、ご質問の「Nextに対するForがありません」というエラーは、2つ目のIf文の中に「Next」を容れていることが原因です。Forは必ずNextと対になっている必要がありますので、条件式次第では実行されないIf文の中にNextを置くことはできません。条件によってはForループから抜け出したいという場合には、先ほどの「Exit For」を使います。 手直しをご要望でしたら、どういった処理を行いたいのか、もう少し詳しく書いていただければ対応できると思います。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 >Nextに対するForがありませんと、エラーが出てしまいました。 まさに、エラーメッセージの通り、変数iiiのループのNextがないということです。 Next iii というコードを、 Next ii の手前に追加しましょう。
- wolv
- ベストアンサー率37% (376/1001)
よく検証していないのではずしていたらごめんなさい。 単に「空欄だったらコピーする」を繰り返すのなら 単純に繰り返すだけでいいはずです。 With sheetGR For ii = 7 To 97 Step 10(行の指定) For iii = 4 To 31 Step 9(列の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If Next iii Next ii End With こんな感じ。 (見やすくするために全角空白を使って字下げしているので、コピー&ペーストしただけではエラーが出るかもしれません。)
お礼
ありがとうございます。 「D97にコピーし終わったら次の列へ行きたい」という形にしたいので、「If Cells(97, iii) <> "" Then Next iii」という部分は外せないんです。 ごめんなさい、ありがとうございました。
お礼
ありがとうございます。 やってみましたが、どうしてもエラーが出ました。 「If Cells(97, iii) <> "" Then Next iii」という部分が間違っているようです。 ありがとうございました。