生成一系列相乘的数字,但从1开始
我正在尝试生成一般forms的整数数组
n*0 n*1 n*2 n*3
但是第一个数字需要是一个(1),而不是零。
这个公式起作用:
=IF((ROW(INDIRECT("1:10"))-1)*n=0,1,(ROW(INDIRECT("1:10"))-1)*n)
但我希望有一个更有效的方法,使用工作表函数。
我会使用: =ABS(seq-0.5)+0.5
其中Seq = {0,1,...,m}*n
如果你想为Seq
创build一个大的固定数组,你可以从直接窗口input:
Names.Add "Seq",[(row(1:100)-1)*99]
另见http://www.chandoo.org/forum/threads/create-an-array-of-numbers.13433/ 。
似乎没有比生成从零开始的序列更有效的algorithm,并且testing零,replace一个。
然而,这个系列可以更高效地生成,而且我相信,如果不需要指定上限,我就可以通过使用Harlan Grove多年前首次看到的技术以非易失性的方式进行操作。
定义一个名字:
seq Refers to: =ROW(INDEX(Sheet1!$1:$65536,1,1):INDEX(Sheet1!$1:$65536,10,1))
10表示序列中的数字,任何值都可以被replace
那么我的公式就会变成n = 99
=IF((seq-1)*99=0,1,(seq-1)*99)
这将生成数组:
{1;99;198;297;396;495;594;693;792;891}
谢谢大家。
编辑做一些计时testing表明, seq方法运行速度显着(3倍)比行(间接…方法时,生成10 ^ 6数字数组。
在A1中放置一个值,例如99.在另一个单元格中input:
=IF(ROWS($1:1)=1,1,(ROWS($1:1)-1)*$A$1)
并抄下来。 例如:
您可以通过使用MAX
来避免IF
函数:
如果您希望能够在任何单元格中启动,请使用以下公式:
=MAX(1,(ROWS($1:1)-1)*$A$1)
您还可以避免数组公式中的IF
函数,利用了TRUE等于1的事实:
=(ROW(INDIRECT("1:10"))-1)*99+(ROW(INDIRECT("1:10"))-1=0)
我已经testing了两个我们的方法,将它们input单元格A1:A1048576(作为数组公式)。 我的方法运行速度是你的两倍。