- 締切済み
エクセルマクロで、他ブックからオートフィルタ抽出
エクセルで別ブックで作成してあるカレンダーから、稼働日を判断して指定した期間の日付をオートフィルターを使って抽出したいのですが、うまくいきません。 このようなコードを記述しましたが、別ブックでオートフィルターを使用する事はできるのでしょうか? Dim book1 As Workbook '変数book1をワークブック型で宣言 Dim book2 As Workbook '変数book2をワークブック型で宣言 Dim today As Date Set book1 = Application.ActiveWorkbook 'アクティブになっているブックをbook1へセット Application.ScreenUpdating = False '画面の更新を止める '↓アドレスのブックを開く事までbook2にセット(ReadOnly:=Trueで読み込み専用) Set book2 = Application.Workbooks.Open("\\sv\C1\\稼働日カレンダー.xls", ReadOnly:=True) today = Date maxdate = cdate("2014/3/3") ' book2.Worksheets("DATA").Cells.Copy Destination:=book1.Worksheets("Sheet1").Range("A1") '----オートフィルタでデータを抽出 With book2.Worksheets("Sheet1").Range("A1").CurrentRegion .AutoFilter .AutoFilter Field:=1, Criteria1:=">=" & today, Operator:=xlAnd, Criteria2:="<=" & maxdate ' .AutoFilter Field:=2, Criteria1:="=" & 1 '----抽出データをコピー&貼り付け .Copy ActiveSheet.Range("A" & maxrow) .AutoFilter End With ' Range("A1").Select Application.ScreenUpdating = True Set book1 = Nothing '変数book1を開放 book2.Close SaveChanges:=False 'book2を閉じる(SaveChanges:=Falseで保存せずに終了) Application.ScreenUpdating = True '画面の更新を再開する Set book2 = Nothing '変数book2を開放
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
あとね、ペーストが無いよ。 copyしただけじゃダメ。クリップボードへコピーした「内容」をどこかに「貼付」しないと。 Endwithの次行がソレだったんだろうけど。 再度、「マクロの記録」でコードを自動生成させたほうが良さそう。
- bin-chan
- ベストアンサー率33% (1403/4213)
まず、option Explicitを書く習慣着ける。maxdateは何でどこで宣言した? book1は不要。自ブックは ThisWorkbook でOK さらに使わないまま、Nothingに行きついてる。Endwithの次行のRange(”A1”)でしょ。 なぜコメントアウトしたの? ScreenUpdating=Falseは最後で良い。F8キー押下のステップ実行でデバッグしてから
お礼
bin-chan様。 有難うございました!なんとかできました! すみません。 このコーディングは、全体の一部だったので、宣言部分等は不完全でした。 時間がなかったので、とりあえずで中途半端なものを書いてしまい申し訳ありませんでした。 次に利用する際は、しっかりしたものを書くようにします。