用于countifs的Excel VBA,其中一个条件取决于另一个条件

时间:2016-01-31 22:23:45

标签: excel excel-vba excel-formula vba

我正在为篮球队做一些编码,我有数千行数据,其中包含2个代表X,Y坐标的列,其中半场投篮。我需要能够计算法院每个区域的坐标数量。例如;计算在油漆中拍摄的照片很容易,因为油漆是矩形区域,即使用countifs(X:X,AND(X> = 120,X <= 320),Y:Y,和(Y <= 280)。 / p>

但是我需要计算从右翼和左翼拍摄的镜头,教练将其定义为从篮筐下方通过钥匙的右上角采取直线,并从篮下通过第二条直线键的左上角。这些线是对角线的,我无法弄清楚如何在VBA中正确编码,因为Y坐标值取决于X坐标值。让我们说在这种情况下,线的线性方程是Y = -2.48X + 500,所以我需要Countif来计算Y坐标所在的所有镜头数&lt; 500 - (2.48 * X坐标)。

有人有什么想法吗?我被困在这里,概念上它看起来像这样,但我知道这不起作用!

= countifs(“Y:Y”,“&lt; 500 - 2.48 *(”“X:X”“)”)

**实现my = countifs只包含1个标准,使用Countifs因为我还需要使用其他标准,但为了便于锻炼而省略它们。我正在使用的其他标准包括检查列以查看列值是否=团队名称,以便它只计算A队开枪的行数,或者另一列表示用+或 - < / p>

1 个答案:

答案 0 :(得分:0)

您将需要一个数组公式¹或SUMPRODUCT,由于循环处理的对数税,它们都不能很好地处理'数千行'。应不惜一切代价避免使用完整的列引用。

在作为标准公式的单元格中,

=SUMPRODUCT(--(Y$2:INDEX(Y:Y, MATCH(1E+99,Y:Y ))<500-2.48*X$2:INDEX(X:X, MATCH(1E+99,Y:Y ))))

MATCH function使用近似匹配的不可思议的高数字。这将返回Y列中最后一个数字的行号。它用于将X和Y列限制为数据范围。在两种情况下都使用Y列中的最后一个数字,因为SUMPRODUCT要求范围大小相同(尽管不一定是相同的行)。

在作为数组公式¹的单元格中,

=SUM(IF(X$2:INDEX(X:X, MATCH(1E+99,Y:Y )), --(Y$2:INDEX(Y:Y, MATCH(1E+99,Y:Y ))<497.52), --(Y$2:INDEX(Y:Y, MATCH(1E+99,Y:Y ))<500)))

¹数组公式需要用 Ctrl + Shift + Enter↵完成。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas