ブックのループは出来るとして、それ以外についてのサンプル。
1つのブックをコピーします。
Sheet2はデータのない状態にしておいて下さい。
以下のコードを貼り付けます。
Sub test()
Dim ws As Worksheet
Dim r As Range
Dim v, i As Integer
v = Array("J3", "O3", "G3", "H3")
Set r = Worksheets("Sheet2").Range("A1")
For Each ws In Worksheets
If InStr(ws.Name, "予定") Then
With ws
For i = 0 To 3
r.Offset(, i).Value = .Range(v(i)).Value
Next
r.Offset(1).Resize(32, 17).Value = .Range("B14:R45").Value
Set r = r.End(xlDown).Offset(1)
End With
End If
Next
Set r = Nothing
End Sub
シート名に”予定”が含まれていると、そのシートのデータをSheet2に
代入していきます。
シートが変われば順次Sheet2に続けて代入します。
ご参考になれば。
ANo.4です。
>ですが、1つ目のファイルは問題なく終わるのですが、2つ目のファイルに行ってから
>r.Offset(, i).Value = .Range(v(i)).Valueで止まってしまいます。
ブックのループは一切考慮していませんので、エラーになりますね。
例えば、
Set r = Worksheets("Sheet2").Range("A1")
は
Set r = ThisWorkbook.Worksheets("Sheet2").Range("A1")
とかブックを指定しなければなりません。
また
For Each ws In Worksheets
でも、どのブックのワークシート群なのかを指定しなければなりません。
基本的にサンプルですので、あとはどのように変更してエラーになったのかは、
エラーの発生した文とエラー内容のみではわからない時もあります。
全体のコードの提示が必要かと。
(提示したサンプルそのままでエラーになった場合なら、回答者側でも
検証は出来ますけど)
質問者
お礼
たびたびご迷惑をおかけしております。
本当に助かります!ありがとうございます!
Set r = Nothingを消したらフォルダ内の検索はうまくいきました!
また、シート名の検索も
If Instr(ws.Name, "予定")Then
から
If ws.Name Like "*予定")Then
に変更し、問題ないと思います。
ただ、ひとつだけ問題があり、sheet予定2のシートだけが、B45~R45のデータが取れないのです。おそらくsheet予定2のB43~R43が空白だからカウントされないんだと思うのですが。もう少し調べてみます!
お礼
どうもありがとうございます! なんか動きました! ですが、1つ目のファイルは問題なく終わるのですが、2つ目のファイルに行ってから r.Offset(, i).Value = .Range(v(i)).Valueで止まってしまいます。 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 と、表示されてしまいます。 それと「シート予定*」の他に「シート予定*記入例」みたいなシートが隠れておりまして、そのシートまで拾われてしまいます。でもこれに関してはファイルの検索でも使っていたことだし、ワイルドカードでも使って対応してみようと思います。 丁寧に教えていただきありがとうございます。 助かります!