К сожалению, я боюсь, что в Apps Script нет встроенной функции для этого.
Однако я попробовал вашу пользовательскую функцию со 100 значениями, и для ее запуска потребовалось <3 секунды. Я также запустил его с 1000 значениями, и мое время работы составило около 40 секунд. Это не идеально, но работает последовательно. Вот код, который я использовал: </p>
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var importFromSht = SpreadsheetApp.getActive().getSheetByName('Sheet1'); //sheet we are grabbing the values of
var importToSht = SpreadsheetApp.getActive().getSheetByName('Sheet2'); //sheet we are pasting our values
var importFromCompCol = 2; // Column (number) that has values to match on.
var importToCompCol = 2; // Column (number) that has values to match on.
var importFromCol = 1; // Column (number) that contains value that needs to be copied.
var importToCol = 1; // Column (number) to copy value to.
function customVlookup (){
var lastImportFromRN = importFromSht.getLastRow();
var lastImportToRN = importToSht.getLastRow();
var importFromCompArr = importFromSht.getRange(1, importFromCompCol, lastImportFromRN, 1).getValues();
var importToCompArr = importToSht.getRange(1, importToCompCol, lastImportToRN, 1).getValues();
var importFromArr = importFromSht.getRange(1, importFromCol, lastImportFromRN, 1).getValues();
var importToArr = [];
for (var i in importToCompArr) {
for (var j in importFromCompArr){
if (importToCompArr[i].toString() == importFromCompArr[j].toString()) {
importToArr.push(importFromArr[j]);
}
}
}
//Paste to column
importToSht.getRange(1,importToCol,importToArr.length,1).setValues(importToArr);
}
Другой и более эффективный подход заключается в использовании IMPORTRANGE (URL первого листа) для промежуточного листа, меняющего столбцы первого лист, чтобы затем сделать VLOOKUP на вашем втором листе. Это было бы гораздо эффективнее, чем делать это в скрипте приложений, так как он не работает в памяти, и вы избегаете проблемы превышения времени выполнения пользовательской функции.
В случае, если вы хотите сохранить его в качестве пользовательской функции скрипта приложения Здесь приведены некоторые предложения по документации о том, как повысить эффективность вашей функции.