0

我有一個範圍谷歌電子表格功能通過ROW和COL名

 idz01 idz04 ida02 
foo  a  1  b 
bar  c  3  8 
baz  8  2  g 

獲取某個範圍內的單元格,我想從這個範圍獲取值,就像這樣:

SOME_FUNCTION(rangeID, 'foo', 'idz04') 

到得到1等或理想,讓細胞:

INDIRECT(SOME_FUNCTION(rangeID, 'foo', 'idz04')) 

或此類。

有沒有這樣的東西?可以使用GETPIVOTDATA()嗎?

編輯: 我能以某種方式採用LOOKUP,如果我能得到result_range

LOOKUP("foo", DataRange, 
    FIRST_COL(
     OFFSET(DataRange, 
      MATCH("idz04", FIRST_ROW(DataRange), 0) 
     ) 
    ) 
) 

只是,我沒有FIRST_ROW()FIRST_COL() ...也許FILTER()可以幫助?

回答

1

爲此,您可以使用Google Apps腳本編寫自定義功能。查看documentation瞭解更多詳情。

您可以使用名稱或ID訪問電子表格並獲取值的範圍(在您的情況下是單元格)。

希望有幫助!

3

試試這個,你只需要設置範圍:

=INDEX("Talbe",MATCH("foo","First Column",0),MATCH("idz04","First Row",0)) 

例如,如果你的表是在範圍A1:D4,用途:

=INDEX(A1:D4,MATCH("foo",A:A,0),MATCH("idz04",1:1,0)) 

您還可以使用命名範圍


要獲得第一列和行自動使用這個公式:

=INDEX(data,MATCH("foo",INDIRECT(CHAR(64+COLUMN(data))&":"&CHAR(64+COLUMN(data))),0),MATCH("idz04",INDIRECT(COLUMN(data)&":"&COLUMN(data)),0)) 

要通過腳本來完成,使用此代碼:

function LOOKUPGRID(data, rowHeader, colHeader) { 
    for (var i = 0; i<data.length;i++) { 
    if (data[i][0] === rowHeader) { 
     for (var j = 0; j<data[0].length;j++) { 
     if (data[0][j] === colHeader) { 
      return (data[i][j]); 
     } 
     } 
    } 
    } 
    return (null) 
} 

然後,您可以調用公式中的表是這樣的:

=LOOKUPGRID(A1:D4,"foo","idz04") 
+0

這是相當不錯的。我能否自動獲得第一列和第一行?所以我不必減去範圍的偏移量:'MATCH(「z04」,1:1,0)-1)' –

+0

明白了,看另一個答案。 –

0

試圖寫我自己功能...

/** 
* Returns [Range] the cell value at coordinates determined by the values first row (colHeader) and first column (rowHeader) in given range. 
*/ 
function LOOKUP_GRID(range, colHeader, rowHeader){ 
    for(var col = range.getWidth()-1; col--; col >= 0) 
    if(range.getCell(1, col).getValue() === colHeader) 
     break; 
    for(var row = range.getHeight()-1; row--; row >= 0) 
    if(range.getCell(row, 1).getValue() === rowHeader) 
     break; 

    if(col === -1 || row === -1) 
    return null; 
    else 
    return range.getCell(row, column) 
}