簡體   English   中英

Google Spreadsheets函數通過行和列名稱從范圍中獲取單元格

[英]Google Spreadsheets function to get a cell from a range by row and col name

我有范圍

      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()嗎?

編輯:如果我能夠得到result_range我可以以某種方式雇用LOOKUP

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

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

試試這個,您只需要設置范圍:

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

為此,您可以使用Google Apps腳本編寫自定義函數。 查看此文檔以了解更多詳細信息。

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

希望有幫助!

它去了:

=INDEX(ObjednavkyData, 
   // Find the offset of "vesela01" in the 1st column
   MATCH("vesela01",
     OFFSET((ObjednavkyData),0,0,
        MAX(ARRAYFORMULA(ROW(ObjednavkyData)))  // Num of rows in the range
     , 1)
   ,0), 
   // Find the offset of "z03" in the 1st row
   MATCH("z03", 
     OFFSET(ObjednavkyData, 0 , 0, 1)  // First row
   , 0)) 

不是很整潔:P
另請參閱Google Spreadsheets:如何從范圍中獲取第一行(第N行)? (內置功能)

試圖寫我自己的功能...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM