Shelf — inventory tracker

Pro workbook: Stock, Movements, Reorder, Dashboard, Setup, Formulas. Sample data, real formulas.

StockStock value3,854.20
One row per item. Yellow cells are yours; value and status are calculated. Quantity = opening + in − out from the Movements sheet.To reorder4
SKUItemCategoryUnit costOpeningInOutOn handReorder atReorder qtyValueStatus
BG-001Field tote, tanBags62.00140410612620.00OK
BG-002Field tote, blackBags62.0041297612434.00OK
BG-003Weekender, tanBags98.00700736686.00OK
BG-004Messenger, oliveBags74.50283748521.50OK
WL-001Bifold wallet, tanWallets18.203100311530564.20OK
WL-002Card holder, blackWallets9.8012057204068.60Reorder
BT-001Belt 32mm, tan, MBelts21.009009816189.00OK
BT-002Belt 32mm, tan, LBelts21.00602481684.00Reorder
AC-001Key fobAccessories4.105800582550237.80OK
AC-002Luggage tagAccessories5.60170413204072.80Reorder
PK-001Dust bag, cottonPackaging1.3521000210100200283.50OK
PK-002Gift box, largePackaging2.9044012325010092.80Reorder
Movements
Every unit in or out. SKU is a dropdown from Stock; the Stock sheet adds these up.
DateSKUTypeQtyNoteItem
2026-09-01BG-002In12PO 1041Field tote, black
2026-09-02BG-001Out3Web ordersField tote, tan
2026-09-03WL-002Out5Web ordersCard holder, black
2026-09-04BG-002Out9Wholesale — MarlowField tote, black
2026-09-05AC-002Out4Web ordersLuggage tag
2026-09-08BG-004In8PO 1042Messenger, olive
2026-09-09BG-004Out3Web ordersMessenger, olive
2026-09-10PK-002Out12UsedGift box, large
2026-09-11BT-002Out2Web ordersBelt 32mm, tan, L
2026-09-11BG-001Out1DamagedField tote, tan
The Item column looks the SKU up on Stock so typos show as 'unknown SKU' in red.
Stock reads rows 5–1000 here.
Reorder list
Every item at or below its reorder point, with the quantity to order and what it will cost. Rows that are fine stay blank.Sort by SKU or filter blanks away if you want a tight list — the rows mirror Stock one-to-one so the formulas stay simple.
SKUItemOn handReorder atOrder qtyUnit costOrder valueTotal to order1,242.00
Lines4
WL-002Card holder, black720409.80392.00
BT-002Belt 32mm, tan, L481621.00336.00
AC-002Luggage tag1320405.60224.00
PK-002Gift box, large32501002.90290.00
Dashboard
Value and health by category, from the Stock sheet.
CategoryItemsUnitsValueTo reorderShare of value
Bags4312,261.50058.7%
Wallets238632.80116.4%
Belts213273.0017.1%
Accessories271310.6018.1%
Packaging2242376.3019.8%
Total123953,854.204
HealthValue
Out of stock0
Below reorder point4
Cost to restock everything1,242.00
Most valuable itemWeekender, tan
Setup
Categories for the Stock dropdown and the Dashboard.
Categories
Bags
Wallets
Belts
Accessories
Packaging
How the formulas work
Every formula in this workbook, in plain words. Nothing is hidden and nothing needs a macro. Formulas are shown without the leading = sign.
WhereFormulaWhat it does
Stock · InSUMIFS(Movements!$D$5:$D$1000, Movements!$B$5:$B$1000, $A5, Movements!$C$5:$C$1000, "In")Units received for this SKU: every Movements row with the same SKU and type In.
Stock · OutSame with "Out"Units that left.
Stock · On handE5+F5-G5Opening count plus everything in, minus everything out. Do a physical count? Type it into Opening and clear the old movements.
Stock · ValueD5*H5Unit cost × on hand.
Stock · StatusIF(H5<=0,"Out of stock",IF(H5<=I5,"Reorder","OK"))Nested IF: nothing left → Out of stock; at or below the reorder point → Reorder; otherwise OK. Conditional formatting colours the word.
Movements · ItemIFERROR(INDEX(Stock!$B$5:$B$200, MATCH(B5, Stock!$A$5:$A$200, 0)), "unknown SKU")Looks the SKU up on Stock and shows the item name — or 'unknown SKU' in red if it isn't there, so a typo is caught where it happens.
Reorder · every columnIF(AND(Stock!$A5<>"", Stock!$H5<=Stock!$I5), Stock!$A5, "")Each Reorder row mirrors the Stock row with the same number and shows it only when on hand ≤ reorder point. No FILTER function, so it works in Excel 2016 and Numbers.
Reorder · Total to orderSUM(G5:G201)Order qty × unit cost, summed over the rows that show.
Dashboard · Value by categorySUMIF(Stock!$C$5:$C$200, A5, Stock!$K$5:$K$200)Adds the Value column for rows in this category.
Dashboard · To reorderCOUNTIFS(cat, A5, status, "Reorder") + COUNTIFS(cat, A5, status, "Out of stock")Both flags counted, per category.
Dashboard · Most valuable itemINDEX(Stock!B:B, MATCH(MAX(Stock!K:K), Stock!K:K, 0))MAX finds the largest value, MATCH its row, INDEX the name.