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

时间:2013-03-06 14:16:50

标签: excel excel-formula

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

=COUNTIF(range, if_date())

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

9 个答案:

答案 0 :(得分:5)

这对于工作表函数来说很困难,因为excel中的日期只是格式化的数字 - 只有CELL函数可以让您调查单元格的格式(并且您不能将其应用于范围,因此辅助列将会被要求).......或者,如果你只有日期和空白.....或日期和文本,那么使用COUNT函数就足够了,即

=COUNT(range)

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

=COUNTIF(range,">10000")

答案 1 :(得分:2)

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

  1. 使用预定义格式将单元格转换为文本
  2. 尝试使用DATEVALUE将其转换回日期
  3. 排除DATEVALUE返回错误的所有单元格
  4. 作为一个公式,只需使用下面的示例<>替换为您的范围参考。

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

这假定潜在日期值列在A列中。您可以在相邻列中执行类似的操作:

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

= IF(IFERROR(DATEVALUE(A1),0)&GT; 0,1,0)

答案 4 :(得分:0)

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

请参阅more

答案 5 :(得分:0)

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 ,数字 = ABS(F1:F5)然后按的 Ctrl + Shift +输入即可。这就像有人写 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.该技术可用于任何形状的细胞。 我已经测试了垂直,水平和矩形的形状,因为你填写使用 对于函数内的每个订单。

答案 6 :(得分:0)

有点长的啰嗦,但它对我有用:试试这个::

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

if的第一部分将允许单元格为空或如果单元格中有某些东西它会尝试转换为一年,如果有错误或者除了日期结果= 1之外还有其他内容,请执行相同操作每个单元格并对结果求和

答案 7 :(得分:0)

这是我如何诱骗Excel在列表中计算过期认证的方法。我没有设定日期或日期范围,只有当前日期。 “ TODAY()”不适用于Excel2013。它们将其视为文本或条件,而不是日期值。所以这些以前对我不起作用。 因此,问题/方案一词:此列表中有多少人已过期?

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

然后使用:= IF(J5> = 1,1,0) 其中J5是第一个方程式产生正数或负数的单元格。 此集合隐藏在可见工作表的一侧,然后将未过期成员的总数加起来。

答案 8 :(得分:0)

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

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

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