我有300,000个单元都使用相同的基本IF语句(上下复制/粘贴更新相应的行或列引用)。这用于填充甘特图,将列标题的日期值与同一行中的另一个单元格进行比较。根据找到的值,输出是一个字母,或者根本没有。
问题是,正如您可以想象的那样,性能 - 它非常慢。每当我在Sheet上做任何事情时,似乎每个IF语句都会被重新评估,而且性能非常差。
有没有办法在单元格中删除这个IF语句,并将其添加为函数,只在我想要更新甘特图时通过菜单调用它?
这是IF声明:
=IF($K2="N/A","",IF(AND(L$1>=$H2,L$1<=$I2),IF(ISBLANK($E2),"A",IF(ISBLANK($F2),"B",IF($G2="Crew","D","C"))),""))
我尝试了几种不同的方法,但是我很难理解如何在每个具有各自列和行引用的单元格中评估GAS中的单个输入公式?
// Adds a custom menu
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Refresh Data')
.addItem('Update Gantt', 'setIfForGantt')
.addToUi();
}
// Set IF statement for Gantt chart
function setIfForGantt() {
var sheetName = "Project Management";
var range = "L:CW";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var range = sheet.getRange(range);
var values = range.getValues();
var formula = ['IF($K2="N/A","",IF(AND(L$1>=$H2,L$1<=$I2),IF(ISBLANK($E2),"A",IF(ISBLANK($F2),"B",IF($G2="Crew","D","C"))),""))'];