ここがデバッグで黄色になったのであれば、対象ファイルのなかにE列以降にまったくデータのないシートがあるということですね。
そういうシートもあるのなら、手当てをしておけばすみます。
で、当初のB:D列ではなく、本当はE:G列を検索するのですね?
そのように直しました。
Sub test02()
Dim wb(1) As Workbook '変数宣言
Dim ws(2) As Worksheet
Dim myFl As String, MyPt As String
Dim myTg
Dim i As Long
Dim myC As Range
Set wb(0) = ThisWorkbook
Set ws(0) = wb(0).Sheets("Sheet1")
Set ws(1) = Sheets.Add(after:=Sheets(wb(0).Sheets.Count)) 'シート追加
MyPt = wb(0).Path & "\" '自分のパスを取得
myFl = Dir(MyPt & "*.xls", vbNormal) 'パス内のエクセルファイル
Application.ScreenUpdating = False '画面更新停止
myTg = ws(0).Range("A1").Value '検索年月
Do While myFl <> "" 'エクセルBOOKがなくなるまで
If myFl <> wb(0).Name Then '自分以外のファイルを対象
Set wb(1) = Workbooks.Open(MyPt & myFl) '選択したBOOKを開く
For Each ws(2) In wb(1).Worksheets '開いたBOOKの各シート
With ws(2)
If .UsedRange.Cells(.UsedRange.Count).Column > 4 Then 'E列以降にデータがあれば
For Each myC In Intersect(.Range("E:G"), .UsedRange) 'E:G列
If myC.Value = myTg Then '検索年月があったら
i = i + 1 'カウント
myC.EntireRow.Copy ws(1).Rows(i) 'その行を追加したシートにコピペ
End If
Next myC
End If
End With
Next ws(2)
wb(1).Close (False) '選択したファイルを閉じる
End If
myFl = Dir() '次のファイルを検索
Loop '繰り返し
Application.ScreenUpdating = True '画面更新停止解除
End Sub
お礼が遅くなってしまい申し訳ありませんでした。
教えて頂いたVBAを本ファイルに適用してみたのですが、
実行すると「オブジェクトが必要です」と出てしまい、
For Each myC In Intersect(.Range("E:G"), .UsedRange) 'E:G列
この行が黄色くなってしまいます。
※本ファイルに適用するために列名を変えております。
マクロはかなり初心者で、色々と調べてみたのですが
どこを直せば解消されるのかがわかりませんでした。
原因等、思い当たることがありましたらお教え願えれば幸いです。
> 先日も同じような質問をさせて頂いたのですが、
その質問が今回の質問への回答上、参考にしたほうが良いのなら、その質問にリンクさせるなり、すくなくとも質問番号くらいは書いた方がいいです。
わたしはその質問を探せませんでしたので今回の質問にのみ対応しました。
> 別ファイルにて2010/10とセルに入力してやると、
これも曖昧です。
別ファイルとは、マクロを書いたBOOKという理解でよいですか?
わからないのでその前提でいきます。
その別ファイルのどこに2010/10が入力してあるのですか?
これもわからないのでSheet1のA1セルに入力されたものとします。
それから2010/10とセルに入力したら、文字列ではない限り2010/10/1とか、Oct-10とかの表示に化けるのではないですか?
日付として入力されたものが書式による表示で2010/10としてあるのですか?
> データだけ抽出して一覧にしてくれるようにしたい
どこに抽出するのですか?
不明な点ばかりですが、マクロを書いた別ファイルにあらたにシートを追加して、そこに抽出させるようにしてみました。
その30件くらいの検索対象のBOOKが入っているフォルダーに以下のマクロを書いたエクセルBOOK(転記先となる別ファイル)を保存してください。(パス取得のため、必ず「保存」が必要です。)
そのフォルダー内には検索対象のBOOKと、このマクロを書いたBOOKしかないものとします。
以下は標準モジュールに記述してください。
Sub test01()
Dim wb(1) As Workbook '変数宣言
Dim ws(2) As Worksheet
Dim myFl As String, MyPt As String
Dim myTg
Dim i As Long
Dim myC As Range
Set wb(0) = ThisWorkbook
Set ws(0) = wb(0).Sheets("Sheet1")
Set ws(1) = Sheets.Add(after:=Sheets(wb(0).Sheets.Count)) 'シート追加
MyPth = wb(0).Path & "\" '自分のパスを取得
myFl = Dir(MyPt & "*.xls", vbNormal) 'パス内のエクセルファイル
Application.ScreenUpdating = False '画面更新停止
myTg = ws(0).Range("A1").Value '検索年月
Do While myFl <> "" 'エクセルBOOKがなくなるまで
If myFl <> wb(0).Name Then '自分以外のファイルを対象
Set wb(1) = Workbooks.Open(MyPt & myFl) '選択したBOOKを開く
For Each ws(2) In wb(1).Worksheets '開いたBOOKの各シート
With ws(2)
For Each myC In Intersect(.Range("B:D"), .UsedRange) 'B:D列
If myC.Value = myTg Then '検索年月があったら
i = i + 1 'カウント
myC.EntireRow.Copy ws(1).Rows(i) 'その行を追加したシートにコピペ
End If
Next myC
End With
Next ws(2)
wb(1).Close (False) '選択したファイルを閉じる
End If
myFl = Dir() '次のファイルを検索
Loop '繰り返し
Application.ScreenUpdating = True '画面更新停止解除
End Sub
お礼
お礼が遅くなってしまい申し訳ありませんでした。 教えて頂いたVBAを本ファイルに適用してみたのですが、 実行すると「オブジェクトが必要です」と出てしまい、 For Each myC In Intersect(.Range("E:G"), .UsedRange) 'E:G列 この行が黄色くなってしまいます。 ※本ファイルに適用するために列名を変えております。 マクロはかなり初心者で、色々と調べてみたのですが どこを直せば解消されるのかがわかりませんでした。 原因等、思い当たることがありましたらお教え願えれば幸いです。