首页 文章

Google脚本搜索和返回单元格位置

提问于
浏览
2

我在使用我的第一个Google Script时遇到了一些麻烦,并希望得到一些帮助 .

目标:在多个工作表中搜索值,然后在找到匹配项时返回单元格的位置 .

我尝试过使用这个脚本:

/**
* 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;
}

但是它返回错误“TypeError:无法在对象中找到函数getValues”

我的值将定义为文本字符串,例如“ABCD”

我的范围将是多张纸的范围,例如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

预先感谢您的任何帮助 .

1 回答

  • 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());
    

相关问题