Google sheets 限制查询一个结果,其中有2个值匹配
我试图在两个长列中查询代理的名称,问题是名称在两个表中重复,一个是生产力的总和,另一个是利用率的总和 问题是,当我查询列时,它会返回生产力和利用率的数字 如何使查询仅搜索生产力和利用率Google sheets 限制查询一个结果,其中有2个值匹配,google-sheets,Google Sheets,我试图在两个长列中查询代理的名称,问题是名称在两个表中重复,一个是生产力的总和,另一个是利用率的总和 问题是,当我查询列时,它会返回生产力和利用率的数字 如何使查询仅搜索生产力和利用率 链接在这里:在这种情况下,应用程序脚本将是一个更好的解决方案。以下代码的工作原理如下: 从列D和列A中获取名称 对于D列的每个名称,它将与A列的每个名称进行比较(即2) 如果名称一致(第一个),它将检查列A名称的背景色(第二个If),以累积总生产量和总使用量 到达A列末尾后,将D中每个名称的值写入Total Pr
链接在这里:在这种情况下,应用程序脚本将是一个更好的解决方案。以下代码的工作原理如下:
函数onOpen(){//都将运行
//获取活动的电子表格和工作表
设sprsheet=SpreadsheetApp.getActiveSpreadsheet();
let sheet=sprsheet.getActiveSheet();
var lastRow=sheet.getLastRow();
var getNames=sheet.getRange(3,1,lastRow).getValues();//从第2行第1列到最后一行的名称
var totalNames=sheet.getRange(“D4:D5”).getValues();//更改更多名称的范围
让prodColor='#f2f4f7';//图形中名称背景色的十六进制代码
设utilColor='#cfe2f3'//
对于(var i=0;i
注意:您必须手动运行代码,并在第一次运行时接受权限。之后,每次打开工作表时,它都会自动运行。代码运行和在工作表上反映更改可能需要几秒钟的时间
为了更好地理解循环和二维数组,我建议您看看
参考资料:
通过以下操作,您可以了解有关应用程序脚本和工作表的更多信息 嗨,你的问题解决了吗?因为我在不同的单元格中看到了生产力和利用率值。不,很遗憾,这只是正常的查询。我需要一个关于生产率和利用率的公式。好的,我还看到这些表是连续重复的。我想你希望每个公式都能搜索到所有公式,区分生产率和利用率,对吗?如果它们位于不同的列上,而不是位于同一列中,那么这将简单得多。否则应用程序脚本将是这里的最佳解决方案。是的,你说得对。很遗憾,我没有那么好的编码经验,无法从应用程序脚本开始。你有什么学习资源可以让我达到非常高的noob水平吗?非常感谢Jescaneles
function onOpen() { //Will run every time you open the sheet
//Gets the active Spreadsheet and sheet
let sprsheet = SpreadsheetApp.getActiveSpreadsheet();
let sheet = sprsheet.getActiveSheet();
var lastRow = sheet.getLastRow();
var getNames = sheet.getRange(3, 1, lastRow).getValues(); //Names from row 2, col 1, until the last row
var totalNames = sheet.getRange("D4:D5").getValues(); //Change the range for more names
let prodColor = '#f2f4f7'; //hexadecimal codes of the background colors of names in A
let utilColor = '#cfe2f3'; //
for (var i = 0; i < totalNames.length; i++) {
var totalProd = 0, totalUtil = 0; //Starts at 0 for each name in D
for (var j = 0; j < getNames.length; j++) {
if (totalNames[i][0] == getNames[j][0]) {
if (sheet.getRange(j + 3, 1).getBackgroundObject().asRgbColor().asHexString() == prodColor) { //if colors coincide
totalProd += sheet.getRange(j + 3, 2).getValue();
} else if (sheet.getRange(j + 3, 1).getBackgroundObject().asRgbColor().asHexString() == utilColor) {
totalUtil += sheet.getRange(j + 3, 2).getValue();
}
}
}
sheet.getRange(i+4, 5, 1 ,2).setValues([[totalProd, totalUtil]]);
}
}