Setting Up a Basic Pharmacy Inventory System in Excel
I built my first pharmacy inventory spreadsheet back in 2008 for a small independent pharmacy that had been tracking everything on handwritten cards. The pharmacist, Marilyn, was lovely but her system was falling apart. We were missing expiration alerts, over-ordering on slow movers, and under-ordering on antibiotics during seasonal spikes. That was the reality of it. Not exciting. Just expensive mistakes compounding every month. A functional Pharmacy Inventory Management Excel workbook needs three sheets minimum: one for your active drug list with real-time quantities, one for purchase order history, and one for expiry tracking. You can combine them into fewer sheets but that makes maintenance harder than it needs to be. I keep them separate even though it means more file management overhead.
Essential Columns for Pharmacy Inventory Management Excel
The drug list sheet is where you spend most of your time. Every row represents one stock keeping unit. Your columns should include NDC number, drug name, dosage form, strength, vendor, cost per unit, current quantity on hand, reorder point, expiry date, lot number, and shelf location. The NDC number is non-negotiable. Without it you are guessing when two vendors supply the same molecule at different strengths or packaging. Quantity on hand should pull from a physical count you update weekly. Daily adjustments based on sales are possible but they create false precision. Pharmacists will tell you their counts are accurate day-to-day. They are not. Shrinkage, returns, and waste create drift that only a full inventory count corrects. I recommend a Friday count that feeds Monday's opening numbers. For the reorder point column, use this formula: average daily usage multiplied by lead time in days plus safety stock. Safety stock in a pharmacy context is usually two weeks of supply for controlled substances and four weeks for anything with a long procurement cycle. The formula itself is simple. The challenge is getting accurate average daily usage when your sales data lives in a separate system that updates asynchronously.
Purchase Order and Expiry Sheets
The purchase order sheet tracks what you ordered, when, from whom, at what cost, and what the expected delivery date was. This sheet is where you catch vendor pricing drift. I once noticed a distributor had quietly increased the unit cost on amoxicillin 500mg capsules by eighteen percent over four months without updating their catalog page. The PO history caught it before the next order went through. An invoice-only workflow would have let that slide for a year. The expiry sheet is simpler than people make it. List every lot number you have in stock, its expiry date, and its current quantity. Sort by expiry date ascending so near-expiry product rises to the top automatically. Use conditional formatting to flag anything within ninety days of expiration. At ninety days you should be negotiating a return with your distributor or moving that stock to a recall tracking protocol depending on your state board rules.
Get the Full Details

Formulas That Actually Save Time
The single most useful formula in the entire workbook is a combination of VLOOKUP or XLOOKUP against your NDC master list. When you receive a shipment, paste the vendor invoice data into a raw entries sheet and let the lookup pull in pricing, vendor, and supplier info automatically. This cuts data entry from about twenty minutes per shipment to roughly two minutes. The time savings compounds across a month. For stock valuation, multiply current quantity on hand by last purchase cost. Do not use average cost unless you have a strong reason. Last purchase cost is what you actually spent. Average cost introduces rounding errors that accumulate across dozens of SKUs and make your end-of-month reconciliation a nightmare. I learned this the hard way when my valuation was off by three thousand dollars and I could not find where the drift came from. Switching to last purchase cost resolved it immediately. Expiry alerts work best with a simple IF formula checking whether the expiry date minus today falls below your threshold. For example, =IF(A2-TODAY()
=90,"FLAG","") placed next to your expiry dates. Then filter for FLAG and you have your near-expiry report. This takes about ten seconds to run instead of manually scanning three hundred rows.
My Biggest Hard Lesson with This Setup
There was one edge case that nearly broke the system. We started carrying a new manufacturer of lisinopril that used the same NDC range as an existing supplier but with different strength labeling. The VLOOKUP pulled pricing and vendor data from the wrong row. We were buying at one price and selling at another without noticing for six weeks. The fix was adding a secondary key column that combined NDC with strength and adding it to the lookup instead of NDC alone. That single change prevented the entire category of error. It also means you need to audit your NDC data annually because manufacturers renumber codes sometimes and those renumbers are not always communicated clearly. Inventory Management Excel is adequate for a pharmacy running fewer than four hundred active SKUs. Beyond that threshold you start hitting real limits. Lookups slow down significantly with large datasets. Manual data entry becomes a liability because someone will mistype a quantity and you will not catch it. Audit trails disappear. If you need to know who changed a quantity and when, Excel does not give you that natively without adding complex version control that most pharmacists will not maintain. Controlled substance tracking in Excel is legally risky in many jurisdictions. DEA requirements demand immutable records and sequential access logs. Excel allows edits without trace unless you build something elaborate, and even then a savvy auditor will note that any user with file access can modify past entries. If you dispenseSchedule II medications and your state requires detailed tracking, a dedicated pharmacy management system is not optional. Excel is a supplement, not a replacement, for those records.
The other practical limitation is concurrent access. If two staff members open the workbook at the same time and save independently, you lose changes. One person will overwrite the other. This sounds obvious but it happens constantly in busy pharmacies. The workaround is setting a strict single-user schedule or moving to a cloud-hosted solution with real-time collaboration. Neither is ideal. Cloud solutions cost money and require internet reliability that your pharmacy may not have during storms or outages.

Practical Maintenance Routine
Run a full physical count every Friday. Update the quantity column that same day. Review the expiry sheet every Monday morning and pull any flagged items for distributor return. Reconcile purchase orders against received goods within forty-eight hours of delivery. Audit vendor pricing quarterly against your PO history sheet. These steps take about ninety minutes per week for a medium-sized pharmacy. Skipping any of them makes the spreadsheet drift into unreliability within three to four months. I do not recommend building this from scratch if your operation is growing. Templates exist and most are fine for basic use. What matters more than the template itself is discipline in updating it. A well-maintained simple spreadsheet beats a sophisticated system that nobody uses correctly. I have seen both sides of that equation and the maintenance habit is the variable that determines whether the tool works at all.