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

いつもお世話になります。
エクセル2007でVBAでオートフィルタを操作したいのですが、
一部うまくいきません。

以下の様なコードを書いて
日付で絞り込みたいのですが、
何も抽出されません。

リストを見てみると、変数はちゃんと入っており
OK ボタンを押すとその日付で抽出されます。

何故VBAでの操作では抽出されないのでしょうか。
ご存じの方がおられましたら、よろしくお願いします。

Sub test()

Dim mydate As Variant
Dim rng3 As Range
Dim fmt As Variant
Dim objList3 As ListObject
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim wb4 As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim sh7 As Worksheet

'-----------------------------------------------------------------------
Set wb1 = Workbooks("301.xlsm")
Set wb2 = Workbooks("1.xls")
Set wb4 = Workbooks("2.xls")

Set sh1 = wb1.Worksheets("@")
Set sh2 = wb1.Worksheets("@@")
Set sh3 = wb2.Worksheets("@@@")
Set sh4 = wb2.Worksheets("@@@@")
Set sh7 = wb4.Worksheets("@@@@@")
'----------------------------------------------------------

sh2.Range("A1:z63").ClearContents

With sh7
Set objList3 = .ListObjects("リスト1")
fmt = .Range("A2").NumberFormatLocal
mydate = Format(mydate, fmt)

objList3.Range.AutoFilter Field:=7, Criteria1:=mydate
objList3.Range.AutoFilter Field:=5, Criteria1:="test"
Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible)
rng3.Copy sh2.Range("A2")
objList3.Range.AutoFilter Field:=5


objList3.Range.AutoFilter Field:=5, Criteria1:=">=190"
Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible)
rng3.Copy sh2.Range("A20")

objList3.Range.AutoFilter Field:=5
objList3.Range.AutoFilter Field:=7

End With

Application.CutCopyMode = False

Set rng3 = Nothing
Set fmt = Nothing
Set objList3 = Nothing
Set wb1 = Nothing
Set wb2 = Nothing
Set wb4 = Nothing

Set sh1 = Nothing
Set sh2 = Nothing
Set sh3 = Nothing
Set sh4 = Nothing
Set sh7 = Nothing

End Sub

(一部省略しています)

A 回答 (3件)

mydate = Format(mydate, fmt)



の部分が間違っています。

この時点ではmydateには何も入力されていないはずです。
(一部省略部分なのでしょうか)


fmt = .Range("A2").NumberFormatLocal
mydate = Format(mydate, fmt)


mydate = Range("A2").Value

としてみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
mydateはinputboxから入力するんです。
省略してしまってました。
申し訳ありません。

お礼日時:2010/01/08 16:59

コードが長すぎてあまりちゃんと読んでいませんが……。



変数 mydate はStringですよね?
AutoFillterに渡す日付を文字列ではなく、日付データにすると上手くいきそうな気がします。

objList3.Range.AutoFilter Field:=7, Criteria1:=mydate

objList3.Range.AutoFilter Field:=7, Criteria1:=DateValue(mydate)

この回答への補足

date型にしたらうまくいきました。
ありがとうございました!

でもずっとvariant型で問題なかったのに
何故でしょうか・・・・

補足日時:2010/01/13 08:39
    • good
    • 0
この回答へのお礼

ありがとうございます。
mydateはvariant型にしています。
date型でやってみます!
今日は時間がないので、明日にでも。

お礼日時:2010/01/08 17:03

No.2 です。


ちょっと勘違いしていました。先の回答は無視してください。
    • good
    • 0

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