我有一个超过 50,000 行的 Excel 电子表格,并希望添加一个列,通过为向下的每十行分配一个递增的数字,有效地将数据分组为十组。为了澄清,这就是我想要的:
Col A Col B Decile
1 * * 1
2 * * 1
3 * * 1
4 * * 1
5 * * 1
6 * * 1
7 * * 1
8 * * 1
9 * * 1
10 * * 1
11 * * 2
12 * * 2
13 * * 2
14 * * 2
...
199 * * 19
200 * * 19
201 * * 20
...
我目前的做法是将此函数插入到 Decile 列的第一个条目中,并将其复制到整个列:
=INT(COUNTA($A1:A$2)/10) + 1
它计算从 A2 到当前行的所有行,除以 10,楼层为整数,并从 1 开始将 1 添加到索引。
我遇到的问题是,对于超过 50,000 行,这需要 Excel 花费大量时间来计算,因为对于每一行,它必须计算它之前的所有行,然后计算一个数字(给它一个 O(n^2 )运行时,如果我正确地记住了我的算法讲座)。必须有一种更有效的方法来做到这一点,而我缺乏 Excel 专业知识使我无法考虑不同的解决方案。
你会如何解决这个问题?
最佳答案
这可能会提供一些性能提升:
=INT(ROW($A1)/10) + 1
但是,如果您不需要这些值是动态的。填写前10k左右后,您可以复制整个列然后粘贴为值。这将消除 excel 进行连续计算的需要。
您还可以在功能区的“公式”选项卡中的“计算选项”下将计算模式更改为手动。然后,当您完成扩展公式时,点击计算表。这样,每次您将公式部分拖动到新单元格时,它都不会连续计算。
关于excel - 每十行增加一个计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33555470/