Hướng dẫn

Mẫu Google Sheets Định Mức Tồn Kho Tối Thiểu & Cảnh Báo Hết Hàng 2026

Tuân HoangTuân Hoang
20 tháng 8, 2026
11 phút đọc
Ảnh minh họa bài viết: Mẫu Google Sheets Định Mức Tồn Kho Tối Thiểu & Cảnh Báo Hết Hàng 2026

Định mức tồn kho tối thiểu là gì và vì sao Excel thủ công hay bị trễ

Cứ đến ngày cuối tháng, không ít chủ shop mở file kho ra mới tá hỏa vì hết hàng một mã sản phẩm bán chạy từ tuần trước mà không hay. Vấn đề không nằm ở việc thiếu dữ liệu — số liệu tồn kho vẫn nằm đó trong file — mà nằm ở chỗ không có cơ chế nào chủ động báo cho người quản lý biết khi số lượng chạm ngưỡng nguy hiểm. Đó chính là lý do định mức tồn kho tối thiểu (min stock level) tồn tại: một con số ngưỡng cho từng mã hàng, khi tồn kho thực tế chạm hoặc xuống dưới mức này, hệ thống phải tự động phát tín hiệu để đặt hàng bổ sung trước khi đứt hàng thật sự.

Cái khó của việc quản lý bằng Excel truyền thống là công thức tính min stock thường bị "đóng cứng" — nhập một lần rồi để đó cả năm, trong khi nhu cầu bán hàng theo mùa vụ, theo campaign, theo xu hướng thị trường liên tục thay đổi. Một mã hàng bán chạy dịp Tết có thể cần định mức tối thiểu cao gấp 3 lần ngày thường, nhưng file Excel tĩnh không tự cập nhật điều đó. Google Sheets giải quyết được phần lớn vấn đề này nhờ khả năng dùng công thức động, kết hợp Conditional Formatting và Google Apps Script để gửi cảnh báo tự động qua email — điều mà Excel offline gần như không làm được nếu không có VBA phức tạp.

Công thức tính định mức tồn kho tối thiểu — ba cách áp dụng thực tế

Có ba trường phái tính min stock phổ biến mà các shop vừa và nhỏ ở Việt Nam hay dùng, mỗi cách phù hợp với một kiểu vận hành khác nhau.

Cách 1: Công thức Safety Stock cơ bản

Công thức kinh điển nhất: Min Stock = (Lead Time × Tốc độ bán trung bình/ngày) + Safety Stock. Ví dụ một mã áo thun bán trung bình 8 cái/ngày, nhà cung cấp giao hàng mất 5 ngày, bạn muốn có thêm 2 ngày dự phòng an toàn — thì min stock = (5 × 8) + (2 × 8) = 56 cái. Trong Google Sheets, công thức này viết đơn giản: =(LeadTime*AvgDailySales)+(SafetyDays*AvgDailySales), với AvgDailySales lấy từ hàm AVERAGEIFS quét dữ liệu bán hàng 30 ngày gần nhất.

Cách 2: Định mức cố định theo kinh nghiệm

Với các shop mới, chưa đủ dữ liệu lịch sử để tính trung bình chính xác, cách đơn giản hơn là đặt một con số cố định dựa trên kinh nghiệm — kiểu "mã nào cũng giữ tối thiểu 10 cái trong kho". Cách này nhanh nhưng thiếu chính xác cho những mã có tốc độ bán chênh lệch lớn; một mã bán 50 cái/tháng và một mã bán 5 cái/tháng không thể áp cùng ngưỡng 10.

Cách 3: Định mức động theo phần trăm doanh số tháng trước

Cách này phù hợp với ngành hàng có tính mùa vụ rõ như thời trang, quà tặng. Công thức: min stock = 20-30% doanh số bán ra của tháng liền trước. Trong Sheets bạn dùng SUMIFS để lấy tổng số lượng bán theo tháng, rồi nhân với hệ số phần trăm đặt trong một ô riêng để dễ điều chỉnh mà không phải sửa từng công thức.

Phương phápPhù hợp vớiHạn chế
Safety Stock theo lead timeShop có dữ liệu bán hàng ổn định ≥ 3 thángCần cập nhật lead time nhà cung cấp thường xuyên
Định mức cố địnhShop mới, ít mã hàng (dưới 50 SKU)Không phản ánh đúng tốc độ bán từng mã
% doanh số tháng trướcNgành hàng mùa vụ, thời trangTrễ 1 tháng nếu xu hướng đổi đột ngột

Với đa số shop vừa và nhỏ, mình vẫn khuyên bắt đầu bằng cách 1 — an toàn hơn cách đặt cố định, và không đòi hỏi lịch sử dữ liệu dài như cách 3. Sau 2-3 tháng theo dõi, có thể tinh chỉnh lại số ngày safety stock cho từng nhóm hàng.

Xây dựng cảnh báo hết hàng tự động bằng Conditional Formatting và Apps Script

Định mức tồn kho chỉ có giá trị khi nó thực sự "nhắc" được người quản lý — không ai có thời gian mở file kiểm tra thủ công mỗi ngày. Có hai lớp cảnh báo nên làm song song.

Lớp 1: Cảnh báo trực quan bằng Conditional Formatting

Vào Format > Conditional formatting, chọn cột Tồn kho thực tế, thêm rule "Custom formula is": =$E2<=$F2 (E là cột tồn kho hiện tại, F là cột min stock), tô màu đỏ. Thêm rule thứ hai với công thức =$E2<=$F2*1.5 tô màu vàng cảnh báo sớm — mã hàng sắp chạm ngưỡng nhưng chưa nguy cấp. Cách phân theo hai màu này giúp người quản lý ưu tiên xử lý đúng thứ tự thay vì hoảng loạn khi thấy cả bảng đỏ lòm.

Lớp 2: Gửi email tự động qua Apps Script

Conditional Formatting chỉ có tác dụng khi mở file. Muốn chủ động hơn, cần một script chạy theo lịch (time-driven trigger) quét toàn bộ bảng và gửi email danh sách mã hàng dưới ngưỡng. Các bước cơ bản:

  • Mở Extensions > Apps Script, viết hàm duyệt qua từng dòng dữ liệu, so sánh cột tồn kho với cột min stock
  • Với mỗi dòng vi phạm ngưỡng, gom vào một mảng để tạo nội dung email dạng bảng (mã hàng, tồn kho hiện tại, min stock, số lượng cần đặt thêm)
  • Dùng MailApp.sendEmail() gửi báo cáo tới địa chỉ email quản lý kho
  • Vào Triggers (biểu tượng đồng hồ bên trái), thiết lập chạy hàm này mỗi ngày lúc 7h sáng để có báo cáo đầu ngày

Một điểm hay ho ít người để ý: có thể thêm điều kiện chỉ gửi email khi có ít nhất một mã hàng cảnh báo — tránh tình trạng inbox ngập email "không có gì bất thường" mỗi ngày, khiến người nhận dần bỏ qua cảnh báo thật.

Cấu trúc bảng tính — các cột bắt buộc để công thức chạy đúng

Một sai lầm phổ biến là thiết kế bảng tồn kho thiếu cột trung gian, khiến công thức min stock phải tính lại từ đầu mỗi lần và dễ lỗi tham chiếu. Cấu trúc tối thiểu nên có:

  • Mã SKU, Tên sản phẩm — định danh duy nhất, tránh trùng lặp gây sai lệch khi SUMIFS/VLOOKUP
  • Tồn kho đầu kỳ, Nhập trong kỳ, Xuất trong kỳ, Tồn kho cuối kỳ — công thức tự tính bằng =Đầu kỳ+Nhập-Xuất, không nhập tay số cuối kỳ để tránh lệch số
  • Tốc độ bán trung bình/ngày — kéo từ sheet Lịch sử bán hàng qua AVERAGEIFS
  • Lead time nhà cung cấp (ngày) — nên có sheet riêng lưu lead time theo từng NCC, tham chiếu qua VLOOKUP thay vì nhập tay từng dòng
  • Định mức tồn kho tối thiểu, Số lượng cần đặt thêm — cột cuối này = Min stock − Tồn kho hiện tại, nếu âm thì để 0 bằng MAX(Min-Ton,0)

Nếu shop đã dùng bảng Nhập-Xuất-Tồn riêng, có thể tham khảo cách tổ chức chi tiết hơn trong Mẫu Báo Cáo Quản Lý Kho Google Sheets — phần phân tách sheet Nhập/Xuất/Tồn ở đó giúp công thức min stock ở bảng chính chạy nhẹ hơn, không phải quét toàn bộ giao dịch mỗi lần mở file.

Tình huống thực tế: shop bán lẻ 120 SKU và bài toán chọn ngưỡng cảnh báo

Một chủ shop phụ kiện điện thoại quản lý khoảng 120 mã hàng từng gặp vấn đề khá điển hình: đặt chung một ngưỡng min stock 15 cái cho tất cả mã, kết quả là những mã bán chậm (dưới 1 cái/ngày) bị giữ tồn kho quá cao — vốn chôn vào hàng ế, trong khi mã bán chạy (10-15 cái/ngày) vẫn đứt hàng vì ngưỡng 15 quá thấp so với tốc độ tiêu thụ thực tế.

Cách xử lý là phân nhóm SKU theo tốc độ bán (dùng công thức IFS để gắn nhãn A/B/C dựa trên doanh số 30 ngày), rồi áp công thức min stock riêng cho từng nhóm:

  • Nhóm A (bán >5 cái/ngày): min stock = 7 ngày lead time × tốc độ bán, cộng thêm 3 ngày an toàn
  • Nhóm B (bán 1-5 cái/ngày): min stock = 5 ngày lead time × tốc độ bán
  • Nhóm C (bán <1 cái/ngày): min stock cố định 3-5 cái, không cần công thức phức tạp vì biến động thấp

Sau khi áp dụng phân nhóm này khoảng 2 tháng, số lần đứt hàng ở nhóm A giảm rõ rệt, đồng thời vốn tồn kho ở nhóm C không bị giữ quá cao nữa. Bài học rút ra: một công thức min stock áp chung cho toàn bộ danh mục gần như luôn sai ở đâu đó — hoặc thừa vốn, hoặc thiếu hàng.

Liên kết dữ liệu tồn kho với bán hàng và vận chuyển để cảnh báo chính xác hơn

Định mức tồn kho tối thiểu chỉ đáng tin khi con số tốc độ bán trung bình được lấy từ dữ liệu bán hàng thật, cập nhật liên tục — không phải ước lượng chủ quan. Nếu sheet Tồn kho và sheet Bán hàng tách rời nhau, không có công thức liên kết, người quản lý dễ rơi vào tình trạng nhìn số min stock "cứng" đã lỗi thời từ 2-3 tháng trước.

Cách khắc phục là dùng QUERY hoặc IMPORTRANGE kéo dữ liệu từ sheet báo cáo bán hàng sang thẳng bảng tính min stock, thay vì copy-paste thủ công. Nếu đang dùng file báo cáo doanh số riêng, có thể tham khảo cấu trúc trong Mẫu Báo Cáo Bán Hàng Cho Google Sheets để đồng bộ cột dữ liệu, giúp công thức AVERAGEIFS ở bảng min stock tham chiếu đúng ngay từ đầu mà không cần chỉnh sửa lại cấu trúc cột.

Một điểm cũng hay bị bỏ qua: tốc độ nhập hàng bổ sung phụ thuộc vào tốc độ giao hàng của nhà cung cấp lẫn tốc độ xử lý đơn ra của chính shop. Nếu shop đang gặp tình trạng đơn hàng bị kẹt ở khâu vận chuyển làm chậm vòng quay tồn kho, phần theo dõi trạng thái giao hàng trong Template Quản Lý Giao Hàng và Vận Chuyển có thể ghép thêm vào để nhìn được bức tranh đầy đủ: không chỉ tồn kho thấp mà còn vì sao hàng bổ sung chưa về kịp.

