Quản lý kho bằng Excel VBA: tự động nhập xuất, khi nào không nên dùng
Quản lý kho bằng Excel VBA là gắn thêm một macro vào file kho sẵn có. Nhân viên điền phiếu rồi bấm nút, macro kiểm tra và ghi một dòng vào sổ kho, còn phần cộng tồn vẫn do công thức lo. Cách dựng file nền có ở bài quản lý kho bằng Excel; bài này chỉ nói phần macro VBA.
Tóm tắt nhanh
- VBA hợp với thao tác lặp lại: ghi phiếu, chặn xuất vượt tồn, xóa ô nhập sau khi lưu.
- File lưu dạng .xlsm và chạy bằng Excel trên máy tính, vì Excel cho web không chạy VBA.
Mục lục
Quản lý kho bằng Excel VBA làm thêm được gì?
Công thức tính được tồn nhưng không ngăn người gõ sai. Quản lý kho bằng Excel VBA lo đúng bước ghi dữ liệu.
| Việc | File chỉ dùng công thức | File có macro VBA |
|---|---|---|
| Ghi phiếu nhập, xuất | Gõ thẳng vào sổ, dễ đè dòng cũ | Điền phiếu, bấm nút, macro thêm dòng mới |
| Xuất quá số tồn | Chỉ cảnh báo sau khi đã ghi | Chặn xuất vượt tồn trước khi ghi |
| Mã hàng không có trong danh mục | Công thức bỏ sót, tồn sai | Báo lỗi, không ghi |
Một người ghi, vài chục mã hàng thì file công thức là đủ. Quản lý kho bằng Excel VBA đáng làm khi lỗi gõ tay bắt đầu làm lệch tồn.
Chuẩn bị file: 3 sheet và 2 bảng
Bật tab Developer trong File, Options, Customize Ribbon. File .xlsm là định dạng Excel Macro-Enabled Workbook, giữ được mã VBA trong file. Nếu lưu dạng .xlsx thì file mất toàn bộ macro.
| Sheet | Nội dung | Tên bảng hoặc ô |
|---|---|---|
| DanhMuc | MaHang, TenHang, DonVi, TonToiThieu, Ton | Bảng tblHang |
| SoKho | Ngay, Loai, MaHang, SoLuong, GhiChu | Bảng tblGiaoDich, đúng 5 cột, đúng thứ tự |
| Phieu | C2 ngày, C3 loại, C4 mã hàng, C5 số lượng, C6 ghi chú | Vùng ô thường |
Bảng Excel (Table) là vùng dữ liệu có tên, tự giãn khi thêm dòng nên macro ghi tiếp dễ. Tạo bảng bằng Ctrl+T, đặt tên ở ô Table Name. Cột Ton của tblHang dùng công thức SUMIFS dưới đây.
=SUMIFS(tblGiaoDich[SoLuong];tblGiaoDich[MaHang];[@MaHang];tblGiaoDich[Loai];"NHAP")-SUMIFS(tblGiaoDich[SoLuong];tblGiaoDich[MaHang];[@MaHang];tblGiaoDich[Loai];"XUAT")
Máy đặt dấu ngăn là dấu phẩy thì đổi dấu chấm phẩy thành dấu phẩy. Ô C3 đặt danh sách chọn gồm NHAP và XUAT.

Mã VBA ghi phiếu nhập xuất
Đoạn mã dưới đây là phần lõi của file quản lý kho bằng Excel VBA. Vào Developer, Visual Basic, chọn Insert rồi Module và dán vào.

