Google apps script 使用具有重复间隔的vlookup+;分裂

Google apps script 使用具有重复间隔的vlookup+;分裂,google-apps-script,google-sheets,spreadsheet,google-sheets-formula,google-sheets-query,Google Apps Script,Google Sheets,Spreadsheet,Google Sheets Formula,Google Sheets Query,我有一份清单,上面有购买代码和产品序列号,我想知道每种产品的购买价格。 在第二个列表中,我有一个列,其中包含购买代码、另一列中以逗号分隔的产品组的序列号,以及第三列中每个产品组的价格 我使用下面的公式,但当“E”列中的代码重复时,公式不起作用: =IF(HLOOKUP(B2;SPLIT(VLOOKUP(A2;$E$1:$F$1000;2;FALSE);", ";TRUE);1;FALSE)<>"#N/A";VLOOKUP(A2;$E$1:$G$5;3;FALSE);"") =IF(

我有一份清单,上面有购买代码和产品序列号,我想知道每种产品的购买价格。 在第二个列表中,我有一个列,其中包含购买代码、另一列中以逗号分隔的产品组的序列号,以及第三列中每个产品组的价格

我使用下面的公式,但当“E”列中的代码重复时,公式不起作用:

=IF(HLOOKUP(B2;SPLIT(VLOOKUP(A2;$E$1:$F$1000;2;FALSE);", ";TRUE);1;FALSE)<>"#N/A";VLOOKUP(A2;$E$1:$G$5;3;FALSE);"")
=IF(VLOOKUP(B2;拆分(VLOOKUP(A2;$E$1:$F$1000;2;FALSE);“,”真“;”假“)”N/A“VLOOKUP(A2;$E$1:$G$5;3;假);”)


我冒昧地为您所需编写了应用程序脚本代码,就是这样:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSheet();
  var data = ss.getRange("B2:B" + ss.getLastRow()).getValues(); // IDs
  var list = ss.getRange("F2:G" + ss.getLastRow()).getValues(); // ID List
  var prices = [];

  for (var i = 0; i < data.length; i++) { 
    for (var j = 0; j < list.length; j++){     
      if (list[j][0].indexOf(data[i][0]) >- 1){
        prices.push([list[j][1]]);
        break;
      }
    }
  }
  ss.getRange("C2:C" + ss.getLastRow()).setValues(prices);
}
函数myFunction(){
var ss=SpreadsheetApp.getActiveSheet();
var data=ss.getRange(“B2:B”+ss.getLastRow()).getValues();//ID
var list=ss.getRange(“F2:G”+ss.getLastRow()).getValues();//ID list
var价格=[];
对于(var i=0;i-1){
价格.推送([列表[j][1]);;
打破
}
}
}
ss.getRange(“C2:C”+ss.getLastRow()).setValue(价格);
}
它根据ID列表值和ID本身进行检查,它不使用
cod
值进行任何操作

您可以使用查询

=query(E:G,"select G where E='"&A2&"' and F contains '"&B2&"' limit 1 label G ''")
假设B列中的任何ID都不能是另一个ID的子字符串


我建议使用应用程序脚本,因为这样会使使用它更舒适,如果可以接受,我可以帮助您使用脚本本身。谢谢!很酷,阿莫莉娜。你能告诉我哪个触发器最适合我调用这个函数吗?(这是一个多用户使用的电子表格)您可以使用
onEdit()
触发器,每当对is进行更改时,它都会运行脚本,因此它会使用最新数据对其进行更新。解释有关触发器以及如何设置触发器的更多信息。