我有简单循环的想法,例如,如果我在“A1”=“c”中有一个单元格值,并且我想要在“B:B”中匹配另一组值。
var lastRow = targetSheet.getLastRow();
var match = sheet.getRange("A1").getValue();
var dataRange = targetSheet.getRange(B1:B5).getValues(); //doubt here too
for(var i=0;i<dataRange.length;i++) {
if(dataRange[i][0] == match)
{ Do something }
}
A B
------------
1 c x
2 c
3 b
但是,如果我有多个要匹配的值,我对如何执行相同操作的想法非常少。
A B
1 z x
2 x c
3 c b
4 v
5 b
感谢任何帮助!
答案 0 :(得分:3)
如果我理解正确,你想循环遍历列A
,如果那里有设定值,你想在列B
中寻找相同的值。这是一个循环内部循环的简单问题。我们假设您有1个数组中的2列
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet()
var values = sheet.getRange(1, 1, sheet.getLastRow(), 2).getValues() //this will get columns A and B until the last row with data into a 2D array
var i, ii;
for (i = 0; i < values.length; i++) {
if (values[i][0] == '') break; // if first column is empty we stop looking for the next one, you can get rid of this
for (ii = 0; ii < values.length; ii++) {
if (values[ii][1] == '') break; //if last entry reached we stop, same as before
if (values[i][0] == values[ii][1]) {
/* This is the part where you do what you want
to do when you find a match, for example change background to red */
sheet.getRange(ii + 1, 2).setBackground('red')
}
}
}
}
编辑:根据请求者我修改了该功能。这基本上是你if
语句中的一个区别,因为我们现在只关心检查B列中是否存在某些内容,我们在第一个循环中不再需要if
。我放在那里的是你打算让A组中有3个条目的情况,但是B列中有7个条目。反向情况也是如此。否则,您可以在if
语句后立即删除for
语句。之所以这样做是因为getLastRow()
将占据工作表上数据的最后一行。请注意,如果A列中只有3个值,B列中只有7个,但是您的值为C10,那么getLastRow() = 10
。