Если вам нужна формула, вы можете попробовать
=FILTER(
A2:A,
ISNA(MATCH(A2:A,B2:B4,0)),
ROW(A2:A)<MIN(ARRAYFORMULA(IFERROR(MATCH(B2:B4,A:A,0))))
)
Если вам нужен сценарий, вы можете использовать основной подход
/**
*
* @param {Array.<Array.<object>>} arr data
* @param {Array.<object>} list the list for comparing
* @param {number} colIndex The column of the data for comparing
*/
function filterUntilAnyOfList_(arr, list, colIndex) {
var res = [];
arr.some(function(row) {
if(list.indexOf(row[colIndex]) === -1){
res.push(row);
return false;
}
return true;
});
return res.length ? res : '';
}
Для функции в вашем проекте это будет
/**
* Action
*/
function userAction() {
var data = SpreadsheetApp.getActive()
.getRange('Filter!A2:A')
.getValues();
var list = SpreadsheetApp.getActive()
.getRange('Filter!B2:B3')
.getValues()
.map(function(row) {
return row[0];
});
Logger.log(filterUntilAnyOfList_(data, list, 0));
}
Для пользовательской формулы ее тоже можно использовать
/**
* @customformula
*/
function INLIST(data, list, col) {
data = Array.isArray(data) ? data : [[data]];
list = (Array.isArray(list) ? list : [[list]]).map(function(row) {
return row[0];
});
return filterUntilAnyOfList_(data, list, col - 1);
}
Мой образец
Получите ваш выбор!