10

我在 Excel 中有两列,如下所示:

 A   B
0.5  0.4
0.6  0.59
0.1  0.2
0.3  0.29

我想计算 B 中的值有多少小于它们在 A 中的对应值。在这种情况下,答案是 3。

我可以通过添加一个额外的列B-A然后执行此操作COUNTIF(RANGE, "<0"),但我想知道是否有一种方法可以在不添加额外列的情况下做到这一点。

我意识到这是人们可能会考虑编程的边缘,但希望它只是在正确的一边,而不是错误的一边。

4

6 回答 6

21

这可以使用 Excel 数组公式来完成。尝试做这样的事情:

=SUM(IF(A1:A5 > B1:B5, 1, 0))

非常非常 重要的部分,是在您输入完公式后按CTRL-SHIFT-ENTER而不是按。ENTER否则它将无法理解您要将数据视为数组。

于 2009-02-05T11:48:35.920 回答
2

Shalom 的 Arrayformula 解决方案非常好,但我无法使其与嵌入 IF 的 AND 函数一起使用,所以我不得不寻找另一个解决方案,终于找到了!

=ROWS(FILTER(A1:B4, A1:A4 > B1:B4))

这解决了问题中的原始问题。另一方面,您可以使用多个条件,如有必要,在其他函数中使用过滤范围本身。

(这是一个 Google Sheet 解决方案,没有在 Excel 中尝试过)

于 2019-05-21T12:34:49.220 回答
1

有一个解决方案,但它仍然涉及 2 个额外的单元格:DCOUNT。

以下是一个示例(在指定单元格中插入冒号后的确切文本):

A1:条件

A2:=B4>A4

A3:A

B3:B

A4:700

B4:5000

A5:700

B5:600

A6:7000

B6:6000

A7:700

B7:701

具有计数公式的单元格:=DCOUNT(A3:B7,"B",A1:A2)

于 2009-02-05T11:15:39.213 回答
1

实际上,这是我用程序做的事情。

创建一个宏来:

  • 插入 C 列。
  • 将所有 N 的 range("cN").value 设置为 "=bN-aN",其中 range("aN").value <> ""。
  • 做你的 countif 计算并将其推入一个单元格(不是C 列)。
  • 删除 C 列。

可能有一种更简单的非编程方式,但我不知道(然后你的问题无论如何都会被关闭)。

于 2009-02-05T11:16:23.783 回答
0

scraimer 解决方案是好的。但为了好玩,

您还可以编写如下宏并分配

=myOwnFunction(A1:A5,B1:B5)

这种方法可以扩展到任何其他逻辑函数,例如 A *​​ B + C < C + D * E 等......

Function myOwnFunction(R1 As Range, S1 As Range)

   Dim J As Integer

   Dim Size As Integer

   Dim myCount As Integer


   Size = R1.Cells.Count

   myCount = 0

       For J = 1 To Size

           If (R1.Cells(J) > S1.Cells(J)) Then

            myCount = myCount + 1

           End If

       Next J


    myOwnFunction = myCount

End Function
于 2009-02-05T12:07:23.527 回答
0

我会使用 sumproduct。

=sumproduct(--(B:B>A:A))

给出正确答案 3

于 2021-03-12T11:22:39.243 回答