13

Excel の VBA でオートフィルターを使用していますが、これは通常のフィルターでは機能しますが、日付として書式設定された列では機能しません。

手動でフィルタリングできます。コードを実行すると何もフィルタリングされませんが、フィルターをチェックして [OK] をクリックすると (フィルター条件に変更が適用されません)、正しくフィルター処理されます。

これが私のコードです:

ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _
        :=">" & CDate([datecell]), Operator:=xlAnd, Criteria2:= _
        "<=" & CDate(WorksheetFunction.EoMonth([datecell], 3))

これは一般的な問題のようですが、解決策は見つかりませんでした。

記録したマクロを実行しても動作しません。

4

10 に答える 10

21

日付は、Excel VBA AutoFilter では扱いにくい場合があります。配列をループしてフィルタリングする方が簡単な場合もあります。

特に「日付間の日付」を扱う場合は、日付の数値を使用できることが時々あります。

Criteria1:= ">" & CDbl([datecell])
Criteria2:= "<=" & CDbl(WorksheetFunction.EoMonth([datecell], 3))

上記は「実際の日付」である必要があり、日付のように見える文字列ではないことに注意してください。単一の「文字列日付」でさえ、物事を台無しにします。

于 2013-11-04T12:43:09.360 に答える
13

Autofilter()「ユニバーサル」フォーマットyyyy-mm-ddで動作します。つまり:

Criteria1:= ">" & Format([MY_DATE],"yyyy-mm-dd")
Criteria2:= "<=" & Format([MY_DATE],"yyyy-mm-dd")

Excelは間違って「理解」できないので、それは良いことです. 02/jan を 01/feb として使用するmm/dd/yyyyか、 Excelを使用する場合。dd/mm/yyyy

参照: http://www.oaltd.co.uk/ExcelProgRef/Ch22/ProgRefCh22.htm

Excel の使用規則 (国際問題)

  1. Excel に渡すために数値と日付を文字列に変換する必要がある場合 (AutoFilter や .Formula 文字列の条件など)、Trim(Str(MyNumber)) または前に示した sNumToUS() 関数を、すべての数値と日付型に使用します。Excel はそれを正しく使用し、ローカルの数値/日付形式に変換します。

編集:

Application.International次のようなものを使用してユニバーサル関数を作成できます。

Sub MySub()
    Select Case application.International(xlDateOrder)
        Case Is = 0
            dtFormat = "mm/dd/yyyy"
        Case Is = 1
            dtFormat = "dd/mm/yyyy"
        Case Is = 2
            dtFormat = "yyyy/mm/dd"
        Case Else
            dtFormat = "Error"
    End Select

    Debug.Print (dtFormat)

    ...
    Criteria1:= ">" & Format([MY_DATE],dtFormat)
    Criteria2:= "<=" & Format([MY_DATE],dtFormat)
    ...

End Sub
于 2015-08-06T21:13:41.943 に答える
5

次のように、フォーマットをアメリカのフォーマットに変換する必要があります。

">" & Format([datecell], "mm/dd/yyyy")

VBA は別の形式を認識しません。

于 2014-05-22T15:12:31.407 に答える
1

Karlos Henrique さん、Format([datecell], "mm/dd/yyyy") を提案していただきありがとうございます。それは私のファイルで動作します。私の以前のコードは次のとおりです。

Range("A1:D" & Trim(Str(LstRec))).AutoFilter Field:=2, _
  Criteria1:=">=" & StrtDt, _
  Operator:=xlAnd, _
  Criteria2:="<=" & EndDt

私の変更されたコードは次のとおりです。

Range("A1:D" & Trim(Str(LstRec))).AutoFilter Field:=2, _
  Criteria1:=">=" & Format(StrtDt, "mm/dd/yyyy"), _
  Operator:=xlAnd, _
  Criteria2:="<=" & Format(EndDt, "mm/dd/yyyy")

ありがとう。

于 2014-06-14T05:59:46.663 に答える
1

この構文は私にとってはうまくいきます:

.AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(2, Format(Now, "yyyy-mm-dd"))

マクロ登録で得られるヒント

于 2016-04-29T14:35:15.317 に答える
-1

これが occam のカミソリ解決策です...これをスプレッドシートの Autoopen に入れてみてください。または、必要に応じて、影響を与えたいシートに合わせて変更してください。これにより、日付ヘッダーのドロップダウン フィルターが日付階層としてではなく、個々の日付として表示されます。

ActiveWindow.AutoFilterDateGrouping = False

于 2019-11-14T17:14:03.227 に答える