Excel公式:计算值为date的单元格

我正在寻找一个公式来运行一个单元格范围内的COUNTIF(或类似),并且其中包含的值是一个date,以增加计数器 – 本质上是这样的:

=COUNTIF(range, if_date()) 

我没能find的是if_date()问题的逻辑testing。 有没有办法testing一个单元格来检查它的内容是否是一个date?

这对于工作表函数是很困难的,因为excel中的date只是格式化的数字 – 只有CELL函数可以让你调查单元格的格式(而且你不能将它应用到一个范围,所以需要一个帮助列)。 …或者,如果你只有date和空白…..或date和文本,那么使用COUNT函数即可

=COUNT(range)

这就是数字,所以如果你想把date和数字区分开来的话就不够了。 如果你这样做,那么数字范围可以被利用,例如,如果你有一个范围内的数字和date,但数字都将低于10,000,date都将是相对较新的,那么你可以使用这个版本来排除数字

=COUNTIF(range,">10000")

这是一种方法。 使用以上答案的组合执行以下操作:

  1. 使用预定义的格式将单元格转换为文本
  2. 尝试使用DATEVALUE将其转换回date
  3. 排除DATEVALUE返回错误的所有单元格

作为一个公式,只需使用下面的示例将<>replace为您的范围参考。

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

您必须使用CTRL + SHIFT + ENTER将其input为数组公式。

这是我的解决scheme。 如果您的单元格将只包含date或空白,只需将其与另一个date进行比较。 如果单元格可以转换为date,则会被计数。

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

小心,数字的单元格将被计数。

这假定潜在的date值列在A列中。你可以在相邻列中做这样的事情:

制作一个嵌套的公式,如果它是有效的,则将“date”转换为其数值;如果不是,则将其误差值设为零。
然后它将有效的数值转换为1,并保留零。
然后总结新列以获得有效date的总数。

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

要统计满足单个testing的数字或date(如等于,大于,小于,大于或等于或小于或等于),请使用COUNTIF函数。 在Excel 2007及更高版本中,要计算落在一个范围内(例如大于9000,同时小于22500)的数字或date,可以使用COUNTIFS函数。 如果您使用的是Excel 2003或更早版本,则可以使用SUMPRODUCT函数来计算范围内的数字(在Excel 2007中引入了COUNTIFS)。

请看更多

Excel中没有交互式的解决scheme,因为有些函数不是向量友好的,比如上面引用的CELL 。 例如,可以计算绝对值小于3的所有数字,因为在公式数组中可以接受ABS

所以我用了下面的数组公式( Ctrl + Shift + Enter编辑后没有大括号)

  ={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是如何实现arrays友好function的,我们来做一个简单的testing:在公式栏中selectG1:G5 ,digit = ABS(F1:F5) ,然后按Ctrl + Shift + Enter 。 这就像有人写Abs(F1:F5)(1),Abs(F1:F5)(2)

  FG 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个date值。

  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是一个mdy格式)

所以唯一剩下的就是编程! 公式数组的 UDF(用户定义的函数)必须返回一个variables数组:

 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.该技术可以用于任何形状的细胞。 我已经testing了垂直,水平和矩形形状,因为您在函数内部填充了每个订单。

有点啰嗦,但它适用于我:试试这个::

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

if的第一部分将允许单元格为空,或者如果单元格中有某个单元格试图将其转换为一年,如果有错误或者除date结果= 1之外还有其他内容,则对每个单元格执行相同操作总结结果