Hướng Dẫn Chi Tiết Tạo Mã Vạch Code 128 Trong Excel – Từ Cơ Bản Đến Nâng Cao

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ểmMô 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ạtCó 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 nhanhDễ 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).

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:

  1. 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.
  2. 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í.
  3. Tự động hoá: Khi thay đổi dữ liệu, mã vạch tự động cập nhật.
  4. Đị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.
  5. 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.

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ápYêu cầuƯu điểmNhược điểm
Sử dụng Font Code 128Cài đặt font (ví dụ: “Code 128 Barcode Font”)Đơn giản, không cần VBA, tốc độ nhanhCầ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ẩnThường có phí bản quyền; có thể gây xung đột add‑in.
VBA + FontViết macro tính Check Digit và chèn fontHoàn toàn tự động, tùy biến caoCầ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

  1. Truy cập website đáng tin cậy (ví dụ: https://www.idautomation.com/barcode-fonts/code-128/ hoặc https://www.barcodesinc.com/free-barcode-font/).
  2. Tải file Code128.ttf (hoặc Code128\_Barcode.ttf).
  3. Giải nén và cài đặt bằng cách nhấp chuột phải → Install (Windows) hoặc Double‑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
  • StartCode là giá trị bắt đầu (103 cho bộ A, 104 cho bộ B, 105 cho bộ C).
  • Value_i là giá trị ký tự thứ i trong bảng mã.
  • Position_i là 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‑916‑25
A‑Z33‑58
a‑z65‑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

  1. Mở Excel, vào Formulas → Name Manager → New.
  2. Đặt tên: CheckDigit128.
  3. 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ự.
– CharVal là hàm nội bộ chuyển ký tự thành giá trị trong bộ B.
– SUMPRODUCT tính Σ(value × position).
– Cuối cùng MOD(total,103) cho Check Digit.

  1. 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

  1. 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).
  2. 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.
  3. Để in hàng loạt, bạn có thể sử dụng Mail Merge trong Word hoặc Print Area trong 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

Code 128 Barcode Generator Excel
Code 128 Barcode Generator Excel
  1. Mở Excel → nhấn Alt + F11 để mở Visual Basic for Applications.
  2. Vào Insert → Module để tạo một module mới.
  3. 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

  1. Quay lại Excel, nhập dữ liệu cần mã hoá vào cột A (A2, A3, …).
  2. Chọn các ô dữ liệu (ví dụ: A2:A100).
  3. Nhấn Alt + F8, chọn ApplyCode128, rồi Run.
  4. 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ành cell.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ệuNế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ấtKhi 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ứcAdd‑inVBA + Font
Chi phíMiễn phíThường có phí (từ $30‑$200)Miễn phí
Độ phức tạpTrung 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ộ CCần công thức tùy biếnThông thường có sẵnCó thể lập trình
Tương thíchExcel 2007+Cần cài add‑in, có thể xung độtHoạ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ấpCầ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)
P001Sản phẩm A
P002Sản phẩm B
……
P1000Sản phẩm Z

9.2. Áp dụng macro

  1. Chọn cột A (A2:A1001).
  2. Chạy ApplyCode128.
  3. Kiểm tra cột B – mỗi ô chứa mã vạch.

9.3. In ấn bằng Mail Merge (Word)

  1. Lưu file Excel và mở Word → Mailings → Start Mail Merge → Labels.
  2. Chọn Label Options → Avery 5160 (hoặc kích thước tùy chỉnh).
  3. Select Recipients → Use an Existing List → chọn file Excel.
  4. Chèn Merge Field Column B (mã vạch) và Column B (tên sản phẩm) nếu cần.
  5. 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ếnMô tả
Tích hợp QR CodeThê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 APIXâ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 AutomateDù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 LearningPhâ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!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận