Мне нужно индексировать совпадения на основе двух столбцов и установить значения Data!I1:I
в столбец Tab N
.
=arrayformula(iferror( vlookup( G1:G & H1:H,{Data!G1:G&Data!H1:H,Data!I1:I},2,false)))
Формула работает, но мне нужно преобразовать ее в скрипт Google Apps.
Я попробовал, но получаю ошибку. searchRow
не является функцией.
const mainData = ss.getSheetByName("Data");
const tab = ss.getSheetByName("Tab");
const searchValues = mainSS.getRange("G1:H").getValues();
const targetMatch = tab.getRange("G1:H").getValues();
const matching = searchValues.map(searchRow =>{
const matchRow = targetMatch.find(r => r[0] == searchRow([0]))
return matchRow ? [matchRow([2])] : [null];
})
targetMatch.getRange("N1:N").setValues(matching);
Я понимаю, чего ты хочешь. Помните, что это не то место, где можно просить других выполнить работу за вас. Сообщения на этом сайте должны содержать вопросы и ответы. Вопрос должен касаться практической, подробной проблемы, уникальной для программирования. Ссылка. тур. Какая из ваших практических и детальных проблем, уникальных для программирования, мешает вам получить то, что вы ищете? Если вы не знаете, с чего начать, начните с чтения developers.google.com/apps-script/guides/sheets .
Вопрос обновлен сейчас.
Я думаю, что =arrayformula(iferror(vlookup(G1:G & H1:H,Tab!G1:G&Tab!H1:H,Tab!I1:I},2,false)))
это неправильно. Итак, я беспокоюсь, что вы ошиблись в формуле. Можете ли вы подтвердить это еще раз?
Спасибо за ответ. Что касается formula is currect
, когда вы поместили формулу показа =arrayformula(iferror(vlookup(G1:G & H1:H,Tab!G1:G&Tab!H1:H,Tab!I1:I},2,false)))
в ячейку, какой результат вы получили? Я думаю, что в вашей формуле только один }
, и он некорректно закодирован. Поэтому я беспокоюсь, что вы могли ошибиться. Приношу извинения за эту ситуацию.
Да вы правы. Сейчас он обновлен.
Спасибо за ответ. Из вашего обновленного вопроса я предложил ответ. Пожалуйста, подтвердите это. Если я неправильно понял ваш вопрос, прошу прощения.
В вашей ситуации как насчет следующей модификации?
const matchRow = targetMatch.find(r => r[0] == searchRow([0]))
searchRow([0])
должно быть searchRow[0]
. Это причина вашего текущего выпуска searchRow is not a function.
.return matchRow ? [matchRow([2])] : [null];
matchRow([2])
должно быть matchRow[2]
. Но у targetMatch
есть 2 столбца из const targetMatch = tab.getRange("G1:H").getValues();
. Итак, в этом случае возвращается неопределенное значение.Когда эти моменты будут отражены в сценарии, как насчет следующей модификации?
function myFunction() {
const sheetName1 = "Tab";
const sheetName2 = "Data";
// Retrieve sheets.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const [sheet1, sheet2] = [sheetName1, sheetName2].map(s => ss.getSheetByName(s));
// Retrieve values from both sheets.
const lastRow1 = sheet1.getLastRow();
const values1 = sheet1.getRange("G1:H" + lastRow1).getValues();
const values2 = sheet2.getRange("G1:I" + sheet2.getLastRow()).getValues();
// Create an object for searching.
const obj2 = new Map(values2.map(([g, h, i]) => [`${g}${h}`, i]));
// Create the result array.
const res = values1.map(([g, h]) => [obj2.get(`${g}${h}`) || null]);
// Put the result array to column "O" of "Tab" sheet as a sample.
sheet1.getRange(`O1:O${lastRow1}`).setValues(res);
}
При запуске этого сценария значения результатов помещаются в столбец «O». Потому что в вашей электронной таблице есть значения в столбце «N». Если вы хотите поместить значения в столбец «N», измените sheet1.getRange(`O1:O${lastRow1}`).setValues(res);
на sheet1.getRange(`N1:N${lastRow1}`).setValues(res);
.
Спасибо. Как мы можем объявить not match
вместо null
в разделе создания массива результатов? Если я добавлю "not match"
, res
тоже вернется к пустым строкам. Мне нужен ответ, только если совпадают оба диапазона, в противном случае верните not match
, где g
h
col имеет значение.
@Jebra По поводу твоего нового вопроса In the create the result array section, how can we declear not match instead of null? If i add "not match", the res return to empty rows too. I need response only if match both range otherwise return not match where g h col has value.
, я бы хотела тебя поддержать. Но я должен извиниться за мое плохое знание английского. К сожалению, я не могу понять ваш новый вопрос. Могу ли я спросить вас о деталях вашего нового вопроса?
Я имею в виду, что мне нужна проверка null
, если значение равно нулю, оно будет отображаться в виде текста ошибки в ячейках.
@Jebra Спасибо за ответ. Я должен еще раз извиниться за мое очень-очень плохое знание английского. Я до сих пор не могу понять i need a validation of null if the value is null, it will show as error text in the cells.
. Можете ли вы предоставить примеры ожидаемых входных и выходных значений? Под этим я хотел бы попытаться понять ваш новый вопрос.
В чем вопрос? Что мешает вам написать функцию в Google Apps Script самостоятельно?