2015-08-28 259 views
1

我想知道我是否可以使用通配符進行日期?Excel VBA Countifs通配符標準 - 日期

我有存儲在A1時間日期:A5,我想看看有多少項目是
那裏與標準「2015年8月12日」不分時間,輸出併發症應該是2爲A1和A4包含日期 「2015年8月12日」

A1 = 2015年8月12日上午12時

A2 = 2015年8月25日下午3點

A3 = 8/23/2015 4:00 AM

A4 = 2015年8月12日上午01點30分

A5 =二零一五年八月二十零日12:00 AM

  Sub counter() 

      With Sheet1 
      Dim compl As String 
      Dim xdate As String, xdate2 As String 
      xdate = "08/12/2015" 
      xdate2 = xdate & "*" 

      compl = WorksheetFunction.CountIfs(Range("a1:a5"), xdate2) 
       Debug.Print compl 
      End With 

      End Sub 

回答

1

請確保您的日期是一個日期,而不是一個字符串。

確保使用ISO標準格式,而不是一些隨機的日期順序。

Dim xdate As date 
xdate = "2015-08-12" 

compl = WorksheetFunction.CountIfs(Range("a1:a5"), ">=" & xdate, _ 
            Range("a1:a5"), "<" & (xdate + 1)) 

而且,你不需要VBA爲此,只需使用Excel的COUNTIFS函數是這樣的:

=COUNTIFS(a1:a5,">=2015-08-28",a1:a5,"<2015-08-29") 

編輯 對於我來說,添加格式功能是必要的,以保持日期以Excel的人類格式來理解。更改Worksheetfunction線這樣的,如果你想確保它的工作原理:

WorksheetFunction.CountIfs(Range("a1:a5"), ">=" & Format(xdate, "yyyy-mm-dd"), _ 
          Range("a1:a5"), "<" & Format(xdate + 1, "yyyy-mm-dd")) 
+0

非常感謝你!對不起,我對excel VBA很陌生, –

0

在Excel自1/1/1970的日期存儲爲數字。這意味着你寫的日期是42239. 當2位十進制數字是小時。你可以使用功能round(0位數),當這個數字將包括特定日期的所有單元格。

+0

感謝您的答覆@Balinti我想這個過程,但是當我轉換成日期數會有一個十進制等效時間。是否有任何代碼可以通過通配符進行比較來忽略小數位? ex。 A1包含42239.97 下面的代碼不起作用: X = 42239 xdate2 = 42239& 「*」 併發症= WorksheetFunction.CountIfs(範圍( 「A1:A5」),xdate2) –

+0

您可以使用格式格式(日期,「MM_DD_YYYY」)以及 – Balinti

+0

我似乎不明白我會在哪裏使用格式語法,對不起,請你詳細說明一下嗎? –

0

如果它不必在VBA和countif(我沒有看到目標是什麼): = sumproduct((floor(value(A1:A5),1)= date(2015,8 ,20))* 1) 否則有周期等選項,但沒有目的很難指向正確的方向

+0

Countifs更容易 – vacip

+0

好吧,我總是忘記我在一家擁有上千年技術的公司工作。 –

+0

我使用了vba,因爲我有從MS Access數據庫表中抽出的數千條記錄,表中包含個人名稱,任務,任務狀態(例如,完成,正在進行中,已取消),我的報告已完成/取消的日期顯示了在指定的日期或周或月中按人員姓名完成/取消/進行了多少任務。 –