这是一个多部分的问题:我在一个明确的陈述中简明扼要地解释它。我会在收到一些反馈意见后尝试清理它:
在Google文档中,我想搜索不同的标签(在同一个电子表格中),以查找包含特定数据的单元格。数据可能会四处移动,因此无法使用静态单元格引用。
//如果' Sheet2'我的电子表格包含以下内容...... A B C D 1 - - - - 2 - foo bar 6 3 - - - -
// ...然后一些神奇的函数会返回C2 = getCell(' Sheet2'," bar")
现在我们已经获得了这个单元格,我希望在相同的行上获取相邻单元格的值。
//这将返回" foo": = getLeft(getCell(' Sheet2'," bar"))
//这将返回6 = getRight(getCell(' Sheet2'," bar"))
我能够获得满足上述任务的功能。但是,它很轻松!我在大约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 :(得分: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)
无需编写脚本!