2013-03-06 66 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以外的其他值,则对每个单元格执行相同的操作并对结果进行求和

相关问题