Có thể bạn quan tâm: Cách Xây Dựng Và Duy Trì Định Dạng Bảng Rõ Ràng Trong Excel: Hướng Dẫn Chi Tiết Cho Người Dùng Mọi Trình Độ
1. Giới thiệu chung về mã vạch Code 128
Mã vạch (barcode) là một phương tiện quan trọng trong quản lý hàng hoá, kho bãi, bán lẻ và nhiều lĩnh vực công nghiệp khác. Trong số các chuẩn mã vạch hiện nay, Code 128 nổi bật bởi khả năng mã hoá toàn bộ tập ký tự ASCII (0‑255), độ chính xác cao và độ dày mỏng, giúp tiết kiệm không gian trên nhãn. Đặc biệt, Code 128 hỗ trợ ba bộ ký tự (A, B, C) cho phép tối ưu hoá độ dài mã vạch tùy theo loại dữ liệu (chữ, số, ký tự đặc biệt).
1.1. Các đặc điểm nổi bật của Code 128
| Đặc điểm | Mô tả |
|---|---|
| Độ phủ ký tự | Toàn bộ 128 ký tự ASCII, bao gồm số, chữ cái, ký tự điều khiển và ký tự đặc biệt. |
| Ba bộ ký tự | A (chữ hoa, số, ký tự điều khiển), B (chữ hoa và thường, số, ký tự đặc biệt), C (cặp số – mỗi ký tự đại diện cho 2 chữ số). |
| Mã kiểm tra (Check Digit) | Tự động tính toán để giảm lỗi quét. |
| Chiều rộng linh hoạt | Có thể điều chỉnh độ rộng mô-đun (module width) để phù hợp với nhu cầu in ấn. |
| Tốc độ quét nhanh | Dễ dàng đọc qua laser, CCD hoặc camera. |
Nhờ những ưu điểm trên, Code 128 được sử dụng rộng rãi trong:
- Nhãn hàng hoá và bao bì.
- Thẻ kho, phiếu xuất nhập.
- Vé máy bay, vé tàu, vé sự kiện.
- Ứng dụng y tế (định danh mẫu xét nghiệm, thuốc).
Có thể bạn quan tâm: Cách Xóa Các Dòng Trống Trong Excel Một Cách Hiệu Quả Và Nhanh Chóng
2. Lý do nên tạo Code 128 trực tiếp trong Excel
Excel không chỉ là công cụ tính toán mà còn là một nền tảng mạnh mẽ để tự động hoá quy trình tạo mã vạch. Dưới đây là những lợi ích khi sử dụng Excel:
- Tích hợp dữ liệu: Dữ liệu sản phẩm, số lô, ngày sản xuất đã có trong bảng tính, chỉ cần một công thức là tạo mã vạch ngay lập tức.
- Tiết kiệm chi phí: Không cần mua phần mềm chuyên dụng đắt tiền; chỉ cần cài đặt một font hoặc một add‑in miễn phí.
- Tự động hoá: Khi thay đổi dữ liệu, mã vạch tự động cập nhật.
- Định dạng linh hoạt: Kết hợp với các công cụ in (mail merge, VBA, Power Query) để in hàng loạt.
- Dễ học: Người dùng đã quen với Excel sẽ nhanh chóng nắm bắt cách tạo mã vạch.
Có thể bạn quan tâm: Cách Chỉnh Chữ Nằm Dọc Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
3. Các phương pháp tạo mã vạch Code 128 trong Excel
Hiện nay có ba cách phổ biến:
| Phương pháp | Yêu cầu | Ưu điểm | Nhược điểm |
|---|---|---|---|
| Sử dụng Font Code 128 | Cài đặt font (ví dụ: “Code 128 Barcode Font”) | Đơn giản, không cần VBA, tốc độ nhanh | Cần tính toán Check Digit thủ công hoặc dùng công thức; không hỗ trợ tự động chuyển đổi bộ ký tự. |
| Sử dụng Add‑in (Add‑in barcode) | Cài đặt add‑in (BarCodeWiz, TBarCode, IDAutomation) | Tự động tính Check Digit, hỗ trợ nhiều chuẩn | Thường có phí bản quyền; có thể gây xung đột add‑in. |
| VBA + Font | Viết macro tính Check Digit và chèn font | Hoàn toàn tự động, tùy biến cao | Cần kiến thức lập trình VBA; không thích hợp cho người không rành VBA. |
Trong bài viết này, chúng ta sẽ đi sâu vào hai cách miễn phí nhất: (1) Font Code 128 + công thức Excel và (2) VBA + Font Code 128. Cả hai đều không tốn phí bản quyền và đáp ứng nhu cầu tạo hàng nghìn mã vạch trong một file.
4. Cách 1: Sử dụng Font Code 128 Kèm Công Thức Excel
4.1. Tải và cài đặt font Code 128
- Truy cập website đáng tin cậy (ví dụ:
https://www.idautomation.com/barcode-fonts/code-128/hoặchttps://www.barcodesinc.com/free-barcode-font/). - Tải file
Code128.ttf(hoặcCode128\_Barcode.ttf). - Giải nén và cài đặt bằng cách nhấp chuột phải →
Install(Windows) hoặcDouble‑click → Install Font(macOS).
Lưu ý: Khi cài đặt font, hãy khởi động lại Excel để font được nhận diện.
4.2. Công thức tính Check Digit cho Code 128
Code 128 yêu cầu một Check Digit (ký tự kiểm tra) để giảm lỗi quét. Công thức tính như sau:
StartCode + Σ (Value_i × Position_i) mod 103
StartCodelà giá trị bắt đầu (103 cho bộ A, 104 cho bộ B, 105 cho bộ C).Value_ilà giá trị ký tự thứ i trong bảng mã.Position_ilà vị trí (bắt đầu từ 1).
Đối với bộ B (phổ biến nhất vì hỗ trợ cả chữ hoa, thường và số), giá trị StartCode = 104.
4.2.1. Bảng giá trị ký tự bộ B (rút gọn)
| Ký tự | Giá trị |
|---|---|
| 0‑9 | 16‑25 |
| A‑Z | 33‑58 |
| a‑z | 65‑90 |
| Các ký tự đặc biệt (space, !, “, #, …) | 0‑31, 32, 58‑63… |
Để đơn giản, chúng ta sẽ sử dụng một hàm Excel tùy chỉnh để tự động chuyển ký tự thành giá trị và tính Check Digit.
4.3. Tạo hàm tính Check Digit bằng Named Formula
- Mở Excel, vào
Formulas → Name Manager → New. - Đặt tên:
CheckDigit128. - Trong trường
Refers to, nhập công thức sau (giả sử dữ liệu cần mã hoá nằm ở ôA2):
=LET( txt, TRIM(A2), len, LEN(txt), startVal, 104, // Start Code cho bộ B // Hàm chuyển ký tự thành giá trị trong bộ B CharVal, LAMBDA(ch, IF( CODE(ch)>=48, IF(CODE(ch)<=57, CODE(ch)-48+16, // 0‑9 IF(CODE(ch)>=65, IF(CODE(ch)<=90, CODE(ch)-65+33, // A‑Z IF(CODE(ch)>=97, IF(CODE(ch)<=122, CODE(ch)-97+65, // a‑z SWITCH(CODE(ch), 32, 0, // space 33, 1, // ! 34, 2, // " 35, 3, // # 36, 4, // $ 37, 5, // % 38, 6, // & 39, 7, // ' 40, 8, // ( 41, 9, // ) 42,10, // 43,11, // + 44,12, // , 45,13, // - 46,14, // . 47,15, // / 58,58, // : 59,59, // ; 60,60, // < 61,61, // = 62,62, // > 63,63, // ? 64,64, // @ 91,91, // 92,92, // \ 93,93, // 94,94, // ^ 95,95, // _ 96,96, // ` 123,123,124,124,125,125,126,126,127,127, 0) // Mặc định trả về 0 nếu không khớp ))))), // Tính tổng: start + Σ(valueposition) total, startVal + SUMPRODUCT( SEQUENCE(len,1,1,1), MAP(MID(txt, SEQUENCE(len,1,1,1),1), CharVal) ), // Mod 103 để ra Check Digit MOD(total,103)
)
Giải thích nhanh:
–SEQUENCE(len)tạo mảng vị trí 1‑len.
–MID(txt, …)lấy từng ký tự.
–CharVallà hàm nội bộ chuyển ký tự thành giá trị trong bộ B.
–SUMPRODUCTtính Σ(value × position).
– Cuối cùngMOD(total,103)cho Check Digit.
- Nhấn OK để lưu.
4.4. Tạo công thức hiển thị mã vạch cuối cùng
Giả sử:
- Cột A: dữ liệu gốc (mã sản phẩm, số lô…).
- Cột B: kết quả mã vạch (được áp dụng font Code 128).
Trong ô B2, nhập công thức:
=CHAR(204) & A2 & CHAR(CheckDigit128) & CHAR(206)
Giải thích:
CHAR(204)→ ký tự Start B trong font Code 128.A2→ chuỗi dữ liệu gốc.CHAR(CheckDigit128)→ ký tự Check Digit tính được.CHAR(206)→ ký tự Stop trong font Code 128.
Sau khi nhập công thức, định dạng ô B2 thành font “Code 128” (hoặc tên font bạn đã cài). Kéo công thức xuống để áp dụng cho toàn bộ danh sách.
4.5. Kiểm tra và in ấn
- Kiểm tra bằng cách quét một vài mã vạch bằng máy quét hoặc ứng dụng smartphone (ví dụ: “Barcode Scanner” trên Android).
- Nếu quét thành công, định dạng kích thước (font size) thường từ 30‑70 pt tùy vào độ dày mong muốn.
- Để in hàng loạt, bạn có thể sử dụng
Mail Mergetrong Word hoặcPrint Areatrong Excel.
5. Cách 2: Tự Động Hoá Hoàn Toàn Bằng VBA + Font Code 128
Với VBA, chúng ta có thể tự động tính Check Digit, chuyển đổi bộ ký tự (A, B, C) và định dạng font trong cùng một macro. Điều này giúp người không rành công thức vẫn tạo mã vạch một cách nhanh chóng.
5.1. Chuẩn bị môi trường VBA

Có thể bạn quan tâm: Giãn Khoảng Cách Chữ Trong Excel 2026: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Mở Excel → nhấn
Alt + F11để mở Visual Basic for Applications. - Vào
Insert → Moduleđể tạo một module mới. - Dán đoạn mã sau vào module.
Option Explicit '--- Bảng giá trị cho bộ B (ASCII 32‑126)
Private Function CharValueB(ch As String) As Long Dim ascVal As Long ascVal = Asc(ch) Select Case ascVal Case 32 To 126 CharValueB = ascVal - 32 Case 0 To 31 CharValueB = ascVal + 64 'Control characters (rare) Case Else CharValueB = 0 End Select
End Function '--- Tính Check Digit cho chuỗi (bộ B)
Private Function ComputeCheckDigit(ByVal txt As String) As Long Dim i As Long, total As Long, pos As Long total = 104 'Start Code B For i = 1 To Len(txt) pos = i total = total + CharValueB(Mid$(txt, i, 1)) pos Next i ComputeCheckDigit = total Mod 103
End Function '--- Hàm sinh chuỗi mã vạch Code 128 (bộ B)
Public Function Code128Barcode(ByVal txt As String) As String Dim chk As Long chk = ComputeCheckDigit(txt) 'Start B = Chr(204), Stop = Chr(206) trong font Code 128 Code128Barcode = Chr$(204) & txt & Chr$(chk) & Chr$(206)
End Function '--- Macro áp dụng cho vùng dữ liệu đã chọn
Sub ApplyCode128() Dim rng As Range, cell As Range On Error GoTo ErrHandler Set rng = Selection For Each cell In rng If Not IsEmpty(cell) Then cell.Offset(0, 1).Value = Code128Barcode(CStr(cell.Value)) cell.Offset(0, 1).Font.Name = "Code 128" 'Tên font đã cài cell.Offset(0, 1).Font.Size = 48 'Điều chỉnh tùy ý End If Next cell MsgBox "Đã tạo mã vạch cho " & rng.Cells.Count & " ô.", vbInformation Exit Sub
ErrHandler: MsgBox "Lỗi: " & Err.Description, vbCritical
End Sub
5.2. Cách sử dụng macro
- Quay lại Excel, nhập dữ liệu cần mã hoá vào cột A (A2, A3, …).
- Chọn các ô dữ liệu (ví dụ: A2:A100).
- Nhấn
Alt + F8, chọnApplyCode128, rồi Run. - Kết quả sẽ xuất hiện ở cột B (bên phải), đã được định dạng font Code 128 và kích thước 48 pt.
Mẹo: Nếu muốn thay đổi cột đích, chỉnh
cell.Offset(0, 1)thànhcell.Offset(0, 2)(cột C) hoặc tùy ý.
5.3. Tối ưu hoá: Hỗ trợ bộ C (cặp số)
Bộ C cho phép nén cặp số (2 chữ số = 1 ký tự), giảm độ dài mã vạch gấp đôi. Để tự động chuyển sang bộ C khi dữ liệu là số chẵn, chúng ta mở rộng hàm:
'--- Kiểm tra chuỗi chỉ gồm số và độ dài chẵn
Private Function IsNumericEven(txt As String) As Boolean IsNumericEven = (txt Like "!0-9") = False And Len(txt) Mod 2 = 0
End Function '--- Tính Check Digit cho bộ C
Private Function ComputeCheckDigitC(ByVal txt As String) As Long Dim i As Long, total As Long, pos As Long, val As Long total = 105 'Start Code C For i = 1 To Len(txt) Step 2 pos = (i + 1) / 2 val = CLng(Mid$(txt, i, 2)) 'Hai chữ số thành một số total = total + val pos Next i ComputeCheckDigitC = total Mod 103
End Function '--- Hàm tổng hợp
Public Function Code128BarcodeSmart(ByVal txt As String) As String Dim chk As Long, result As String If IsNumericEven(txt) Then chk = ComputeCheckDigitC(txt) result = Chr$(206) & txt & Chr$(chk) & Chr$(207) 'Start C = 206, Stop = 207 Else chk = ComputeCheckDigit(txt) result = Chr$(204) & txt & Chr$(chk) & Chr$(206) 'Start B End If Code128BarcodeSmart = result
End Function
Sau khi thay thế hàm Code128Barcode bằng Code128BarcodeSmart, macro sẽ tự động chọn bộ C cho chuỗi số chẵn, giúp giảm độ dài nhãn.
5.4. Bảo mật macro
- Khi lưu file, chọn Excel Macro‑Enabled Workbook (.xlsm).
- Nếu xuất bản cho người dùng khác, ký số (digital signature) hoặc đặt mật khẩu cho VBA project để tránh sửa đổi.
6. Kiểm tra độ chính xác và độ tương thích
6.1. Kiểm tra bằng phần mềm quét
- Ứng dụng di động: “Barcode Scanner”, “QR & Barcode Scanner”.
- Phần mềm PC: “ZBar”, “BarTender Demo”.
Thực hiện quét 10‑20 mã vạch ngẫu nhiên để chắc chắn:
- Dữ liệu đọc ra khớp với dữ liệu gốc.
- Không có lỗi “checksum”.
6.2. Kiểm tra trên máy in nhiệt
Khi in trên máy in nhiệt (Thermal printer) thường dùng cho nhãn, cần chú ý:
- Độ phân giải: ít nhất 200 dpi để mã vạch không bị mờ.
- Khoảng cách: để ít nhất 5 mm khoảng trống xung quanh (quiet zone) để máy quét nhận diện.
- Kích thước: Độ rộng tối thiểu 1,5 mm cho mỗi mô-đun; trong Excel, font size 48‑72 pt thường cho độ rộng phù hợp.
7. Các lưu ý khi triển khai trong môi trường doanh nghiệp
| Vấn đề | Giải pháp |
|---|---|
| Quản lý font | Đặt font Code 128 trong thư mục chung (C:\Windows\Fonts) và tạo Group Policy để tự động cài đặt trên các máy trạm. |
| Độ bảo mật dữ liệu | Nếu mã vạch chứa thông tin nhạy cảm, cân nhắc mã hoá (AES) trước khi chuyển thành mã vạch. |
| Tính năng đa ngôn ngữ | Code 128 chỉ hỗ trợ ASCII; nếu cần ký tự Unicode, chuyển sang Code 128 Extended hoặc QR Code. |
| Hiệu suất | Khi danh sách > 50.000 dòng, ưu tiên dùng VBA (macro) thay vì công thức để giảm thời gian tính toán. |
| Bảo trì | Thêm cột trạng thái để đánh dấu “Đã in”, “Chưa in”, giúp theo dõi quy trình in ấn. |
8. So sánh nhanh: Font vs Add‑in vs VBA
| Tiêu chí | Font + Công thức | Add‑in | VBA + Font |
|---|---|---|---|
| Chi phí | Miễn phí | Thường có phí (từ $30‑$200) | Miễn phí |
| Độ phức tạp | Trung bình (công thức dài) | Thấp (giao diện UI) | Trung bình‑cao (cần VBA) |
| Tự động hoá | Giới hạn (công thức) | Cao (nhiều tùy chọn) | Cao (linh hoạt) |
| Hỗ trợ bộ C | Cần công thức tùy biến | Thông thường có sẵn | Có thể lập trình |
| Tương thích | Excel 2007+ | Cần cài add‑in, có thể xung đột | Hoạt động trên mọi phiên bản hỗ trợ VBA |
| Bảo trì | Dễ (chỉ chỉnh công thức) | Phụ thuộc nhà cung cấp | Cần người biết VBA để sửa |
9. Thực hành: Tạo danh sách mã vạch cho 1.000 sản phẩm
9.1. Chuẩn bị dữ liệu
| A (Mã SP) | B (Tên SP) |
|---|---|
| P001 | Sản phẩm A |
| P002 | Sản phẩm B |
| … | … |
| P1000 | Sản phẩm Z |
9.2. Áp dụng macro
- Chọn cột A (A2:A1001).
- Chạy ApplyCode128.
- Kiểm tra cột B – mỗi ô chứa mã vạch.
9.3. In ấn bằng Mail Merge (Word)
- Lưu file Excel và mở Word →
Mailings → Start Mail Merge → Labels. - Chọn Label Options → Avery 5160 (hoặc kích thước tùy chỉnh).
Select Recipients → Use an Existing List→ chọn file Excel.- Chèn Merge Field
Column B(mã vạch) và Column B (tên sản phẩm) nếu cần. - Preview → Finish & Merge → Print Documents.
Kết quả: 1.000 nhãn với mã vạch Code 128 sẵn sàng cho kho.
10. Tổng kết và hướng phát triển
Việc tạo mã vạch Code 128 trong Excel không còn là công việc khó khăn hay tốn kém. Bằng cách:
- Cài đặt font Code 128 (miễn phí).
- Sử dụng công thức để tính Check Digit.
- Hoặc viết macro VBA để tự động hoá toàn bộ quy trình.
Bạn có thể nhanh chóng chuyển đổi hàng nghìn bản ghi thành mã vạch chất lượng, sẵn sàng cho việc quét, theo dõi và quản lý. Các bước thực hiện đã được trình bày chi tiết, kèm ví dụ thực tế, giúp người dùng ở mọi trình độ – từ người mới bắt đầu đến chuyên gia Excel – áp dụng ngay.
10.1. Những cải tiến tiềm năng
| Cải tiến | Mô tả |
|---|---|
| Tích hợp QR Code | Thêm tùy chọn tạo QR Code cho các trường hợp cần lưu trữ lượng lớn dữ liệu. |
| Web API | Xây dựng một API (Node.js/ASP.NET) để nhận dữ liệu và trả về hình ảnh PNG của Code 128, tích hợp vào hệ thống ERP. |
| Power Automate | Dùng Power Automate (Flow) để tự động tạo và lưu PNG mã vạch vào SharePoint mỗi khi có bản ghi mới. |
| Machine Learning | Phân tích tần suất lỗi quét, đề xuất tối ưu độ rộng mô-đun tự động. |
10.2. Lời khuyên cuối cùng
- Kiểm tra định kỳ: Thực hiện quét mẫu định kỳ để phát hiện lỗi in hoặc lỗi tính Check Digit.
- Đào tạo nhân viên: Đảm bảo người vận hành hiểu cách đọc mã vạch và nhận biết lỗi “unreadable”.
- Sao lưu macro: Khi phát triển VBA, lưu bản sao mã nguồn trong tài liệu
.basđể tránh mất mát.
Bạn đã sẵn sàng? Hãy tải font Code 128, sao chép công thức hoặc macro trên, và bắt đầu tự động hoá quy trình tạo mã vạch cho doanh nghiệp của mình ngay hôm nay!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
