С текущим кодом проверка данных записывается в ячейку Main! C4 после обработки одного листа внутри листов-l oop. Другими словами, проверка данных перезаписывается снова и снова. Что необходимо, так это объединение значений в массив, который затем записывается в Main! C4. Посмотрите, поможет ли это.
function setDataValidation() {
var ss = SpreadsheetApp.getActive();
var values = allColsA(ss, 'Main', 'A2:A');
ss.getRange('Main!C4').setDataValidation(SpreadsheetApp.newDataValidation()
.requireValueInList(values));
}
EDITED, чтобы включить массив с исключенными листами ...
function allColsA(spreadsheet, targetSheetName, range) {
var arr, excluded;
arr = [[]];
excluded = [targetSheetName, 'Sheet2', 'Sheet3'];
spreadsheet.getSheets().filter(sh => excluded.indexOf(sh.getName()) === -1)
.forEach((s, i) => {
arr = arr.concat(s.getRange(range)
.getValues())
})
return arr.filter(String).reduce((a, b) => a.concat(b), []);
}