我正在尋找一個在單元格範圍內運行COUNTIF(或類似)的公式,並且其中包含的值是日期以增加計數器 - 本質上類似於:Excel公式:計數值爲日期的單元格
=COUNTIF(range, if_date())
我沒能找到的是對問題的if_date()部分的邏輯測試。有沒有辦法測試一個單元格來檢查它的內容是否是日期?
我正在尋找一個在單元格範圍內運行COUNTIF(或類似)的公式,並且其中包含的值是日期以增加計數器 - 本質上類似於:Excel公式:計數值爲日期的單元格
=COUNTIF(range, if_date())
我沒能找到的是對問題的if_date()部分的邏輯測試。有沒有辦法測試一個單元格來檢查它的內容是否是日期?
這對於工作表函數來說很困難,因爲Excel中的日期只是格式化的數字 - 只有CELL
函數可以調查單元格的格式(並且不能將它應用於某個範圍,因此需要輔助列) .......或者,如果你只有日期和空白.....或日期和文字那麼這將是足夠使用COUNT
功能,即
=COUNT(range)
纔是最重要的數字,因此如果你想把日期和數字區分開來,這樣做是不夠的。如果你這樣做,那麼可以使用數字範圍,例如,如果你有一個數字範圍和日期,但數量都將超過10000低和日期都將是相對較新的,那麼你可以使用這個版本來排除號碼
=COUNTIF(range,">10000")
這假設列您可以在相鄰列中執行類似操作:
製作一個嵌套的公式,該公式可將「日期」轉換爲數值(如果它有效),或者將錯誤值轉換爲零不。
然後它將有效的數值轉換爲1,並保留零。
然後總結新列以獲取有效日期的總數。
= IF(IFERROR(DATEVALUE(A1),0)> 0,1,0)
要計算滿足單個測試數字或日期(例如,等於,大於,小於,大於大於或等於或小於或等於),請使用COUNTIF函數。在Excel 2007及更高版本中,要計算落在一個範圍內(例如大於9000且同時小於22500)的數字或日期,可以使用COUNTIFS函數。如果您使用的是Excel 2003或更早版本,則可以使用SUMPRODUCT函數來計算範圍內的數字(在Excel 2007中引入了COUNTIFS)。
請參閱more
有一個在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。即技術可以用於任何形狀的細胞。 我已經測試了垂直,水平和矩形形狀,因爲您在函數內部使用 來填充每個的順序。
以下是一種方法。使用組合的上述問題的答案做到以下幾點:
作爲一個公式,只需使用下面的示例,用<>代替您的範圍參考。
=SUM(IF(ISERROR(DATEVALUE(TEXT(<<RANGE HERE>>, "MM/dd/yyyy"))), 0, 1))
您必須使用CTRL + SHIFT + ENTER將其作爲數組公式輸入。
這是我的解決方案。如果您的單元格只包含日期或空白,只需將其與另一個日期進行比較即可。如果單元格可以轉換爲日期,則會進行計數。
=COUNTIF(C:C,">1/1/1900")
## Counts all the dates in column C
注意,帶數字的單元格將被計數。
有點長篇大論,但它爲我工作:試試這個::
=SUM(IF(OR(ISBLANK(AU2), NOT(ISERR(YEAR(AU2)))),0,1)
+IF(OR(ISBLANK(AV2), NOT(ISERR(YEAR(AV2)))),0,1))
,如果將允許細胞爲空白或第一部分,如果有什麼東西在細胞它試圖轉換到一年,如果出現錯誤或者日期結果= 1以外的其他值,則對每個單元格執行相同的操作並對結果進行求和
事實上,如果A1包含公式返回零的真實日期--DATEVALUE僅適用於一個看起來像日期的文本值 - = DATEVALUE(TODAY())=#VALUE! – 2013-03-06 23:19:03
@barryhoudini:雖然這是如此接近。所有缺少的是使用TEXT函數作爲橋樑。 user1600453進一步充實(很可能受此答案的啓發)。 – 2015-07-01 14:02:17
我不太確定TEXT函數是否有幫助 - 如果單元格中的值是50,那麼它仍然會被計數,所以user1600453的建議仍然不計算日期,因此 - 我不確定它是否是任何比我建議的答案更有效(而且它肯定更復雜) – 2015-07-01 18:27:58