2013-03-06 155 views
2

我正在尋找一個在單元格範圍內運行COUNTIF(或類似)的公式,並且其中包含的值是日期以增加計數器 - 本質上類似於:Excel公式:計數值爲日期的單元格

=COUNTIF(range, if_date()) 

我沒能找到的是對問題的if_date()部分的邏輯測試。有沒有辦法測試一個單元格來檢查它的內容是否是日期?

回答

3

這對於工作表函數來說很困難,因爲Excel中的日期只是格式化的數字 - 只有CELL函數可以調查單元格的格式(並且不能將它應用於某個範圍,因此需要輔助列) .......或者,如果你只有日期和空白.....或日期和文字那麼這將是足夠使用COUNT功能,即

=COUNT(range)

纔是最重要的數字,因此如果你想把日期和數字區分開來,這樣做是不夠的。如果你這樣做,那麼可以使用數字範圍,例如,如果你有一個數字範圍和日期,但數量都將超過10000低和日期都將是相對較新的,那麼你可以使用這個版本來排除號碼

=COUNTIF(range,">10000")

0

這假設列您可以在相鄰列中執行類似操作:

製作一個嵌套的公式,該公式可將「日期」轉換爲數值(如果它有效),或者將錯誤值轉換爲零不。
然後它將有效的數值轉換爲1,並保留零。
然後總結新列以獲取有效日期的總數。

= IF(IFERROR(DATEVALUE(A1),0)> 0,1,0)

+0

事實上,如果A1包含公式返回零的真實日期--DATEVALUE僅適用於一個看起來像日期的文本值 - = DATEVALUE(TODAY())=#VALUE! – 2013-03-06 23:19:03

+0

@barryhoudini:雖然這是如此接近。所有缺少的是使用TEXT函數作爲橋樑。 user1600453進一步充實(很可能受此答案的啓發)。 – 2015-07-01 14:02:17

+0

我不太確定TEXT函數是否有幫助 - 如果單元格中的值是50,那麼它仍然會被計數,所以user1600453的建議仍然不計算日期,因此 - 我不確定它是否是任何比我建議的答案更有效(而且它肯定更復雜) – 2015-07-01 18:27:58

0

要計算滿足單個測試數字或日期(例如,等於,大於,小於,大於大於或等於或小於或等於),請使用COUNTIF函數。在Excel 2007及更高版本中,要計算落在一個範圍內(例如大於9000且同時小於22500)的數字或日期,可以使用COUNTIFS函數。如果您使用的是Excel 2003或更早版本,則可以使用SUMPRODUCT函數來計算範圍內的數字(在Excel 2007中引入了COUNTIFS)。

請參閱more

0

有一個在Excel中沒有互動解決方案,因爲某些功能不可向量友好,就像CELL,上面引述。例如,可以計算絕對值小於3的所有數字,因爲在公式數組中可接受ABS

所以我用以下數組公式 (按Ctrl + Shift +編輯後沒有大括號中輸入

   ={SUM(IF(ABS(F1:F15)<3,1,0))} 

如果F列

    F 
      1 ... 2 
      2 .... 4 
      3 .... -2 
      4 .... 1 
      5 ..... 5 

它數3! (-2,2和1)。爲了顯示ABS是如何排列友好的功能,讓我們做一個簡單的測試:選擇G1:G5,數字= ABS(F1:F5)在公式編輯欄中並按按Ctrl + Shift + Enter鍵。這就像有人寫ABS(F1:F5)(1),ABS(F1:F5)(2)

    F G 
      1 ... 2 =ABS(F1:F5) => 2 
      2 .... 4 =ABS(F1:F5) => 4 
      3 .... -2 =ABS(F1:F5) => 2 
      4 .... 1 =ABS(F1:F5) => 1 
      5 ..... 5 =ABS(F1:F5) => 5 

現在我把一些數據好壞參半,其中包括2個日期值。

    F 
      1 ... Fab-25-2012 
      2 .... 4 
      3 .... May-5-2013 
      4 .... Ball 
      5 ..... 5 

在這種情況下,CELL失敗並返回1

   ={SUM(IF(CELL("format",F1:F15)="D4",1,0))} 

這是因爲CELL返回該範圍的第一單元的格式。 (D4是m-d-y格式)

所以唯一剩下的就是編程!甲UDF(用戶定義的函數)爲式陣列必須返回一個變量數組:

Function TypeCell(R As Range) As Variant 
Dim V() As Variant 
Dim Cel As Range 
Dim I As Integer 
Application.Volatile '// For revaluation in interactive environment 
ReDim V(R.Cells.Count - 1) As Variant 
I = 0 
For Each Cel In R 
    V(I) = VarType(Cel) '// Output array has the same size of input range. 
    I = I + 1 
Next Cel 
TypeCell = V 
End Function 

現在是容易的(恆定VbDate是7):

   =SUM(IF(TypeCell(F1:F5)=7,1,0)) 

它顯示2。即技術可以用於任何形狀的細胞。 我已經測試了垂直,水平和矩形形狀,因爲您在函數內部使用 來填充每個的順序。

2

以下是一種方法。使用組合的上述問題的答案做到以下幾點:

  1. 轉換單元使用預定義的格式文本
  2. 嘗試使用DATEVALUE將其轉換回一個日期
  3. 排除其中DATEVALUE返回錯誤的任何細胞

作爲一個公式,只需使用下面的示例,用<>代替您的範圍參考。

=SUM(IF(ISERROR(DATEVALUE(TEXT(<<RANGE HERE>>, "MM/dd/yyyy"))), 0, 1)) 

您必須使用CTRL + SHIFT + ENTER將其作爲數組公式輸入。

2

這是我的解決方案。如果您的單元格只包含日期或空白,只需將其與另一個日期進行比較即可。如果單元格可以轉換爲日期,則會進行計數。

=COUNTIF(C:C,">1/1/1900") 
## Counts all the dates in column C 

注意,帶數字的單元格將被計數。

0

有點長篇大論,但它爲我工作:試試這個::

=SUM(IF(OR(ISBLANK(AU2), NOT(ISERR(YEAR(AU2)))),0,1) 
+IF(OR(ISBLANK(AV2), NOT(ISERR(YEAR(AV2)))),0,1)) 

,如果將允許細胞爲空白或第一部分,如果有什麼東西在細胞它試圖轉換到一年,如果出現錯誤或者日期結果= 1以外的其他值,則對每個單元格執行相同的操作並對結果進行求和

相關問題