Những lỗi thường gặp khi vận hành bảng min stock trong Google Sheets

Sau khi làm việc với khá nhiều bảng tồn kho của các shop nhỏ, mình nhận thấy vài lỗi lặp lại nhiều nhất, đáng để liệt kê ra trước khi bạn tự dựng bảng của mình:

  • Trộn công thức và số liệu nhập tay trong cùng một cột — ví dụ cột tồn kho đôi khi công thức, đôi khi copy-paste giá trị thủ công, dẫn đến việc kéo công thức xuống dòng mới bị gãy mà không ai phát hiện
  • Không khóa vùng công thức bằng Protected Ranges — nhân viên kho vô tình gõ đè lên ô công thức min stock khi nhập liệu nhanh, số liệu sai nhưng không báo lỗi gì
  • Quên cập nhật lead time khi đổi nhà cung cấp — công thức vẫn chạy đúng cú pháp nhưng dựa trên lead time cũ, khiến ngưỡng cảnh báo lệch xa thực tế
  • Dùng trigger Apps Script chạy quá thường xuyên — đặt trigger mỗi giờ trong khi dữ liệu tồn kho chỉ cập nhật cuối ngày, vừa tốn quota Google Apps Script vừa gây nhiễu email cảnh báo trùng lặp

Nếu bảng min stock của bạn đang là một phần trong hệ thống quản lý kho lớn hơn — có sheet nhập/xuất, sheet cảnh báo, sheet báo cáo riêng — việc tổ chức liên kết giữa các sheet này quan trọng không kém bản thân công thức min stock. Với những ai cần một hệ thống kho đầy đủ hơn thay vì chỉ một bảng cảnh báo đơn lẻ, mẫu tại Template Quản Lý Kho Hàng Google Sheets có sẵn cấu trúc liên kết đa sheet dùng làm khung tham khảo, hoặc bạn có thể lắp ráp thủ công theo từng phần đã nêu ở trên nếu quy mô kho còn nhỏ và muốn kiểm soát chi tiết từng công thức.

Câu hỏi thường gặp

Định mức tồn kho tối thiểu (min stock) khác gì với điểm đặt hàng lại (reorder point)?

Định mức tồn kho tối thiểu là ngưỡng an toàn thấp nhất được phép còn trong kho, dùng để cảnh báo khẩn cấp. Điểm đặt hàng lại tính thêm thời gian giao hàng của nhà cung cấp, nên thường cao hơn min stock để tránh đứt hàng trong lúc chờ nhập.

Cách tính định mức tồn kho tối thiểu cho từng SKU trong Sheets như thế nào?

Công thức cơ bản: Min Stock = Tốc độ bán trung bình/ngày × Số ngày giao hàng dự phòng + Tồn kho dự phòng (safety stock). Mỗi SKU nhập riêng 2 số liệu này vào 2 cột, Sheets tự tính min stock bằng công thức nhân cộng đơn giản.

Làm sao Google Sheets tự đổi màu cảnh báo khi tồn kho chạm mức tối thiểu?

Dùng Conditional Formatting với công thức tùy chỉnh so sánh cột Tồn kho hiện tại với cột Định mức tối thiểu, ví dụ =B2<=C2 để tô đỏ dòng SKU. Có thể thêm nhiều mức màu: vàng khi gần chạm, đỏ khi đã dưới ngưỡng.

File mẫu có tự gửi thông báo qua email hay Zalo khi hết hàng không?

Bản Sheets thuần dùng Conditional Formatting để cảnh báo trực quan trong file. Muốn gửi email/Zalo tự động cần thêm Apps Script kiểm tra điều kiện và gọi API gửi thông báo, phần này cần cấu hình riêng theo nhu cầu từng shop.

Bạn muốn áp dụng ngay mà không phải tự xây từ đầu?

Khám phá các mẫu Google Sheets và phần mềm quản lý dựng sẵn cho doanh nghiệp Việt tại SheetStore Marketplace.

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận