• 締切済み

VBAの繰りかえし処理について

workbook1(以下wb1)のB3に入力した県名を含む行を、 workbook2から取り出し、wb1のB7以降に表示させたいと思っています (ちなみに県名はwb2のC列に入っています) 同じ県名が含まれる行が多いので、それらを繰り返し処理で 全て書き出したいと思い、以下のマクロを作りました。 Sub macro3() Dim c Dim wb1 As Workbook Dim wb2 As Workbook Dim k As Integer Dim firstAddress As String Application.ScreenUpdating = False Set wb1 = ActiveWorkbook Set wb2 = Workbooks.Open("G:\zyouhousyori\inn100best_full.csv") Set c = cell.Find(What:=Range("B3").Value) With wb2.Worksheets(1).Range("A1:A100") If Not c Is Nothing Then firstAddress = c.Address Do Set c = cell.FindNext(c) For k = 0 To 10 .Range("C100").End(xlUp).Offset(1).Copy _ wb1.Worksheets("sheet1").Cells(7 + k, 2) Exit For ★Loop While Not c Is Nothing And _ c.Address <> firstAddress End If End With Application.ScreenUpdating = True wb2.Close False End Sub しかし、実行すると★マークのついた所でエラーになってしまいます (対応するDoがありません、と出ます) VBA初心者なので、どこがどう違うのかいまいちわかりません; アドバイスお願いします。

みんなの回答

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

こういう問題はインデントを見ればわかります With wb2.Worksheets(1).Range("A1:A100")  If Not c Is Nothing Then   firstAddress = c.Address   Do    Set c = cell.FindNext(c)    For k = 0 To 10     .Range("C100").End(xlUp).Offset(1).Copy _     wb1.Worksheets("sheet1").Cells(7 + k, 2)     Exit For    Loop While Not c Is Nothing And _ このLoopと同じ高さにDoがあるはずですが、実際には1段低いところにあります。 Exit ForはForを閉じる文ではなく、Forから抜け出す文です ※修正案1   Do    Set c = cell.FindNext(c)    For k = 0 To 10     .Range("C100").End(xlUp).Offset(1).Copy _     wb1.Worksheets("sheet1").Cells(7 + k, 2)     Exit For    Next k   Loop While Not c Is Nothing And _ ただし、これだとForループを回らずに、1回通っただけで抜けてしまいます なので、 ※修正案2   Do    Set c = cell.FindNext(c)    For k = 0 To 10     .Range("C100").End(xlUp).Offset(1).Copy _     wb1.Worksheets("sheet1").Cells(7 + k, 2)    Next k   Loop While Not c Is Nothing And _ とすべきでしょう。 (プログラムの中身(動作)は見ていません)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

★の行の4行上にForがありますが、それに対応するNextがないのが原因です。

関連するQ&A