问题描述
参考 this link 中的问题,提供的解决方案适用于小单元格范围。如果将其应用于大范围的工作表,则工作表会被挂起。是否有任何方法可以对大型 excel 范围使用类似的方法?
解决方法
对于 10K 单元格,原始 Countifs 公式如下所示:
=INDEX(B1:B10000,MATCH(MAX(COUNTIFS(A1:A10000,"Blue",B1:B10000,B1:B10000)),COUNTIFS(A1:A10000,B1:B10000),0))
使用 Match 修改后的公式比原始 countifs 公式快得多:
=INDEX(B1:B10000,MODE(IF(A1:A10000="Blue",MATCH(B1:B10000,0))))
原始公式 2.5 秒,使用 this timer 匹配公式 0.15 秒
使用 Microsoft 365,您可以仅筛选蓝色行,而且速度再次加快。
此版本的公式运行时间为 0.003 秒:
=INDEX(FILTER(B1:B10000,A1:A10000="Blue"),MODE(MATCH(FILTER(B1:B10000,FILTER(B1:B10000,0)))
还有这个在 0.002 秒内
=LET(x,INDEX(x,MODE(MATCH(x,x,0))))
使用 Microsoft 365 和 Windows 10 在处理器 Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz、2904 Mhz、6 核、12 逻辑处理器上进行计时。
测试数据使用了七种不同的颜色和七种不同的名称,使用
生成=INDEX(G$1:G$7,RANDBETWEEN(1,7))
和
=INDEX(H$1:H$7,7))
由于响应为 O(N^2),因此将搜索空间减少 7 倍应该可以将时间减少约 50 倍。