我有一个输入列,其中包含两个不同字母的序列。结果我想在图片上得到类似的东西。这个公式我将与ARRAYFORMULA
一起使用以获得无限的行数。要获得BLOCK№,我试图使用=COUNTIFS($B$2:B2,"N")
,但只有当我在列中手动复制公式时它才有效,但如果我这样做:
=ARRAYFORMULA(COUNTIFS(($B$2):(B2:B),"N"))
它不起作用。
如何在不需要手动复制的情况下复制此功能的行为?
答案 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);
}
全部保存,刷新电子表格,菜单栏上应该有一个新选项。当您选择该选项时,它将清除旧块号并根据当前输入生成新块号。希望这会有所帮助。