2017-11-07 3 views
1

私はvbaにはかなり新しく、私の問題は1つのテーブルで特定の日付をフィルタリングする必要があることです。動的な複数の日付でVBAをフィルタリングする方法

ロジックは、週に不要な日付を除外することです。 私の生データには、10/30/201/11/05/2017の日付のみが必要な10/29/2017 - 11/06/2017の日付が含まれています。私はマクロを記録しようとしましたが、これは毎週実行されているため動的である必要があります。

ここまでは私が今までに得たコードです。

ActiveSheet.ListObjects("Table6").Range.AutoFilter Field:=7, Operator:= _ 
     xlFilterValues, Criteria2:=Array(2, "10/30/2017", 2, "10/31/2017", 2, "11/1/2017", _ 
     2, "11/2/2017", 2, "11/3/2017", 2, "11/4/2017", 2, "11/5/2017") 

誰かが助けてくれる! ありがとうございます。

+1

あなたは常に2つの肩の日付を除外しますか? – dwirony

+1

私は、この文脈で長年使用されていた用語* shoulder *を聞いたことがありません。 – Jeeped

+0

@Jeeped法人のホテルの世界で働くと、肩の日/肩の夜が十分に聞こえます;) – dwirony

答えて

1

私は週を指定して配列を返すことができる関数を書いています。私はその日付の後に1週間、または2つの日付の間に日付配列を生成する2つの日付を生成する日付を入力できるように関数を編集しました。

Private Function GenWeek(ByVal Day1 As Date, Optional ByVal Day2 As Date) As Variant 
    Dim Week() As Variant 
    If Day2 <> 0 Then 
     ReDim Week(1 To (Day2 - Day1 + 1) * 2) As Variant 
    Else 
     ReDim Week(1 To 14) As Variant 
    End If 

    For i = 1 To UBound(Week)/2 
     Week(i * 2 - 1) = 2 
     Week(i * 2) = Day1 + i - 1 
    Next i 

    GenWeek = Week 
End Function 

コードを次のように書き換えることができます。

ActiveSheet.ListObjects("Table6").Range.AutoFilter Field:=7, Operator:= _ 
    xlFilterValues, Criteria2:=GenWeek(Date) 
1

(テキストなど)の間に2つの '肩' の日付をお試しください。

Dim d1 As String, d2 As String 
d1 = Format(Date - Weekday(Date, vbThursday), "\>\=mm/dd/yyyy") 
d2 = Format(Date - Weekday(Date, vbThursday) + 6, "\<\=mm/dd/yyyy") 
With ActiveSheet.ListObjects("Table6") 
    .Range.AutoFilter Field:=7, Operator:=xlAnd, _ 
        Criteria1:=d1, Criteria2:=d2 
End With 
+0

この日付形式のマスクで結果を再確認してください。 \> \ = mm/d/yyyy ""または\ "\> \ = m/d/yyyy"にする必要があります。 – Jeeped

関連する問題