Công ty CP Công nghệ ZoneTech
Chấm điểm miễn phí

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.

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ệcFile chỉ dùng công thứcFile có macro VBA
Ghi phiếu nhập, xuấtGõ 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ồnChỉ cảnh báo sau khi đã ghiChặn xuất vượt tồn trước khi ghi
Mã hàng không có trong danh mụcCông thức bỏ sót, tồn saiBá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.

SheetNội dungTên bảng hoặc ô
DanhMucMaHang, TenHang, DonVi, TonToiThieu, TonBảng tblHang
SoKhoNgay, Loai, MaHang, SoLuong, GhiChuBảng tblGiaoDich, đúng 5 cột, đúng thứ tự
PhieuC2 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.

Sơ đồ quản lý kho bằng Excel VBA: điền sheet Phieu, kiểm tra 5 điều kiện, thêm dòng vào tblGiaoDich, cột Ton tự cập nhật

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.

Ghi phiếu nhập xuất kho tự động bằng macro VBA
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ầnC3C4C5Kết quả đúng
1NHAPTRA10050Ghi một dòng, Ton thành 60
2XUATTRA10080Báo xuất vượt tồn (đang tồn 60), không ghi
3XUATTRA10O (chữ O)5Báo mã không có trong danh mục
4XUATTRA100để trốngBáo số lượng phải lớn hơn 0
5XUATTRA10025Ghi 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.

Cẩn thận khi mở file kho có macro

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.

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

Thành viên TRAVINA GROUP
Zalo