Option Explicit
Sub GhiPhieu()
Dim ws As Worksheet, hang As ListObject, so As ListObject
Dim ma As String, loai As String, sl As Double, i As Variant
Set ws = ThisWorkbook.Worksheets("Phieu")
Set hang = ThisWorkbook.Worksheets("DanhMuc").ListObjects("tblHang")
Set so = ThisWorkbook.Worksheets("SoKho").ListObjects("tblGiaoDich")
ma = Trim(CStr(ws.Range("C4").Value))
loai = UCase(Trim(CStr(ws.Range("C3").Value)))
If Not IsDate(ws.Range("C2").Value) Then MsgBox "Chua nhap ngay": Exit Sub
If loai <> "NHAP" And loai <> "XUAT" Then MsgBox "Loai sai": Exit Sub
If Not IsNumeric(ws.Range("C5").Value) Then MsgBox "So luong sai": Exit Sub
sl = CDbl(ws.Range("C5").Value)
If sl <= 0 Then MsgBox "So luong phai lon hon 0": Exit Sub
If hang.ListRows.Count = 0 Then MsgBox "Danh muc trong": Exit Sub
i = Application.Match(ma, hang.ListColumns("MaHang").DataBodyRange, 0)
If IsError(i) Then MsgBox "Ma khong co trong danh muc": Exit Sub
If loai = "XUAT" And sl > hang.ListColumns("Ton").DataBodyRange.Cells(i, 1).Value Then
MsgBox "Xuat vuot ton": Exit Sub
End If
so.ListRows.Add.Range.Value = Array(ws.Range("C2").Value, loai, ma, sl, ws.Range("C6").Value)
ws.Range("C4:C6").ClearContents
MsgBox "Da ghi phieu"
End Sub
Sai một điều kiện là macro dừng, không ghi gì. Ô số lượng trống được VBA coi là 0 nên bị chặn. ListRows.Add thêm một dòng cuối bảng và trả về dòng đó (tài liệu Microsoft, đọc ngày 16/10/2026).
Thông báo trong mã viết không dấu, vì trình soạn VBA dùng bảng mã cũ, chữ có dấu dễ thành dấu hỏi.
Gắn nút và chạy thử với dữ liệu mẫu
Vào Developer, Insert, chọn Button (Form Control), vẽ nút trên sheet Phieu rồi chọn macro GhiPhieu. Chạy đủ các ca dưới đây trước khi giao file quản lý kho bằng Excel VBA cho nhân viên.
Ví dụ giả định: cửa hàng trà, mã TRA100 tồn 10 gói (tồn đầu kỳ ghi thành một dòng NHAP).
| Lần | C3 | C4 | C5 | Kết quả đúng |
|---|---|---|---|---|
| 1 | NHAP | TRA100 | 50 | Ghi một dòng, Ton thành 60 |
| 2 | XUAT | TRA100 | 80 | Báo xuất vượt tồn (đang tồn 60), không ghi |
| 3 | XUAT | TRA10O (chữ O) | 5 | Báo mã không có trong danh mục |
| 4 | XUAT | TRA100 | để trống | Báo số lượng phải lớn hơn 0 |
| 5 | XUAT | TRA100 | 25 | Ghi một dòng, Ton còn 35 |
Sổ kho trong file chỉ là sổ theo dõi nội bộ, không thay chứng từ kế toán. Doanh nghiệp lập phiếu nhập, xuất kho theo Thông tư 99/2025/TT-BTC. Hộ kinh doanh ghi sổ S2d-HKD theo Thông tư 152/2025/TT-BTC.
Mở file có macro: cảnh báo bảo mật
Theo Microsoft (đọc ngày 16/10/2026), Office trên Windows chặn macro trong file tải từ internet. Kênh Current Channel áp dụng từ bản 2206, triển khai từ 27/7/2022.

File quản lý kho bằng Excel VBA nhận qua email, Zalo thì bấm chuột phải, chọn Properties. Ở tab General, tích ô Unblock rồi mở lại. Trusted Location là thư mục tin cậy, nơi macro chạy không hỏi, nên Microsoft khuyên dùng hạn chế.
Khi nào không nên quản lý kho bằng Excel VBA?
Theo hỗ trợ của Microsoft, Excel cho web không tạo, chạy hay sửa được macro VBA. Nên chọn cách khác trong ba trường hợp dưới đây.
- Nhân viên ghi phiếu bằng điện thoại hoặc trình duyệt.
- Hai người trở lên cần ghi cùng lúc vào một sổ.
- Kho cần cấp phát theo lệnh sản xuất; bài quản lý kho vật tư bằng Excel có mẫu riêng cho việc này.
Cần nhiều bảng liên kết, nhiều người dùng trong mạng nội bộ thì xem bài quản lý kho bằng Access. Chưa có file nền thì dùng bộ quản lý kho và bán hàng bằng Excel miễn phí.
Có người theo dõi số bán hàng cùng bạn
Quản lý kho bằng Excel VBA chỉ đúng khi nếp ghi phiếu và đối chiếu tồn đều đặn. ZoneTech cùng doanh nghiệp đặt nếp đó qua giải pháp vận hành bán hàng ZoneOps. Giá từng gói có ở bảng giá.
Câu hỏi thường gặp
Macro VBA có chạy trên Google Sheets không?
Không, file quản lý kho bằng Excel VBA chỉ chạy trên Excel máy tính, Google Sheets không chạy mã VBA. Muốn tự động hóa trên Sheets phải viết lại bằng Apps Script.
Cập nhật lần cuối: 01/11/2026 · Biên soạn: Đỗ Hữu Thuận