我正在为篮球队做一些编码,我有数千行数据,其中包含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>
答案 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。