こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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初心者なので、どこがどう違うのかいまいちわかりません;
アドバイスお願いします。

投稿日時 - 2009-11-12 17:57:49

QNo.5442552

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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 _
とすべきでしょう。
(プログラムの中身(動作)は見ていません)

投稿日時 - 2009-11-13 08:21:36

ANo.1

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

投稿日時 - 2009-11-13 02:04:59

あなたにオススメの質問