Data validation rules prevent invalid entries from being added to your sheet. Apps Script lets you create dropdown lists, enforce number ranges, restrict dates, and write custom formula rules — all programmatically using SpreadsheetApp.newDataValidation().
The true argument shows values as a dropdown. Setting setAllowInvalid(false) rejects any entry not in the list.
Adding a Dropdown from a Named Range
If your valid options live in a separate Config sheet:
functionaddProductDropdownFromRange(){var ss =SpreadsheetApp.getActiveSpreadsheet();var sheet = ss.getSheetByName("Sales Tracker");var configSheet = ss.getSheetByName("Config");// Config sheet has product names in A1:A3var productRange = configSheet.getRange("A1:A3");var rule =SpreadsheetApp.newDataValidation().requireValueInRange(productRange,true).setAllowInvalid(false).setHelpText("Select a product from the list.").build(); sheet.getRange(2,3, sheet.getMaxRows()-1,1).setDataValidation(rule);// Column CLogger.log("Product dropdown from range applied.");}
Enforcing a Number Range on the Amount Column
functionaddAmountValidation(){var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales Tracker");var amountRange = sheet.getRange(2,4, sheet.getMaxRows()-1,1);// Column Dvar rule =SpreadsheetApp.newDataValidation().requireNumberBetween(1,100000).setAllowInvalid(false).setHelpText("Amount must be between $1 and $100,000.").build(); amountRange.setDataValidation(rule);Logger.log("Amount validation applied.");}
Adding a Region Dropdown from Sheet Data
This reads unique regions already in the Sales Tracker and builds the dropdown list dynamically:
functionaddRegionDropdownFromData(){var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales Tracker");var data = sheet.getRange(2,5, sheet.getLastRow()-1,1).getValues();var regions =[...newSet(data.flat().filter(String))];var rule =SpreadsheetApp.newDataValidation().requireValueInList(regions,true).setAllowInvalid(false).setHelpText("Select a valid region.").build(); sheet.getRange(2,5, sheet.getMaxRows()-1,1).setDataValidation(rule);// Column ELogger.log("Region dropdown applied: "+ regions.join(", "));}
With the sample data, the dropdown shows: North, East, South.
Adding a Date Constraint
Prevent future dates in the Deal Date column:
functionaddDateValidation(){var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales Tracker");var dateRange = sheet.getRange(2,8, sheet.getMaxRows()-1,1);// Column Hvar rule =SpreadsheetApp.newDataValidation().requireDateOnOrBefore(newDate()).setAllowInvalid(false).setHelpText("Deal date cannot be in the future.").build(); dateRange.setDataValidation(rule);Logger.log("Date validation applied.");}