Hi!
We can use Google script time driven triggers to achieve the first and second flows you described. While we will use onEdit trigger to achieve the second one.
The script for the first and third tasks will run continuously to check if an appointment is 24 hours away from the script run time or 24 hours passed. If either condition is true, the right template will be sent.
For the second task, onEdit trigger for the sheet will be installed. Whenever you enter a new row and you enter the province for that row, the script will run, read the list of emails that have the same province from the other sheet and send the templated email to them.
I started my career as a general web developer, then I specialized in Google Apps Script language which captured my heart =)
I may be unresponsive during Saturday, but I will be responsive back on Sunday. You can alway expect less than 24 hours response time!
I will be more than happy to address any of your questions!
Sincerely,
Mohamed