Excel – 需要函数重复列表(复杂公式)
我正在尝试为我的公司设置一个“自动生成”工作表,但是难以使这个function正常工作。
我需要的是在另一个列表中重新填充一个SKU列表,但是一旦列表结束,就能够重新开始采用相同的值。 这将被转换为CSV并用于在我们的网站上导入数据。
例:
原始列表
- 苹果
- 香蕉
- 橙子
- 桃子
我需要这个列表来填充另一个列表中的单元格,但是重复相同的值。 见下文。
新列表
- 苹果
- 香蕉
- 橙子
- 桃子
- 苹果
- 香蕉
- 橙子
- 桃子
然后一旦列表重复一次就停止。 如果列表中有5个项目,则应该在10个项目之后停止。 如果列表中有8个项目,则应该在16之后停止。只要列表重复,顺序无关紧要。
我试过IF
, VLOOKUP
, HLOOKUP
, COUNTIF
, MATCH
, INDEX
,但是没有那些或者我能想到的任何组合都已经完成了。 一旦列表结束,我只想从列表的开头开始取值。
感谢您的任何帮助!
该公式为“原始列表”和“新列表”范围的位置提供了灵活性。
试试这个公式:
=T(INDEX(SrcCol, -1+SrcRow+ROWS($TrgRow:TrgRow) -IF(ROUNDUP(ROWS($TrgRow:TrgRow)/COUNTA(SrcCol),0)=2,COUNTA(SrcCol),0)))
哪里:
SrcCol : “原始列表”所在的列
SrcRow : “原始列表”开始的行
TrgRow : “结果”列表的起始行
该公式假定原始列表之间没有空白单元格。
让我们尝试原始列表从B6
开始的公式,我们希望新列表从D3
开始。 然后在D3
input这个公式,并拷贝到最后一行(即第10行):
在上面的公式中replace如下:
SrcCol = $B:$B
; SrcRow = 6
, TrgRow = 3
=T(INDEX($B:$B, -1+6+ROWS($3:3) -IF(ROUNDUP(ROWS($3:3)/COUNTA($B:$B),0)=2,COUNTA($B:$B),0)))
编辑:
如果原始列表是一个公式的结果,并有单元格返回一个空白值(ie =“”),那么我们有两个select:
-
用这个
SUMPRODUCT(--($B:$B<>"")*COLUMN($A:$A))
replace原始公式中的COUNTA($B:$B)
SUMPRODUCT(--($B:$B<>"")*COLUMN($A:$A))
并在D3
input结果公式:=T(INDEX($B:$B, -1+6+ROWS($3:3) -IF(ROUNDUP(ROWS($3:3)/ SUMPRODUCT(--($B:$B<>"")*COLUMN($A:$A)),0)=2, SUMPRODUCT(--($B:$B<>"")*COLUMN($A:$A)),0)))`
-
用这个
SUM(--($B:$B<>""))
replace原公式中的COUNTA($B:$B)
,并在D3
input结果公式为FormulaArray
:=T(INDEX($B:$B, -1+6+ROWS($3:3) -IF(ROUNDUP(ROWS($3:3)/ SUM(--($B:$B<>"")),0)=2, SUM(--($B:$B<>"")),0)))
inputFormulaArrays
同时按下 CTRL + SHIFT + ENTER , 如果input正确 ,您将 在公式周围 看到 {
和 }
这是一个有趣的问题,我有一个解决scheme,但可能有一个更优雅的方式来做到这一点:
=IF(ROW()-1<=COUNTA($A$2:$A$5),INDEX($A$2:$A$5,ROW()-1),IF(ROW()-1<=(COUNTA($A$2:$A$5)*2),INDEX($A$2:$A$5,ROW()-1-COUNTA($A$2:$A$5)),""))
笔记:
- 这假设你想要复制的列表是在A2:A5
- 它也假设你想复制的范围从第2行开始(因此ROW()-1)
- 这个论坛会留下一个“”(单元格中的空引号,其行数大于要复制的列表数量的两倍),我不认为如果你想使用VBA
截图
我build议你可以'使用一个命名的范围或类似'参数化'-1,如果你移动的东西,你不必改变-1。