生成一系列相乘的数字,但从1开始

时间:2014-10-25 02:21:14

标签: excel

我正在尝试生成一般形式的整数数组

n*0
n*1
n*2
n*3

但第一个数字需要是一(1),而不是零。

此公式有效:

=IF((ROW(INDIRECT("1:10"))-1)*n=0,1,(ROW(INDIRECT("1:10"))-1)*n)

但是我希望有一种更有效的方法,使用工作表函数。

4 个答案:

答案 0 :(得分:1)

似乎没有比生成从零开始的系列更有效的算法,并且测试零,替换为1。

然而,系列可以更有效地生成,并且我相信使用我多年前首次看到Harlan Grove发布的技术的非易失性方式,如果不需要指定上限。

定义名称:

seq  Refers to: =ROW(INDEX(Sheet1!$1:$65536,1,1):INDEX(Sheet1!$1:$65536,10,1))

其中10表示序列中的数字,任何值都可以替换

我的公式将成为,n = 99

=IF((seq-1)*99=0,1,(seq-1)*99)

将生成数组:

{1;99;198;297;396;495;594;693;792;891}

谢谢大家。

修改 进行一些时序测试表明, seq 方法比生成10 ^ 6数组的数组时行(间接... 方法)运行得快(3倍)。 / p>

答案 1 :(得分:0)

A1中放置一个值,比如99.在另一个单元格中输入:

=IF(ROWS($1:1)=1,1,(ROWS($1:1)-1)*$A$1)

并复制下来。例如:

enter image description here

答案 2 :(得分:0)

您可以使用IF

来避免使用MAX功能

enter image description here

如果您希望能够在任何单元格中启动,请使用以下公式:

=MAX(1,(ROWS($1:1)-1)*$A$1)

您还可以避免数组公式中的IF函数,利用TRUE等于1的事实:

=(ROW(INDIRECT("1:10"))-1)*99+(ROW(INDIRECT("1:10"))-1=0)

我已经测试了两种方法,将它们输入到单元格A1:A1048576(作为数组公式)。我的方法运行速度比你的快两倍。

答案 3 :(得分:0)

我使用:=ABS(seq-0.5)+0.5

其中Seq = {0,1,...,m}*n

如果要为Seq创建大型固定数组,可以从即时窗口输入:

Names.Add "Seq",[(row(1:100)-1)*99]

另见http://www.chandoo.org/forum/threads/create-an-array-of-numbers.13433/