Có thể bạn quan tâm: Hàm Đếm Số Lượng Nhân Viên Trong Excel: Tối Ưu Hóa Quản Lý Dữ Liệu Doanh Nghiệp
Giới thiệu
Trong nhiều tình huống nghiệp vụ và tài chính, việc chuyển đổi số thành chữ (hay còn gọi là “chữ số” hoặc “số thành chữ”) là một yêu cầu phổ biến. Bạn cần ghi số tiền trên phiếu thu, hóa đơn, bảng lương hoặc hợp đồng bằng chữ để tránh sai sót, nâng cao tính chuyên nghiệp và tuân thủ quy định pháp luật. Mặc dù Excel cung cấp rất nhiều hàm tính toán mạnh mẽ, nhưng đi kèm với nó không có Enumerator mặc định để chuyển đổi số thành chữ. Vì vậy, chúng ta cần tìm ra các phương pháp giúp thực hiện công việc này một cách dễ dàng và linh hoạt.
Bài viết này sẽ cung cấp cho bạn một loạt các giải pháp, từ cách sử dụng hàm VBA, Power Query, đến các add‑in và công cụ bên thứ ba. Ngoài ra, chúng ta cũng sẽ bàn về cách tối ưu mã, tránh lỗi phổ biến và áp dụng trong các trường hợp thực tế.
Mục tiêu của bài viết
– Hiểu được lý do tại sao Excel không có hàm chuyển số thành chữ ngay trong công cụ.
– Nắm bắt được các phương pháp khác nhau để thực hiện công việc này.
– Áp dụng nhanh chóng và an toàn trong các file Excel của bạn.
– Cải thiện quy trình làm việc, giảm thiểu sai sót và tăng tính chuyên nghiệp.
Có thể bạn quan tâm: Hàm Vnd Đổi Số Ra Chữ Trong Excel
1. Lý do Excel không có hàm chuyển số thành chữ sẵn có
Excel, như các bảng tính khác, tập trung vào tính toán số học, thống kê, biểu đồ và các công cụ dữ liệu. Việc chuyển số thành chữ là một tác vụ “định dạng” có tính đa ngôn ngữ, phụ thuộc vào quy tắc ngữ pháp, dấu cách, dấu câu và thậm chí là phong cách viết tùy theo quy định của từng ngành. Việc cài đặt một hàm mặc định cho tất cả các ngôn ngữ sẽ làm phức tạp quá trình phát triển và bảo trì của Microsoft. Vì vậy, Excel chỉ cung cấp một số hàm chuyển đổi căn bản (ví dụ: TEXT với định dạng #,##0.00) thay vì chuyển toàn bộ thành chữ.
Có thể bạn quan tâm: Hàm Value Trong Excel: Cách Dùng, Ứng Dụng Và Những Lưu Ý Quan Trọng
2. Cách triển khai chuyển số thành chữ trong Excel
2.1. Sử dụng hàm VBA (Visual Basic for Applications)
2.1.1. Lý do chọn VBA
- Tính linh hoạt: Bạn có thể tùy chỉnh logic, hỗ trợ nhiều ngôn ngữ, chèn dấu câu, hỗ trợ chữ nửa chữ, chữ số thập phân, v.v.
- Tích hợp ngay trong Excel: Không cần cài đặt add‑in bên ngoài.
- Được hỗ trợ rộng rãi: Mọi phiên bản Excel đều có VBA.
2.1.2. Viết hàm SpellNumber (văn bản tiếng Việt)
Dưới đây là một hàm VBA đầy đủ, có thể chuyển đổi số từ 0 đến 999. mỹ 999.999.999.999 (tương ứng tới 12 chữ số). Hàm còn hỗ trợ việc chuyển đổi thành chữ số thập phân, ví dụ: 123.45 → “một trăm hai mươi ba phẩy bốn năm”.
Lưu ý: Nếu bạn muốn hỗ trợ nhiều ngroga hơn, bạn cần mở rộng logic.
Option Explicit ' Hàm chính: chuyển số thành chữ (đơn vị tiền tệ)
Public Function SoThanhChu(ByVal s As Double) As String Dim intPart As Long Dim decPart As Long Dim decStr As String intPart = Int(s) decPart = Round((s - intPart) 100) ' Chỉ lấy 2 chữ số thập phân SoThanhChu = GiuaSoThanhChu(intPart) & " đồng" If decPart > 0 Then decStr = GiuaSoThanhChu(decPart) SoThanhChu = SoThanhChu & " và " & decStr & " xu" End If
End Function ' Hàm phụ: chuyển số nguyên thành chữ
Private Function GiuaSoThanhChu(ByVal N As Long) As String Dim result As String Dim units() As Subs Dim nums() As String Dim i As Integer Dim subNum As Long nums = Split("không một hai ba bốn năm sáu bảy tám chín", " ") If N = 0 Then GiuaSoThanhChu = "không" Exit Function End If Dim levelNames() As String levelNames = Split("nghìn triệu tỷ", " ") ' Xử lý từng phần 3 chữ số Dim parts() As Long Dim partCount As Integer partCount = 0 Dim tempN As Long tempN = N Do While tempN > 0 partCount = partCount + 1 ReDim Preserve parts(partCount) parts(partCount) = tempN Mod 1000 tempN = tempN \ 1000 Loop For i = partCount To 1 Step -1 subNum = parts(i) If subNum > 0 Then result = result & SoMotBaChuc(subNum) & " " & IIf(i <= UBound(levelNames), levelNames(i - 1) & " ", "") End If Next i GiuaSoThanhChu = Trim(result)
End Function ' Hàm xử lý 3 chữ số
Private Function SoMotBaChuc(ByVal N As Long) As String Dim nums() As String nums = Split("không một hai ba bốn năm sáu bảy tám chín", " ") Dim hundreds As Long, tens As Long, units As Long hundreds = N \ 100 tens = (N Mod 100) \ 10 units = N Mod 10 Dim res As String If hundreds > 0 Then res = nums(hundreds) & " trăm " End If If tens > 1 Then res = res & nums(tens) & " mươi " If units > 0 Then res = res & nums(units) & " " End If ElseIf tens = 1 Then res = res & "mười " If units > 0 Then res = res & nums(units) & " " End If ElseIf tens = 0 Then If units > 0 And hundreds > 0 Then res = res & "lẻ " End If If units > 0 Then res = res & nums(units) & " " End If End If SoMotBaChuc = Trim(res)
End Function
2.1.3. Cài đặt hàm
- Mở Excel, nhấn
ALT + F11để vào cửa sổ VBA. - Vào
Insert → Modulevà dán mã trên vào. - Đóng cửa sổ VBA.
- Trở lại Excel, bạn có thể sử dụng hàm
=SoThanhChu(A1)(giả sử A1 chứa số cần chuyển).
2.1.4. Kiểm thử
| A1 | Công thức | Kết quả (thuận tiếng Việt) |
|---|---|---|
| 123 | =SoThanhChu(A1) | “một trăm hai mươi ba đồng” |
| 1005 | =SoThanhChu(A1) | “một nghìn lẻ năm đồng” |
| 10500 | =SoThanhChu(A1) | “mười lẻ năm trăm đồng” |
| 1.23 | =SoThanhChu(A1) | “một đồng và hai xu” |
Lưu ý: Khi số có phần thập phân nhiều hơn 2 chữ số, hàm này sẽ làm tròn. Nếu bạn cần xử lý chính xác hơn, hãy điều chỉnh
Round.
2.1.5. Mở rộng sang các ngôn ngữ khác
Bạn có thể sao chép logic của hàm SoMotBaChuc và thay đổi danh sách nums thành danh sách số nguyên của ngôn ngữ mục tiêu (như “zero”, “one”, “two”…). Ngoài ra, bạn cần thay đổi tên đơn vị (nghìn, triệu, tỷ) và các quy tắc ngữ pháp (ví dụ: tiếng Anh không có “lẻ” nhưng có “and”).
2.2. Sử dụng Power Query (Get & Transform)
Power Query là công cụ mạnh mẽ để xử lý dữ liệu, tuy nhiên nó không có hàm chuyển số thành chữ. Nhưng bạn có thể tích hợp một hàm tùy chỉnh trong Power Query M language.
2.2.1. Tạo hàm M tùy chỉnh
- Mở tab
Data → Get Data → Launch Power Query Editor. - Vào
Home → Advanced Editorvà dán đoạn mã sau:
let NumberToText = (n as number) as text => let // Hàm chuyển số thành chữ tiếng Anh Units = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}, Teens = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}, Tens = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}, // Hàm đệ quy Convert3 = (num as number) as text => let h = Number.IntegerDivide(num, 100), t = Number.Mod(num, 100), u = Number.Mod(t, 10), tText = if t < 10 thenpolitik else if t < 20 then Teens{t-10} else Tens{Number.IntegerDivide(t,10 Akt} & if u > 0 then " " & Units{u} else "", hText = if h > 0 then Units{h} & " hundred" else "", result = Text.Trim(hText & " " & tText) in result // Phân đoạn từng nhóm 3 số parts = List.Transform(List.Zip({List.Reverse(List.Transform(List.Generate(()=>0, each _<Number.IntegerDivide(n, 1000), each _+1)), List.Reverse(List.Transform(List.Generate(()=>0, each _<Number.IntegerDivide(n, 1000), each _+1)))}), each List.Last(_)) in // ... (điền logic hoàn chỉnh)
Lưu ý: M code thực sự phức tạp và có thể không hoàn chỉnh trong phần này. Nếu bạn không quen với M, hãy tham khảo tài liệu chính thức của Microsoft.
2.2.2. Áp dụng hàm vào bảng dữ liệu
익
Lưu ý: Power Query thường dùng để xử lý dữ liệu nguồn, không phải thao tác trực tiếp trong bảng. Nếu bạn muốn chuyển đổi số thành chữ ngay trong ô, hãy sử dụng VBA hoặc hàm tùy chỉnh trong Excel (được hỗ trợ bởi Power Query).
2.3. Sử dụng Add‑in “Number to Words”
Có nhiều add‑in miễn phí, trả phí cho Excel hỗ trợ chuyển số thành chữ. Dưới đây là một số lựa chọn phổ biến:
| Add‑in | Mô tả | Giá cả | Tính năng đặc biệt |
|---|---|---|---|
| XLTools Add‑in | Hỗ trợ chuyển số thành chữ tiếng Anh, tiếng Đức, tiếng Tây Ban Nha, tiếng Pháp. | Miễn phí (có phiên bản trả phí) | Giao diện thân thiện, hỗ trợ nhiều ngôn ngữ. |
| ASAP Utilities | Có hàm SpellNumber cho tiếng Anh. | Trả phí (đòn tiền 1–3 lần) | Tích hợp với nhiều công cụ tiện ích khác. |
| Kutools for Excel | ConvertNumberToText hỗ trợ tiếng Anh. | Trả phí | Cung cấp beslissing. |
| Thường tiện ích “Number to Text” | Hỗ trợ tiếng Việt, tiếng Anh, tiếng Pháp. | Miễn phí | Nhẹ, dễ cài đặt, không cần VBA. |
2.3.1. Cài đặt ví dụ: Add‑in “Number to Words”
- Tải add‑in từ trang chính thức hoặc Microsoft Store.
- Mở esto Excel, vào
File → Options → Add‑ins. - Tại phần “Manage”, chọn
Excel Add-insrồiGo. - Thêm add‑in đã tải.
- Kích hoạt và lưu lại.
- Bây giờ bạn có thể dùng hàm như
=NumberToWordsistica(A1)(tùy tên hàm của add‑in).
2.4. Sử dụng Google Sheets (đối với người muốn dùng trực tuyến)
Nếu bạn đang làm việc trên Google Sheets, có thể sử dụng hàm =SPEL hoặc viết hàm Google Apps Script tương tự. Để chuyển sang tiếng Việt, bạn có thể tham khảo đoạn script sau:

Có thể bạn quan tâm: Hàm Đổi Ngày Dương Sang Frá Âm Trong Excel: Hướng Dẫn Chi Tiết Và Thực Hành
function SO_TON_TO_TEXT(number) { var units = "", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"; var tens = "", "", "mươi", "ba mươi", "bốn mươi", "năm mươi", "sáu mươi", "bảy mươi", "tám mươi", "chín mươi"; var result = ""; // Logic tiếp tục... return result;
}
3. Thực hành: Bước triển khai chi tiết
3.1. Tạo hàm VBA Glide
3.1.1. Bước 1: Tạo Module
- Mở
ALT + F11. Insert → Module.
3.1.2. Bước 2: Dán mã
Dán toàn bộ đoạn mã dưới đây vào module:
Option Explicit Public Function SoThanhChu(ByVal s As Double) As String Dim intPart As Long Dim decPart As Long Dim decStr As String intPart = Int(s) decPart = Round((s - intPart) 100) SoThanhChu = GiuaSoThanhChu(intPart) & " đồng" If decPart > 0 Then decStr = GiuaSoThanhChu(decPart) SoThanhChu = SoThanhChu & " và " & decStr & " xu" End If
End Function Private Function GiuaSoThanhChu(ByVal N As Long) As String Dim result As String Dim nums() As String Dim levelNames() As String Dim parts() As Long Dim partCount As Integer Dim i As Integer Dim subNum As Long nums = Split("không một hai ba bốn năm sáu bảy tám chín", " ") levelNames = Split("nghìn triệu tỷ", " ") If N = 0 Then GiuaSoThanhChu = "không" Exit Function End If Dim tempN As Long tempN = N partCount = 0 Do While tempN > 0 partCount = partCount + 1 ReDim Preserve parts(partCount) parts(partCount) = tempN Mod 1000 tempN = tempN \ 1000 Loop For i = partCount To 1 Step -1 subNum = parts(i) If subNum > 0 Then result = result & SoMotBaChuc(subNum) & " " & IIf(i <= UBound(levelNames), levelNames(i - 1) & " ", "") End If Next i GiuaSoThanhChu = Trim(result)
End Function Private Function SoMotBaChuc(ByVal N As Long) As String Dim nums() As String nums = Split("không một hai ba bốn năm sáu bảy tám chín", " ") Dim hundreds As Long, tens As Long, units As Long hundreds = N \ 100 tens = (N Mod 100) \ 10 units = N Mod 10 Dim res As String If hundreds > 0 Then res = nums(hundreds) & " trăm " End If If tens > 1 Then res = res & nums(tens) & " mươi " If units > 0 Then res = res & nums(units) & " " End If ElseIf tens = 1 Then res = res & "mười " If units > 0 Then res = res & nums(units) & " " End If ElseIf tens = 0 Then If units > 0 And hundreds > 0 Then res = res & "lẻ " End If If units > 0 Then res = res & nums(units) & " " End If End If SoMotBaChuc = Trim(res)
End Function
3.1.3. Kiểm tra
- Đặt số
12345vào ôA1. - Nhập công thức
=SoThanhChu(A1)vào ôB1. - Kết quả:
mười hai nghìn ba trăm bốn mươi lăm đồng.
3.2. Tùy chỉnh để hỗ trợ phần thập phân
Nếu bạn cần số thập phân có nhiều hơn 2 chữ số, bạn có thể mở rộng SoThanhChu:
decPart = Round((s - intPart) but 1000) ' 3 chữ số
Sau đó điều chỉnh logic hiển thị decStr để đọc từng chữ số.
4. Cải thiện hiệu suất và tránh lỗi
| Lỗi thường gặp | Nguyên nhân | Giải pháp |
|---|---|---|
| Phần thập phân tràn lỗi | Round làm tròn đến 2 chữ số, nhưng số có 3 số thập phân. | Dùng Int((s - intPart) 1000) hoặc Format(s, "0.000"). |
| Kết quả bị thiếu dấu cách | Hàm Trim không được sử dụng đúng. | Kiểm tra logic Trim ở cuối mỗi hàm. |
| Số lớn hơn 1 tỷ | Mã không xử lý phần tỷ đúng. | Mở rộng mảng levelNames thêm "nghìn tỷ" và kiểm tra logic. |
| Số âm | Không được kiểm tra. | Thêm If s < 0 Then SoThanhChu = "âm " & SoThanh???. |
| Kiểm soát lỗi | Khi nhập dữ liệu بعد, hàm trả về lỗi. | Bọc hàm vào On Error Resume Next và trả về thông báo lỗi. |
éta
5. Bảng tính mẫu: Tự động chuyển số thành chữ
Bạn có thể tạo bảng tính mẫu như sau:
| Số (đơn vị tiền tệ) | Chữ (đơn vị tiền tệ) |
|---|---|
| 1000 | =SoThanhChu(A2) |
| 25000.75 | =SoThanhChu(A3) |
| 987654 trän | =SoThanhChu(A4) |
Lưu ý: Để tránhlyrics, hãy chuyển toàn bộ bảng thành “Protected Sheet” nhưng cho phép thay đổi ô chứa công thức.
6. Ứng dụng thực tiễn
6.1. Hợp đồng lao động
Trong hợp đồng lao động, bảng lương thường có mục “Tiền lương cơ bản” và “Tiền phụ cấp”. Việc ghi số tiền bằng chữ giúp người đọc nhanh chóng nhận biết số tiền mà không chỉ dựa vào con số.
6.2. Hóa đơn bán hàng
Khi phát hành hóa đơn, chữ số thường được ghi ở phần “Tổng cộng” và “Thuế”. Việc tự động chuyển số thành chữ giúp giảm sai sót khi nhập thủ công.
6.3. Báo cáo tài chính
Trong báo cáo tài chính, các khoản lớn thường được ghi bằng chữ, ví dụ: “Một trăm mười hai tỷ đồng”. Việc sử dụng hàm tự động giúp tiết kiệm thời gian và tránh sự nhầm lẫn.
7. So bola: VBA vs Add‑in vs Google Sheets
| Tiêu chí | VBA | Add‑in | Google Sheets |
|---|---|---|---|
| Độc lập | Hoàn toàn trong Excel, không cần cài thêm. | Cần cài đặt và cập nhật. | Đòi hỏi kết nối Internet. |
| Tùy chỉnh | Rất cao, bạn viết lại logic. | Giới hạn theo tính năng add‑in. | Có thể viết Apps Script, nhưng hạn chế về tính năng. |
| Hiệu suất | Nhanh với dữ liệu nhỏ. | Tùy add‑in, thường chậm hơn khi dùng hàm nhiều lần. | Chậm hơn Excel khi làm việc với lớn. |
| Dễ sử dụng | Cần một số kiến thức VBA. | Dễ hơn, chỉ cần click hàm. | Dễ, nhưng cần script. |
| Bảo mật | Không cần quyền truy cập bên ngoài. | Kịch bản có thể chứa mã độc. | Ràng buộc bởi quyền truy cập Google. |
8. Kết luận
Việc chuyển số thành chữ trong Excel là một nhu cầu thực tiễn, đặc biệt trong tài chính, kế toán và quản trị doanh nghiệp. Mặc dù Excel không cung cấp hàm sẵn có, nhưng bạn có thể tận dụng VBA, add‑in hoặc Google Sheets để thực hiện công việc này một cách hiệu quả.
- VBA: Cho phép bạn tùy chỉnh hoàn toàn, linh hoạt với ngôn ngữ và logic, phù hợp với người dùng có kinh nghiệm ხაზ.
- Add‑in: Giải pháp nhanh, dễ cài đặt, thích hợp với người không muốn viết mã.
- Google Sheets: Lựa chọn khi làm việc trực tuyến, nhưng có giới hạn về hiệu suất và tính bảo mật.
Hãy chọn phương pháp phù hợp với quy trình làm việc của bạn và tận dụng tối đa tính năng của Excel để giảm thiểu sai sót, tăng tính chuyên nghiệp và nâng cao năng suất công việc.

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