Я не вижу ничего плохого в вашем коде, я поделюсь некоторыми вещами, которые я делаю по-другому, однако,
Я запускаю свою функцию цветов, очищая существующие правила.
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName("x");
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
sheet.clearConditionalFormatRules();
var conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
Я также делаю свои диапазоны вручную в каждом правиле
var rule = SpreadsheetApp.newConditionalFormatRule()
.setFontColor('#a2c8ec')
.setBackground('black')
.whenFormulaSatisfied('=$D1=1')
.setRanges([spreadsheet.getRange('A:J')])
.build();
conditionalFormatRules.push(rule);
sheet.setConditionalFormatRules(conditionalFormatRules);
На вашем месте я бы делал эти две вещи, менял способ выбора диапазонов и очищал все старое форматирование при каждом запуске функции.