在另一个标签中查找单元格

时间:2014-10-02 01:23:18

标签: google-apps-script google-sheets

这是一个多部分的问题:我在一个明确的陈述中简明扼要地解释它。我会在收到一些反馈意见后尝试清理它:

  1. 在Google文档中,我想搜索不同的标签(在同一个电子表格中),以查找包含特定数据的单元格。数据可能会四处移动,因此无法使用静态单元格引用。

    //如果' Sheet2'我的电子表格包含以下内容......      A B C D 1 - - - - 2 - foo bar 6 3 - - - -

    // ...然后一些神奇的函数会返回C2 = getCell(' Sheet2'," bar")

  2. 现在我们已经获得了这个单元格,我希望在相同的行上获取相邻单元格的值。

    //这将返回" foo": = getLeft(getCell(' Sheet2'," bar"))

    //这将返回6 = getRight(getCell(' Sheet2'," bar"))

  3. 我能够获得满足上述任务的功能。但是,它很轻松!我在大约100多个地方使用该功能,因此每次更改内容时都会计算工作表超时。

    有人可以建议如何获得相同的功能,但性能要好得多吗?

    function getCell( sheetname, item, row_offset, default_string )
    {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);
      var lastrow = sheet.getLastRow();
      var lastcol = sheet.getLastColumn();
      for( var c = 1; c <= lastcol; c++ )
      {
        for( var r = 1; r <= lastrow; r++ )
        {
          var range = sheet.getRange(r, c);
          if( range.getValue() == item )
          {
            //item found! See if we can get the requested cell...
            c = c + row_offset;  //adjust column using given offset
            if( c < 1 || c > lastcol )
              return "E.offset";
            else
              return sheet.getRange(r,c).getValue();
          }
        }
      }
      return default_string;
    }
    

1 个答案:

答案 0 :(得分:0)

您可以在数据范围之前添加行和列,如下所示:

     A    B    C    D    E    F    G
1                                  "bar"
2         -    -    -    -         
3         -    foo  bar  6
4         -    -    -    -

你有一个单元格,你有你正在寻找的单元格内容,让我们说在G1。在单元格A2中,您可以放置​​公式:

=COUNTIF(B2:E2,$G$1)

这将检查行A以查找单元格G1上的匹配项。填写A行中的其他单元格,单元格A3将显示“1”。

对单元格B1使用类似的公式:

=COUNTIF(B2:B4,$G$1)

填满整排。单元格D1将显示1。

然后,使用INDEX()和MATCH()来查找两边单元格的内容:

左:

=INDEX($B$2:$E$4,MATCH(1,$A$2:$A$4,0),MATCH(1,$B$1:$E$1,0)-1)

右:

=INDEX($B$2:$E$4,MATCH(1,$A$2:$A$4,0),MATCH(1,$B$1:$E$1,0)+1)

无需编写脚本!