- ベストアンサー
エクセルVBAのオートフィルタについて
いつもお世話になります。 エクセル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 (一部省略しています)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コードが長すぎてあまりちゃんと読んでいませんが……。 変数 mydate はStringですよね? AutoFillterに渡す日付を文字列ではなく、日付データにすると上手くいきそうな気がします。 objList3.Range.AutoFilter Field:=7, Criteria1:=mydate ↓ objList3.Range.AutoFilter Field:=7, Criteria1:=DateValue(mydate)
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
No.2 です。 ちょっと勘違いしていました。先の回答は無視してください。
- kybo
- ベストアンサー率53% (349/647)
mydate = Format(mydate, fmt) の部分が間違っています。 この時点ではmydateには何も入力されていないはずです。 (一部省略部分なのでしょうか) fmt = .Range("A2").NumberFormatLocal mydate = Format(mydate, fmt) を mydate = Range("A2").Value としてみて下さい。
お礼
ありがとうございます。 mydateはinputboxから入力するんです。 省略してしまってました。 申し訳ありません。
お礼
ありがとうございます。 mydateはvariant型にしています。 date型でやってみます! 今日は時間がないので、明日にでも。
補足
date型にしたらうまくいきました。 ありがとうございました! でもずっとvariant型で問題なかったのに 何故でしょうか・・・・