在 Google 表格中多次重复一系列项目

问题描述 投票:0回答:5

我想多次重复项目范围(提供值)。

例如

我有这个在sheet1!A

Detroit
Texas
Utah
California 

现在我想重复它们 3 次以获得 Sheet2!A 处的输出,例如:

Detroit
Texas
Utah
California 
Detroit
Texas
Utah
California 
Detroit
Texas
Utah
California 

公式应该是什么?

我得到了这个公式:

https://www.excel-bytes.com/how-to-repeat-a-range-of-items-multiple-times-in-excel/

但它在 Google 表格中不起作用

google-sheets google-sheets-formula repeat
5个回答
2
投票

仅当您将其粘贴到同一张纸A5并将其向下拖动时才有效:

=IF(ISBLANK(INDIRECT(ROW(A1))),INDIRECT((ROWS($A$1:A4)-(COUNTA(A:A)-2))),A1)

否则,您可以使用:

=QUERY({Sheet1!A1:A4;Sheet1!A1:A4;Sheet1!A1:A4},"select *",0)

或:

=TRANSPOSE(SPLIT(REPT(JOIN(",",Sheet1!A1,Sheet1!A2,Sheet1!A3,Sheet1!A4&","),3),",",1))

或:

=TRANSPOSE(SPLIT(REPT(Sheet1!A1&","&Sheet1!A2&","&Sheet1!A3&","&Sheet1!A4&",",3),",",1))

或:

function REPEAT(range,amount,header) {
  var output = [];

  // check if range is cell
  if(typeof range == 'string') {
    for(var i=0; i<amount; i++) {
      output.push([range]);
    }
    return output;
  } else {
    // check if header is wanted
    var value;
    if(header == 1) {
      output.push(range[0]);
      value=header;
    } else if(header == "") {
      value=0;
    } else {
      value=0;
    }  
    for(var i=0; i<amount; i++) {
      for(var j=value, jLen=range.length; j<jLen; j++) {
        output.push(range[j]);
      }
    }    
    return output;
  }  
}

=REPEAT(Sheet1!A1:A4,3,0)

2
投票

您可以使用数组文字创建垂直数组

{;}
。您可以通过使用
REDUCE
创建循环来自动化此过程。

=LAMBDA(rg_to_repeat,times,
  REDUCE(
    rg_to_repeat,
    SEQUENCE(times-1),
    LAMBDA(a,c,{a;rg_to_repeat})
  )
)(A1:A4,4)
  • 首先,我们需要知道需要迭代/重复的次数。除去第一个,我们还有
    times-1
  • 然后我们使用
    SEQUENCE
    创建一个从 1 到 3 的数字数组序列(如果
    times
    是 4)
  • 对于数组中的每个数字,
    REDUCE
    ,首先使用
    LAMBDA
    调用提供的
    initial value
    函数,然后使用前一个
    a
    累加器和
    c
    当前值,即数字 1(2 和 3)在接下来的迭代中)
  • 对于每次迭代,该函数将前一个
    a
    累加器与
    r
    an
    g
    e
    to
    repeat
    {a;rg_to_repeat}

优点:

  • 甚至适用于 2D 数组。
  • 无字符串操作。
  • 自动填充数组公式。

缺点:

  • 较新的函数对迭代和内存使用有人为限制

0
投票

我不妨添加这个作为答案:

=IF(ISBLANK(INDIRECT("Cities!A"&ROW(A2))),INDIRECT("Repeat!A"&(ROWS($A$2:A2)-(COUNTA(Cities!A:A)-2))),Cities!A2)

在 Google 表格和 Excel 中运行良好。

这也有效,并且在 Excel 中可能更可取,以避免使用间接:

=IF(ISBLANK(INDEX(Cities!A:A,ROW(A2))),INDEX(Repeat!A:A,ROWS($A$2:A2)-(COUNTA(Cities!A:A)-2)),Cities!A2)

0
投票

您可以从 Row1 向下复制:

=offset(Sheet1!A$1,mod(row()-1,4),)

适合您的数量,每组四件。


0
投票

Google 表格不断发展...

以下公式可堆叠/重复 4 行 x 3 列的单元格数组,以创建 48 行 x 3 列的数组。

KPI_LEVELS 是一个命名范围,引用另一张工作表中 4 行 x 3 列数据表的左上角。 OFFSET / MOD 4 使数组重复 4 行源数组以达到所需的行数,在本例中为 48:

=MAKEARRAY(48,3, LAMBDA (r,c, OFFSET(KPI_LEVELS, MOD(r-1,4), c)))
© www.soinside.com 2019 - 2024. All rights reserved.