Я так понял, вам нужно сделать PIVOT наоборот. Когда у меня был такой кейс, сделал себе по-быстрому такую функцию:
/**
* Разворачивает данные в плоскую таблицу
*
* @author Boew Grigory (ff.nspu@gmail.com)
* @param {Array} data Исходные данные
* @param {Boolean} [isRemoveNull=true] Удалять ли из выдачи пустые, нулевые и ложные значения
* @customfunction
*/
function unPivot(data, isRemoveNull=true) {
let colHeaders = [...(data[0])].slice(1);
let rowHeaders = data.slice(1).map(row=>row[0]);
let outData = [];
rowHeaders.forEach((rowHeader,ri)=>{
colHeaders.forEach((colHeader,ci)=>{
let value = data[1+ri][1+ci];
if(!isRemoveNull || value){
outData.push([rowHeader, colHeader, value]);
};
});
});
if(!outData.length){
return [[]];
};
return outData;
};
А в полученном массиве можно найти всё что угодно через ВПР.