繁体   English   中英

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

[英]Excel Formula: Count cells where value is date

我正在寻找一个公式来在一系列单元格上运行COUNTIF(或类似的),并且包含的​​值是一个日期,以增加计数器 - 基本上类似于:

=COUNTIF(range, if_date())

我无法找到的是对问题的if_date()部分的逻辑测试。 有没有办法测试一个单元格来检查它的内容是否是一个日期?

这对于工作表函数来说很困难,因为excel中的日期只是格式化的数字 - 只有CELL函数可以让你研究一个单元格的格式(你不能将它应用到一个范围,所以需要一个辅助列).... ...或者,如果你只有日期和空白.....或日期和文本,那么使用COUNT函数就足够了,即

=COUNT(range)

这会对数字进行计数,因此如果您想将日期与数字区分开来,这将是不够的。 如果你这样做,那么可以使用数字范围,例如,如果你有一个范围和日期的数字,但数字都将低于10,000,日期将相对较新,那么你可以使用这个版本来排除数字

=COUNTIF(range,">10000")

这是我的解决方案。 如果您的单元格仅包含日期或空格,只需将其与另一个日期进行比较即可。 如果可以将单元格转换为日期,则会对其进行计数。

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

注意,将计算具有数字的单元格。

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

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

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

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

您必须使用CTRL + SHIFT + ENTER输入此数组公式。

这假设潜在日期值列在A列中。您可以在相邻列中执行以下操作:

制作一个嵌套公式,如果它有效,则将“date”转换为数值;如果不是,则将错误值转换为零。
然后它将有效数值转换为1并按原样保留零。
然后将新列相加以获得有效日期的总数。

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

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

请看更多

Excel中没有交互式解决方案,因为某些函数不是向量友好的,如上面引用的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是如何对阵列友好的功能,让我们做一个简单的测试:在公式栏中选择G1:G5 ,digit = 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是mdy格式)

所以剩下的就是编程! 公式数组的 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(OR(ISBLANK(AU2), NOT(ISERR(YEAR(AU2)))),0,1)
 +IF(OR(ISBLANK(AV2), NOT(ISERR(YEAR(AV2)))),0,1))

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

以下是我如何欺骗Excel来计算列表中过期的认证。 我没有设定日期或日期范围,只有当前日期。 “TODAY()”在Excel 2013中不起作用。它将其视为文本或条件,而不是日期值。 所以这些以前对我没用。 所以单词问题/场景:这个列表中有多少人过期了?

使用:= IFERROR(D5-TODAY(),0)其中D5是要被询问的日期。

然后使用:= IF(J5> = 1,1,0)其中J5是第一个等式产生正数或负数的单元格。 这个集合,我隐藏在可见表单的一侧,然后我只是总计未过期成员的数量。

范围内的单元总数减去相同范围的空白单元格。

=(115 - (COUNTBLANK(C2:C116)))

这会计算范围内的所有内容,也许不是您要查找的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM