Most Excel tutorials tell you that 'Excel can send notifications'—and then hand you a broken VBA script that crashes Outlook or requires admin rights. They’re wrong. Native Excel cannot send notifications. Ever. Not via formulas. Not via conditional formatting. Not even with ‘Alert’ in the name. What can do it is Power Automate—and it takes two steps, not 17.
The Setup
We worked with a logistics team at SwiftFreight Logistics that tracks delivery exceptions. Their Excel file (DeliveryTracker.xlsx) lives on SharePoint and updates daily from their TMS. They needed alerts when any shipment missed its promised delivery date and had high-priority status.
| A | B | C | D | E |
|---|---|---|---|---|
| Shipment ID | Customer | Promised Date | Actual Date | Priority |
| SF-8821 | Nexus MedTech | 2024-03-15 | 2024-03-18 | High |
| SF-8822 | Veridian Labs | 2024-03-12 | 2024-03-13 | Medium |
| SF-8823 | Acme Corp | 2024-03-10 | 2024-03-10 | High |
| SF-8824 | Lumina Systems | 2024-03-14 | 2024-03-17 | High |
| SF-8825 | TerraLink Inc | 2024-03-11 | 2024-03-12 | Low |
| SF-8826 | Orion Health | 2024-03-09 | 2024-03-16 | High |
| SF-8827 | Stellar Dynamics | 2024-03-13 | 2024-03-14 | Medium |
| SF-8828 | Zenith Group | 2024-03-08 | 2024-03-15 | High |
The Challenge
You might think: just use conditional formatting to highlight late shipments. But that’s not a notification—it’s silent visual noise. The team needed *actionable* alerts: an email to the regional manager and a Teams message to the dispatch lead. And they needed it triggered by changes—not scheduled scans. That means Excel alone won’t cut it. The catch? Most people try to build this in Excel first, then get stuck writing VBA that only works on their machine. We flipped it: start where Excel *can* talk—its data—and let Power Automate listen.
Here’s the counterintuitive part: Excel doesn’t need to 'send' anything. It just needs to *flag* something has changed. A single cell—say, F1—becomes our signal tower. When F1 = "ALERT", Power Automate wakes up and fires off messages. No macros. No Outlook dependencies. Just one cell. (Trust me, I learned this the hard way after three failed VBA deployments.)
Walking Through It
We added column F: Status Flag. In F2, we entered:
=IF(AND(C2<TODAY(),E2="High"),"ALERT","OK")
Then copied down to F10. Now every row tells us whether it qualifies. But that’s not enough—we need *one* cell to summarize all rows. So in F1, we used:
=IF(COUNTIF(F2:F10,"ALERT")>0,"ALERT","OK")
That’s our trigger cell. Any time it changes to "ALERT", Power Automate reacts.
| Step | Action | Result | Shortcut |
|---|---|---|---|
| 1 | Add Status Flag column (F) with formula checking overdue + High priority | F2:F10 shows "ALERT" or "OK" per row | Ctrl+C / Ctrl+V |
| 2 | In F1, enter =IF(COUNTIF(F2:F10,"ALERT")>0,"ALERT","OK") | F1 becomes a live summary: "ALERT" if any row qualifies | Alt+= (AutoSum) → edit formula manually |
| 3 | In Power Automate, create new flow: 'When a file is modified' (SharePoint) | Flow triggers on save—no polling, no delay | Alt+N, F (new flow) |
| 4 | Add 'Get rows' action, then filter for F1 = "ALERT" using Excel Online connector | Only runs actions if alert condition is met | — |
| 5 | Add 'Send an email (V2)' and 'Post message in a chat or channel' actions | Email goes to manager@swiftfreight.com; Teams msg tags @dispatch-lead | — |
The Result
After saving the file, here’s what appears in the tracker—and what happens behind the scenes:
| A | B | C | D | E | F |
|---|---|---|---|---|---|
| Shipment ID | Customer | Promised Date | Actual Date | Priority | Status Flag |
| SF-8821 | Nexus MedTech | 2024-03-15 | 2024-03-18 | High | ALERT |
| SF-8822 | Veridian Labs | 2024-03-12 | 2024-03-13 | Medium | OK |
| SF-8823 | Acme Corp | 2024-03-10 | 2024-03-10 | High | OK |
| SF-8824 | Lumina Systems | 2024-03-14 | 2024-03-17 | High | ALERT |
| SF-8825 | TerraLink Inc | 2024-03-11 | 2024-03-12 | Low | OK |
| SF-8826 | Orion Health | 2024-03-09 | 2024-03-16 | High | ALERT |
| SF-8827 | Stellar Dynamics | 2024-03-13 | 2024-03-14 | Medium | OK |
| SF-8828 | Zenith Group | 2024-03-08 | 2024-03-15 | High | ALERT |
| F1 (Trigger Cell) | ALERT | ||||
Within 90 seconds of saving, the regional manager receives an email titled “Urgent: 4 High-Priority Late Shipments”. The dispatch lead gets a Teams message with a direct link to the file and highlighted rows.
What Could Go Wrong
Three mistakes we saw in early tests—each caused real delays:
- Using TODAY() inside Power Automate instead of Excel: People tried putting
TODAY()in the flow’s condition. Big mistake. Power Automate reads static values—it doesn’t recalculate. Excel does. Keep date logic in Excel cells, not the flow. - Forgetting to set permissions on the SharePoint folder: The Excel Online connector needs 'Edit' access—not just 'View'. If the flow fails silently, check folder permissions first. (We lost 2 hours debugging this once.)
- Hardcoding the sheet name in Power Automate: If someone renames 'Sheet1' to 'Q3-Deliveries', the flow breaks. Use the actual sheet name in the 'Get rows' action—or better yet, add a named range like
AlertRangecovering A1:F10 and reference that.
Final tip: You don’t need Power Automate Premium. The free plan handles up to 750 flows/month—enough for most teams. And if your file stays local (not on SharePoint/OneDrive), use Windows Task Scheduler + PowerShell to monitor file change events and trigger alerts. But that’s another story.
Ready to try it? Here’s your next move:
| Task | Where | Time Estimate |
|---|---|---|
| Add Status Flag column (F) with overdue+priority logic | Excel worksheet (F2:F10) | 2 minutes |
| Set up trigger cell F1 with COUNTIF summary | Cell F1 | 45 seconds |
| Create Power Automate flow using 'When a file is modified' | flow.microsoft.com | 6–8 minutes |
| Test with one manual edit to F1 (type "ALERT", save) | Your SharePoint file | 1 minute |