列中每个不同值的序列号

时间:2015-10-22 08:14:41

标签: google-sheets

我有一个输入列,其中包含两个不同字母的序列。结果我想在图片上得到类似的东西。这个公式我将与ARRAYFORMULA一起使用以获得无限的行数。要获得BLOCK№,我试图使用=COUNTIFS($B$2:B2,"N"),但只有当我在列中手动复制公式时它才有效,但如果我这样做:

=ARRAYFORMULA(COUNTIFS(($B$2):(B2:B),"N"))

它不起作用。

如何在不需要手动复制的情况下复制此功能的行为?

Table Example

1 个答案:

答案 0 :(得分:0)

我建议编写一个脚本来填充Block No.。

我假设最顶层的字母从单元格input!A4开始,您想要单元格input!C5及以下的块号。转到电子表格的菜单栏,然后​​选择“脚本编辑器”。然后编写以下脚本:

//the main function
function writeBlocks() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('input');
  var numRows = sheet.getLastRow();
  var startRow = 4;
  var inputCol = 1;
  var outputCol = 3;
  var block = 0;

  //clear old Block Nos
  sheet.getRange(startRow, outputCol, numRows - 3, 1)
    .clearContent();

  //recalculate LastRow in case there are fewer new inputs than old outputs
  numRows = sheet.getLastRow();

  //get input data
  var input = sheet.getRange(startRow, inputCol, numRows - 3, 1)
    .getValues;

  //write output data
  for (var i = 0; i < input.length; i++) {
    block += input[i] == "N" ? 1 : 0;
    sheet.getRange(startRow + i, outputCol)
      .setValue(block);
  }
}

//create new menu
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({name: "Calculate blocks", functionName: "writeBlocks"});
  ss.addMenu("Custom functions", menuEntries);
}

全部保存,刷新电子表格,菜单栏上应该有一个新选项。当您选择该选项时,它将清除旧块号并根据当前输入生成新块号。希望这会有所帮助。