【问题标题】:Excel Formula: Count cells where value is dateExcel公式:计算值为日期的单元格
【发布时间】:2019-01-24 02:35:16
【问题描述】:

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

=COUNTIF(range, if_date())

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

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

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

    =COUNT(range)

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

    =COUNTIF(range,">10000")

    【讨论】:

      【解决方案2】:

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

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

      注意,带有数字的单元格将被计算在内。

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        【讨论】:

          【解决方案4】:

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

          创建一个嵌套公式,如果“日期”有效则将其转换为数值,如果无效则将错误值转换为零。
          然后它将有效的数值转换为 1 并保留零。
          然后对新列求和,得到有效日期的总数。

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

          【讨论】:

          • 事实上,如果 A1 包含一个真正的日期,则公式返回零 - DATEVALUE 仅在应用于看起来像日期的文本值时才有效 - =DATEVALUE(TODAY())=#VALUE!
          • @barryhoudini:不过,这太接近了。所缺少的只是使用 TEXT 函数作为桥梁。 user1600453 进一步充实了它(很可能受到这个答案的启发)。
          • 我不太确定 TEXT 函数是否有帮助 - 如果单元格中的值是 50 之类的数字,那么它仍然会被计算在内,因此 user1600453 的建议仍然不计算日期,因此 -我不确定它是否比我建议的答案更有效(而且肯定更复杂)
          【解决方案5】:

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

          请看more

          【讨论】:

            【解决方案6】:

            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+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。该技术可用于任何形状的细胞。 我已经测试了垂直、水平和矩形形状,因为你使用填充 对于每个函数内的订单。

            【讨论】:

              【解决方案7】:

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

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

              if 的第一部分将允许单元格为空白,或者如果单元格中有某些内容,它会尝试将其转换为年份,如果有错误或日期结果 = 1 以外的其他内容,则对每个单元格并对结果求和

              【讨论】:

                【解决方案8】:

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

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

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

                【讨论】:

                  【解决方案9】:

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

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-11-18
                    • 1970-01-01
                    相关资源
                    最近更新 更多