在每个工作表中查找行,然后在匹配时跳转到单元格

时间:2018-11-18 01:22:35

标签: google-apps-script google-sheets google-sheets-api google-sheets-macros

正在尝试获取脚本以在工作表4中搜索值,其余工作表中的电子表格的范围为“ A2”,然后匹配。它跳到那张纸和那一行

让我的代码遍历所有工作表并获取每张工作表的最后一行。 但是,if函数和跳转到匹配的单元格无效。

感谢我可以获得的所有帮助(:

首次使用Google表格...

function Lookup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get Sheet
var sheet = ss.getSheets()[3];
//set row & column
var GCell = sheet.getRange(2, 1);
// read values from set row & column
var CValue = GCell.getValues();
Logger.log(CValue[0][0]);

//Loop all sheets
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]

//Get last row in each sheet
 var ShtID = sheet.getSheetId();
  var lastRow = sheet.getLastRow();

//var range = sheet.getRange("B2");
//Logger.log(range.getRowIndex());



var SchCell; 
for ( j = 1 ; j >= lastRow; j++){
   if(SchCell[j][1] === CValue){
    var Crow = SchCell.getRowIndex();
     ShtID.setActiveCell(ShtID.getRange(Crow, 1));
     Logger.log("Matched Row =" +Crow);
     return;
   }  
}
Logger.log("Last Row" + lastRow);
}

}

1 个答案:

答案 0 :(得分:1)

  • 您希望将索引3的工作表(“ Sheet5”)的“ A2”与除“ Sheet5”以外的每张工作表的“ B”列最后一行的值进行比较。
  • 当“ Sheet5”的“ A2”的值与“ B”列的最后一行相同时,您要激活该单元格。

如上所述,我了解您想要什么。如果我的理解是正确的,那么该修改如何?我认为您的情况有几个答案。因此,请将此视为其中之一。

修改点:

  • var ShtID = sheet.getSheetId()没有getRange()setActiveCell的方法,因为sheet.getSheetId()返回一个整数值。
  • SchCell没有值。
  • for ( j = 1 ; j >= lastRow; j++){,此for循环不会循环。

修改后的脚本:

function Lookup() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //Get Sheet
  var sheet = ss.getSheets()[3];

  //set row & column
  var GCell = sheet.getRange(2, 1);
  // read values from set row & column
  var CValue = GCell.getValues();
  Logger.log(CValue[0][0]);

  // Modified part
  var allsheets = ss.getSheets();
  for (var s = 0; s < allsheets.length; s++) {
    var sheet = allsheets[s];
    if (s != 3) {
      var values = sheet.getRange("B1:B").getValues().filter(String); // Retrieve values of column B
      if (values.length > 0) {
        var v = values[values.length - 1][0]; // Value of last row of column B
        var lastRow = "B" + values.length; // Last row of column B
        if (v == CValue[0][0]) {
          sheet.getRange(lastRow).activate();
          return true;
        }
      }
    }
  };
}

注意:

  • 在此修改的脚本中,当找到与“ Sheet5”的“ A2”相同的值时,将激活并聚焦第一张纸的单元格。
    • 在当前阶段,每张纸的几个单元不能同时激活和聚焦。

参考文献:

编辑:

  • 找到与“ Sheet5”的“ A2”匹配的单元格时,要激活第一张工作表中“ B”列的所有单元格。

如果我的理解是正确的,那该怎么办?请将修改后的部分修改为以下脚本。

// Modified part
var allsheets = ss.getSheets();
for (var s = 0; s < allsheets.length; s++) {
  var sheet = allsheets[s];
  if (s != 3) {
    var values = sheet.getRange("B1:B").getValues().filter(String);
    if (values.length > 0) {
      var ranges = values.reduce(function(ar, e, i) {
        if (e[0] == CValue[0][0]) {
          ar.push("B" + (i + 1));
        }
        return ar;
      }, []);
      if (ranges.length > 0) {
        Logger.log(ranges)
        sheet.setActiveRangeList(sheet.getRangeList(ranges));
        break;
      }
    }
  }
};