Код: Выделить всё
=FILTER( FILTER($10:$500, Beginning_Date = Date_Range, Jobs_Range=Job), Employee_Name = Names_Range)
То, что это делает, это создает массив, найдя ряды даты и диапазонов заданий, где условия верны, чтобы вернуть диапазон столбцов, прежде чем отфильтроровать 2 -е время на именах в столбце, чтобы вернуть правильную строку.function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Replace Projected Hours')
menu.addItem("Replace Hours","ReplaceProjectedHours").addToUi();
}
function ReplaceProjectedHours() {
const ss = SpreadsheetApp.getActive();
const sn = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Projected Hours');
const sheetrange = sn.getRange("$1:$500").getValues();
const dateRangeBeginning = ss.getRangeByName("Date_Range_Beginning").getValue();
var dateRangeBeginningNumber = dateRangeBeginning.getTime()/1000/86400 + 25569;
const dateRangeEnd = ss.getRangeByName("Date_Range_End").getValue();
var dateRangeEndingNumber = dateRangeEnd.getTime()/1000/86400 + 25569;
const daterange = ss.getRangeByName("Date_Support_Range").getValues();
//Logger.log(Array.isArray(daterange));
var dateCriteria = SpreadsheetApp.newFilterCriteria().whenNumberBetween(dateRangeBeginningNumber,dateRangeEndingNumber);
var dateFilter = daterange.filter(function(d){return d[1]==dateCriteria});
Logger.log(dateFilter);
Logger.log(Array.isArray(dateFilter));
var employeeName = ss.getRangeByName("Employee_Name").getValues();
var employeeNameRange = ss.getRangeByName("Employee_Names_Range").getValues();
//var employeeCriteria = employeeNameRange.getValues(employeeName);
var employeeFilter = employeeNameRange.filter(function(e){return e[1]==employeeName})
Logger.log(employeeFilter);
Logger.log(Array.isArray(employeeFilter));
const job = ss.getRangeByName("Job").getValue();
const jobNameRange = ss.getRangeByName("Job_Names_Range").getValues();
//var jobCriteria = SpreadsheetApp.newFilterCriteria().jobNameRange.getRange().getValues(job);
var jobFilter = jobNameRange.filter(function(j){return j[1]==job});
const projectedHoursPerWeek = ss.getRangeByName("Projected_Hours_per_Week").getValues();
var filteredRowResults = sheetrange.filter(function(r){return r[1]==dateFilter && r[2]==jobFilter &&r[3]==employeeFilter});
Logger.log(filteredRowResults);
Logger.log(Array.isArray(filteredRowResults));
//var filteredColumnResults = filteredRowResults.filter(function(c){return c[1]==employeeFilter});
//var newSheet = ss.insertSheet();
//newSheet.getRange(2,1,filteredRowResults.length).setValues(filteredRowResults);
//filteredColumnResults.setValue(projectedHoursPerWeek);
}
< /code>
В настоящее время я не вижу никаких результатов каждой отдельной функции фильтра. Они возвращают массивы, но без значений, и, честно говоря, я не уверен, является ли функция фильтра подходящим инструментом для формулы, эквивалентной сценарию.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ence-range