我在使用我的第一个Google脚本时遇到了一些问题,并希望得到一些帮助。
目标:搜索多个工作表以获取值,然后在找到匹配项时返回单元格的位置。
我尝试过使用这个脚本:
/**
* Finds a value within a given range.
* @param value The value to find.
* @param range The range to search in.
* @return A range pointing to the first cell containing the value,
* or null if not found.
*/
function find(value, range) {
var data = range.getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
if (data[i][j] == value) {
return range.getCell(i + 1, j + 1);
}
}
}
return null;
}
然而它返回错误&#34; TypeError:无法在对象中找到函数getValues&#34;
我的值将被定义为文本字符串,例如&#34; ABCD&#34;
我的范围是多张纸的范围,例如sheet1!A1:C4,sheet2!A1:C4
该函数应返回查找值
的工作表,列和行目前我正在使用iferror索引匹配循环公式一次一页地搜索工作表(我使用间接作为我的范围是可变的)但是想要一个脚本来使这更容易和更快。
=IFERROR(index(INDIRECT(Sheet1!A:A),
iferror(MATCH(A2,INDIRECT(Sheet1!B:B),0),
iferror(MATCH(A2,INDIRECT(Sheet1!C:C),0),
...ETC
提前感谢您的帮助。
答案 0 :(得分:1)
试试这个:
function find(value, range) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = range.split("!")[0];
var A1Ref = range.split("!")[1];
var activeRange = ss.getSheetByName(sheet).getRange(A1Ref);
var data = activeRange.getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
if (data[i][j] == value) {
return (ss.getSheetByName(sheet).getRange(i + 1, j + 1));
}
}
}
return null;
}
这将返回范围。您可以更改该行以获取A1Notation:
return (ss.getSheetByName(sheet).getRange(i + 1, j + 1).getA1Notation());