• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

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)

noname#148473
noname#148473
回答No.4

コードを一通り拝見したのですが、どうも処理の意図が読めません。特に不可解なのが、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)
回答No.2

こんにちは。maruru01です。 >Nextに対するForがありませんと、エラーが出てしまいました。 まさに、エラーメッセージの通り、変数iiiのループのNextがないということです。 Next iii というコードを、 Next ii の手前に追加しましょう。

nanami0310
質問者

お礼

ありがとうございます。 やってみましたが、どうしてもエラーが出ました。 「If Cells(97, iii) <> "" Then Next iii」という部分が間違っているようです。 ありがとうございました。

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

よく検証していないのではずしていたらごめんなさい。 単に「空欄だったらコピーする」を繰り返すのなら 単純に繰り返すだけでいいはずです。 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 こんな感じ。 (見やすくするために全角空白を使って字下げしているので、コピー&ペーストしただけではエラーが出るかもしれません。)

nanami0310
質問者

お礼

ありがとうございます。 「D97にコピーし終わったら次の列へ行きたい」という形にしたいので、「If Cells(97, iii) <> "" Then Next iii」という部分は外せないんです。 ごめんなさい、ありがとうございました。