2016-12-21 50 views
0

我正在尝试为我的公司设置一个“自动生成”工作表,但难以使这一个功能正常工作。Excel - 需要重复列表的功能(复杂公式)

我需要的是要在另一个列表中重新填充SKU的列表,但是一旦列表结束后能够再次开始采用相同的值。这将被转换为CSV并用于在我们的网站上导入数据。

例子:

原版

  • 苹果
  • 香蕉
  • 橙色

我需要这个列表来填充另一个列表中的单元格,但是然后复制相同的值。见下文。

新的列表

  • 苹果
  • 香蕉
  • 橙色
  • 苹果
  • 香蕉
  • 橙色

然后停止一旦列表重复一次。如果列表中有5个项目,则应在10个项目后停止。如果列表中有8个项目,则它应该在16之后停止。只要列表重复,顺序无关紧要。

我已经试过IFVLOOKUPHLOOKUPCOUNTIFMATCHINDEX,但没有那些或那些我能想到的都能做到这一点的任意组合。我只想在列表结束后开始从列表的开始处获取值。

谢谢你的帮助!

+0

这样的想法是自动生成列表中包含每个项目两次和两次? VBA解决方案是可以接受的,还是你想避免这种情况? – Werrf

+0

我喜欢避免使用VBA,因为我需要它尽可能少的额外工作。 VBA往往变得复杂,我不想解释如何使用它。只要在指定单元格中进行了唯一更改,公式就可以工作。 – Bschacht

+0

需要另外两条评论 – Bschacht

回答

0

这个公式提供了“原版”的位置和“新目录”范围的灵活性。

试试这个公式:

=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中输入此公式并向下复制直到最后一行(即行10):

更换以下在上式中:

SrcCol = $B:$B; SrcRow = 6TrgRow = 3

=T(INDEX($B:$B, 
-1+6+ROWS($3:3) 
-IF(ROUNDUP(ROWS($3:3)/COUNTA($B:$B),0)=2,COUNTA($B:$B),0))) 

enter image description here

编辑:

如果原版是一个公式的结果,并且具有细胞返回空值(即=“”),那么我们有两个选择:

  1. 原来的公式中替换COUNTA($B:$B)与此SUMPRODUCT(--($B:$B<>"")*COLUMN($A:$A))D3输入所得到的公式:

    =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)))` 
    
  2. 原来的公式中替换COUNTA($B:$B)与此SUM(--($B:$B<>""))D3输入所得到的公式作为FormulaArray

    =T(INDEX($B:$B, 
    -1+6+ROWS($3:3) 
    -IF(ROUNDUP(ROWS($3:3)/ 
    SUM(--($B:$B<>"")),0)=2, 
    SUM(--($B:$B<>"")),0))) 
    

FormulaArrays被输入按下CTRL + SHIFT + ENTER同时,你将看到{}周围的公式,如果输入正确

+0

这一个也很好,虽然我不明白它。具体为什么你有公式中的+1和-6值?我现在遇到了另一个问题 - 即使单元格中可能存在公式,如何让这些公式忽略空白值。例如,B10的值为空(“”),但单元格中可能有一个公式。 – Bschacht

+0

请参阅编辑公式结果为空白(即=“”) – EEM

+0

非常好。这正是我需要的。非常感谢你! – Bschacht

1

这是一个有趣的问题,我有一个解决办法,但可能有这样做的更优雅的方式:

=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)
  • forumla留下一个“”(行号中的空引号,其行号大于要复制的列表计数的两倍)。我不认为你可以突破这个,除非你想用VBA

截图enter image description here

我想你可以“参数化” -1使用named range或相似,这样你不建议如果你移动东西,你不得不改变-1。

+0

...........非常聪明............ –

+0

我对你计算出来的速度印象深刻。我花了半天的时间试图让它工作。我不太熟悉ROW,但它似乎解决了我的问题。谢谢! – Bschacht

+0

如果我可以提出另一个问题。当你说'parameterise'时,你的意思是指定一个-1值的单元格吗?或者只需重命名原始列表,但在公式中保留-1? – Bschacht