如何将一列中的非数字值乘以相应列中的数字来编译列表?

时间:2015-11-25 19:05:56

标签: google-sheets

我有一个Google表单,要求人们输入他们的姓名并选择110之间的数字。该表单在表格中填充响应,如下所示:

Name1                    3
Name2                    5
Name3                    7
Name4                    1
ETC.

我需要编译这些名称的列表,其中包括重复的名称,与他们选择的数字一样多次。像这样:

Name1
Name1
Name1
Name2
Name2
Name2
Name2
Name2
ETC.

这可能吗?

我的一些列表变得非常长,并且手动将它们放入列表中非常耗时且容易出错。

4 个答案:

答案 0 :(得分:2)

假设col A中的名称和B中的数字,另一种方法是使用此公式:

=ArrayFormula(transpose(split(Join(char(9), rept(A2:A&char(9), B2:B)), char(9))))

答案 1 :(得分:0)

这是一个应该有用的脚本。

修改 进行一些更改以控制列。

此版本指定列B(名称)和列D(数字)

function onOpen() {

  SpreadsheetApp
    .getUi()
    .createMenu( 'Multiply Names' )
    .addItem( 'Multiply names', 'multiplyNames' )
    .addToUi();

} // onOpen 


function multiplyNames() {

  // get values from this sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var names = sheet.getRange('B:B').getValues();
  var numbers = sheet.getRange('D:D').getValues();

  // create new sheet
  var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();

  // put names on new sheet
  var totalNames = 0;

  for ( var i=0; i<numbers.length; i++ ) {
    if ( !isNaN( numbers[i][0] ) ) {

      for ( var j=0; j<numbers[i][0]; j++ ) {
        newSheet
          .getRange( totalNames + 1, 1 )
          .setValue( names[i][0] );

        totalNames++;
      }

    }
  }

}

Example Spreadsheet here

您可以通过更改以下行中的B和D来更改列:

var names = sheet.getRange('B:B').getValues();
var numbers = sheet.getRange('D:D').getValues();

要将脚本添加到电子表格中:

  1. 点击“工具”菜单,然后选择“脚本编辑器...”
  2. 删除所有内容并将此脚本粘贴到
  3. 保存脚本
  4. 重新加载电子表格
  5. 将会有一个名为“Multiply Names”的新菜单项。在表单填充的工作表上使用它。它将创建一个名称相乘的新工作表。

    如果您有任何疑问,请告诉我。

答案 2 :(得分:0)

首先,创建两个逗号分隔的列表(每个列表在一个单元格中)。一个用于名称,一个用于名称的出现。左边 和-2从列表中删除最后一个“,”。

= arrayformula(左(连接(过滤器(A2:A,A2:A&lt;&gt;“))&amp;”,“),len(连接(过滤器(A2:A,A2:A&lt;&gt;”) )&amp;“,”)) - 2))

= arrayformula(left(concatenate(filter(B2:B,B2:B&quot;“”)&amp;“,”),len(连接(过滤器(B2:B,B2:B&lt;&gt;“) )&amp;“,”)) - 2))

然后在您希望开始最终列表的位置添加以下公式。 D2引用逗号分隔名称列表 从上面的第一个公式。 D3参考上面第二个公式的出现列表。 SPLIT创建数组 和REPT重复创建的字符串。

= TRANSPOSE(SPLIT(JOIN(“,”,ARRAYFORMULA(REPT(SPLIT(D2,“,”)&amp;“,”,split(D3,“,”)))),“,”))< / p>

答案 3 :(得分:0)

为每一行创建一个分隔列表:

=分裂(REPT(A1&安培; “;”,B1), “;”)

=分裂(REPT(A2&安培; “;”,B2), “;”)

然后在一个单独的列中,您想要转置该数组,以便将它们列在一列中:

=转置(分裂(合并( “;”,C1:C2), “;”))