2014-10-02 61 views
0

這是一個多部分問題:我無法在一個明確的語句中簡潔地解釋它。我會嘗試得到一些反饋後,把它清理乾淨:在另一個標籤中查找單元格

  1. 在谷歌文檔,我想尋找不同的選項卡(在同一個電子表格),以發現其中包含特定數據的單元格。數據可能會移動,導致無法使用靜態單元格引用。

    //如果我的電子表格的 'Sheet2中' 包含以下... ABCD 1 - - - - 2 - 富杆6 3 - - - -

    //...then一些神奇的功能將返回C2 = getCell('Sheet2',「bar」)

  2. 現在我們已經有了這個單元格,我想要獲取相同行上的相鄰單元格的值。

    //這將返回 「foo」 的: = getLeft(getCell( 'SHEET2', 「條」))

    //這將返回6 = GetRight時(getCell( 'SHEET2',「 「))

我能夠得到一個滿足上述任務的函數。但是,它是痛苦緩慢!我在大約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; 
} 

回答

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將顯示與MATCH()一個1.

然後,使用INDEX()來查找在任一側上的單元格的內容:

左:

=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) 

無需腳本!

相關問題