我正在尝试生成一般形式的整数数组
n*0
n*1
n*2
n*3
但第一个数字需要是一(1),而不是零。
此公式有效:
=IF((ROW(INDIRECT("1:10"))-1)*n=0,1,(ROW(INDIRECT("1:10"))-1)*n)
但是我希望有一种更有效的方法,使用工作表函数。
答案 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)
并复制下来。例如:
答案 2 :(得分:0)
您可以使用IF
:
MAX
功能
如果您希望能够在任何单元格中启动,请使用以下公式:
=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/。