Google 电子表格函数可按行和列名称从范围中获取单元格
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()
可以帮忙?
为此,您可以使用 Google Apps 脚本编写自定义函数。查看此 documentation 了解更多详情。
您可以使用名称或 ID 访问价差 sheet 并获取值的范围(在您的情况下是一个单元格)。
希望对您有所帮助!
试试这个,你只需要设置范围:
=INDEX("Talbe",MATCH("foo","First Column",0),MATCH("idz04","First Row",0))
例如,如果您的 table 在 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)
}
然后您可以像这样调用 sheet 中的公式:
=LOOKUPGRID(A1:D4,"foo","idz04")
尝试编写自己的函数...
/**
* 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)
}
开始了:
=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: How to get a first (Nth) row/column from a range? (built-in functions)
我有一个范围
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()
可以帮忙?
为此,您可以使用 Google Apps 脚本编写自定义函数。查看此 documentation 了解更多详情。
您可以使用名称或 ID 访问价差 sheet 并获取值的范围(在您的情况下是一个单元格)。
希望对您有所帮助!
试试这个,你只需要设置范围:
=INDEX("Talbe",MATCH("foo","First Column",0),MATCH("idz04","First Row",0))
例如,如果您的 table 在 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)
}
然后您可以像这样调用 sheet 中的公式:
=LOOKUPGRID(A1:D4,"foo","idz04")
尝试编写自己的函数...
/**
* 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)
}
开始了:
=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: How to get a first (Nth) row/column from a range? (built-in functions)