【发布时间】:2016-06-02 00:23:30
【问题描述】:
以下问题困扰了我好久。
我使用以下公式根据年份(范围 A2:A10)对收入(范围 B2:B10)进行排名:
=SUMPRODUCT(($A$2:$A$10=A10)*($B$2:$B$10>B10))+1
我将此公式粘贴到 Range(C2:C10) 中以查找每个观察的排名。
这一切都很好,但是,这里有一个问题:我需要这样做不是为了 10 次观察,而是为了 124440 次观察;运行它会使我的工作簿瘫痪很长时间。
所以我的问题是:你能帮我找到一种方法,让我计算上面提到的公式,而不必在每个单元格中复制/粘贴它(可能通过使用 VBA),这反过来将允许计算跑得更快?
我已经在网上搜索过,但是由于我是 VBA 新手,所以我不知道我应该寻找什么
Company Name Year - Fiscal Revenues Rank
AAR CORP 2003 150 1
AAR CORP 2004 180 1
AAR CORP 2005 120 2
ADC TELECOMMUNICATIONS INC 2003 90 3
ADC TELECOMMUNICATIONS INC 2004 99 3
ADC TELECOMMUNICATIONS INC 2005 108 3
AFP IMAGING CORP 2003 120 2
AFP IMAGING CORP 2004 130 2
AFP IMAGING CORP 2005 140 1
根据您的要求。而不是 10 个观察值,而是 124440。
【问题讨论】:
-
COUNTIFS的计算负载和处理时间至少是等效SUMPRODUCT的 ¹⁄₃。如果您有 Excel 2007 或更高版本,请尝试=COUNTIFS($A$2:$A$124440, A10, $B$2:$B$124440, ">="&B10)。见COUNTIFS function -
你能发布一个示例输出吗?仅包含收入、日期和公式结果的 10 行。
-
您好 Jeeped,感谢您的反馈!这绝对是朝着正确方向迈出的一大步,但我仍然需要等待 5-10 分钟才能完成。当我将它与 VBA 一起使用时,是否还有另一个巨大的速度提升?或者这大约和它的速度一样快?
-
如果您想在 VBA 中找到解决方案,我认为这里没有多少人愿意从头开始编写您的代码。先尝试谷歌搜索示例。同时,您可以通过连接 C 列 ( =A2&"-"&B2) 中的 A 列和 B 列中的值然后对 D 列中的单个列执行计数 ( =COUNTIF($C$2: $C$124440,C2))
-
@MatteoNNZ:我如何发布这些信息?鉴于我的低代表,我还不允许发布图像或附件。试图只在评论框中发布数据,不翻译。