プロが教える店舗&オフィスのセキュリティ対策術

エクセルで別ブックで作成してあるカレンダーから、稼働日を判断して指定した期間の日付をオートフィルターを使って抽出したいのですが、うまくいきません。

このようなコードを記述しましたが、別ブックでオートフィルターを使用する事はできるのでしょうか?

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を開放

A 回答 (2件)

あとね、ペーストが無いよ。


copyしただけじゃダメ。クリップボードへコピーした「内容」をどこかに「貼付」しないと。
Endwithの次行がソレだったんだろうけど。

再度、「マクロの記録」でコードを自動生成させたほうが良さそう。
    • good
    • 0

まず、option Explicitを書く習慣着ける。

maxdateは何でどこで宣言した?

book1は不要。自ブックは ThisWorkbook でOK
さらに使わないまま、Nothingに行きついてる。Endwithの次行のRange(”A1”)でしょ。
なぜコメントアウトしたの?

ScreenUpdating=Falseは最後で良い。F8キー押下のステップ実行でデバッグしてから
    • good
    • 0
この回答へのお礼

bin-chan様。
有難うございました!なんとかできました!

すみません。
このコーディングは、全体の一部だったので、宣言部分等は不完全でした。
時間がなかったので、とりあえずで中途半端なものを書いてしまい申し訳ありませんでした。

次に利用する際は、しっかりしたものを書くようにします。

お礼日時:2014/01/20 22:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A