我是非常新的使用宏在谷歌表,并努力复制容易的VBA代码
我试图找到列A的最后一行,然后将公式添加到各种列并向下复制到最后一行。在VBA中,它像**("B2:B" & Lastrow).select
一样简单然而,这并不是直截了当的。我发现并操作了以下内容,但是它总是转到最后一行而不是数据的最后一行
var sheetName = "Week 1";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
spreadsheet.getRange('E7').activate()
.setFormula('=iferror(if(match($B7,Names,0),VLOOKUP($B7,Special,3,false),0),0)');
var lr = sheet.getLastRow();
var fillDownRange = sheet.getRange(7, 5, lr-1);
sheet.getRange('e7').copyTo(fillDownRange);
需要对上面做些什么,以便它只填充到A列的最后一行数据
非常感谢所有人的帮助
编辑-我已经更新了代码,(显然是错误的)并添加到工具下的s/sheet,复制标签
var sheetName = "Week 1";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
var lastRow = sheet.getLastRow();
var range = sheet.getRange("A7" + lastRow);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
var lr = getLastDataRow(sheet,"A")
//Saturday Formula
spreadsheet.getRange('E7').activate()
.setFormula('=iferror(if(match($B7,Names,0),VLOOKUP($B7,Special,3,false),0),0)');
var fillDownRange = sheet.getRange(7, 5, lr-1);
sheet.getRange('E7').copyTo(fillDownRange);
在这两行之间是一个灯泡,表示无法访问的代码,Var = lr**之后的所有内容都是灰色的
}
var lr = getLastDataRow(sheet,"A")
第一个代码的更正
function myFunction() {
var sheetName = "Week 1";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
sheet.getRange('E7').setFormula('=iferror(if(match($B7,Names,0),VLOOKUP($B7,Special,3,false),0),0)');
var lr= sheet.getRange('A7').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()
var fillDownRange = sheet.getRange(7, 5, lr-6,1);
sheet.getRange('E7').copyTo(fillDownRange);
}
代替varlr = sheet.getLastRow();
,试试
lr = sheet.getRange('A1').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()
如果需要,将A改为E。
- edit:将A1改为A7, A4和A6为空。
如果有不连续的值,首选
function getLastDataRow(sheet,col) {
// col in letter
var lastRow = sheet.getLastRow();
var range = sheet.getRange(col + lastRow);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
}
和
lr = getLastDataRow(sheet,"A")