空腹おやじのログと備忘録

VBA(主にExcel)でいろいろな実験的な事とか、Linuxのコマンドとか設定とかについて忘れないように、あれこれと・・・

ExcelのAutoFilterの抽出条件には、配列が指定できる・・・でも、ちょっと注意しないといけない事もある

AutoFilterの抽出条件に配列が使用できるとの事で、試してみた際にハマったので・・・

こんなデータを用意。
f:id:Z1000S:20190412214313j:plain

まずは、1件抽出するコード。こんな感じ?

Public Sub doAutoFilter()

    Dim r   As Range

    Set r = ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion

    r.AutoFilter Field:=1, Criteria1:=3

End Sub

実行してみる。
f:id:Z1000S:20190412214335j:plain
3が抽出されている。問題ない。

では、3件抽出してみる。

Public Sub doAutoFilter2()

    Dim r   As Range

    Set r = ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion

    r.AutoFilter Field:=1, Criteria1:=Array(2, 4, 6), Operator:=xlFilterValues

End Sub

実行。
f:id:Z1000S:20190412214400j:plain
?1件も抽出されない。

「マクロの記録」で同じことをやってみる。
f:id:Z1000S:20190412214422j:plain

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("A1:A21").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$A$21").AutoFilter Field:=1, Criteria1:=Array("2", _
        "4", "6"), Operator:=xlFilterValues
End Sub

???抽出するデータが数値なのに、Arrayの中身が文字列になっている!!!

じゃあ、こう?

Public Sub doAutoFilter2()

    Dim r   As Range

    Set r = ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion

'    r.AutoFilter Field:=1, Criteria1:=Array(2, 4, 6), Operator:=xlFilterValues
    r.AutoFilter Field:=1, Criteria1:=Array("2", "4", "6"), Operator:=xlFilterValues

End Sub

f:id:Z1000S:20190412214457j:plain
大丈夫そう。

セルのデータの型に関係なく、Arrayの中身は、文字列でないと駄目らしい・・・

ということは、セルの書式が変わると抽出されないのでは?
セルの表示を小数第1位まで表示させたら・・・
f:id:Z1000S:20190412214514j:plain
f:id:Z1000S:20190412214400j:plain
やっぱり抽出されません。 orz
勘弁して下さい・・・





やっぱり日付でも・・・