Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
変数のフィルターがけについて
投稿日時: 24/05/22 22:23:43
投稿者: Mikky777

年月日(例:20230512,20231101,20240122)の形式でセル上に記載されている列から変数で指定した年月(例:202411)を含むもののみをフィルターがけしたいのですが、下記のようにコードを入力してもフィルターがうまくいかずヒットしません。
変数を含むもの、でのフィルターがけについて、うまく抽出させる方法を教えていただけますでしょうか。
 
<補足>
※セル1,1に指定の年月「202411」を入力 ←変数:month
※年月日の入力は「20241104や20230211」のように入力されており、変数で指定した202411のみをフィルターで抽出したい
 
Dim month As Variant
    month = Cells(1, 1).Value
 
ActiveSheet.Range(Cells(5, 1), Cells(100, 19)).AutoFilter Field:=5, Criteria1:="*" & month & "*", Operator:=xlAnd

回答
投稿日時: 24/05/25 15:54:08
投稿者: WinArrow

年月日が入っているセルは、数値ですよね?
 
数値の場合は、ワイルドカードは使えないので、
範囲を指定して絞込する方法を紹介します。
 
参考コードを適宜アレンジしてみてください。
 

Dim myKEY1 As String, myKEY2 As String
    myKEY1 = ">202305" & "00"
    myKEY2 = "<=202305" & "99"
    With ActiveSheet
        .Range("$A$1:$A$100").AutoFilter _
            Field:=1, _
            Criteria1:=myKEY1, _
            Operator:=xlAnd, _
            Criteria2:=myKEY2
    End With

回答
投稿日時: 24/05/26 07:58:36
投稿者: simple

既に適切な回答をいただいていると思いますが、
ゴール近くの最後のところで詰まっていてはいけないので、念のため追記しておきましょう。

Sub test()
    Dim n  As Long
    Dim key1 As String, key2 As String

    n = Cells(1, 1).Value       'yyyymm形式の単なる数値とします。
    key1 = ">=" & n & "01"  
    key2 = "<=" & n & "31"      'すべて大の月と条件を緩めておいても
                                '実質的に支障ないでしょう。(*)
    ActiveSheet.Range(Cells(5, 1), Cells(100, 19)).AutoFilter _
            Field:=5, Criteria1:=key1, Operator:=xlAnd, Criteria2:=key2
End Sub

【補足】
1. 次の月の1日未満と考えることもできます。
 key2 = "<" & Format(DateSerial(n / 100, 1 + n Mod 100, 1), "yyyymmdd")

2.(*) 実在しない例えば20240631などと言う入力を排除するのは入力側の責任であり、
  別の話になるでしょう。
  もちろんチェックは可能でしょう。既に対応済みかも知れませんが。

回答
投稿日時: 24/05/27 21:32:05
投稿者: simple

 いったん削除されましたが、最初の回答は質問からほどなくされ、
 それから数日経過しています。平日、休日ともに過ぎました。
 質問したままにするのは望ましくないと思います。
 やむを得ない事情があり多忙になったとかであれば、その旨コメントして下さい。

トピックに返信