Hướng Dẫn Chuyển Số Thành Chữ Trong Excel

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.

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

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

  1. Mở Excel, nhấn ALT + F11 để vào cửa sổ VBA.
  2. Vào Insert → Module và dán mã trên vào.
  3. Đóng cửa sổ VBA.
  4. 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ử

A1Công thứcKế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

  1. Mở tab Data → Get Data → Launch Power Query Editor.
  2. Vào Home → Advanced Editor và 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‑inMô tảGiá cảTính năng đặc biệt
XLTools Add‑inHỗ 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 UtilitiesCó 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 ExcelConvertNumberToText 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”

  1. Tải add‑in từ trang chính thức hoặc Microsoft Store.
  2. Mở esto Excel, vào File → Options → Add‑ins.
  3. Tại phần “Manage”, chọn Excel Add-ins rồi Go.
  4. Thêm add‑in đã tải.
  5. Kích hoạt và lưu lại.
  6. 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:

Hướng Dẫn Chuyển Số Thành Chữ Trong Excel
Hướng Dẫn Chuyển Số Thành Chữ Trong Excel
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ố 12345 và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ặpNguyên nhânGiải pháp
Phần thập phân tràn lỗiRound 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áchHà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ố âmKhông được kiểm tra.Thêm If s < 0 Then SoThanhChu = "âm " & SoThanh???.
Kiểm soát lỗiKhi 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íVBAAdd‑inGoogle Sheets
Độc lậpHoà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ỉnhRấ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ấtNhanh 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ụngCầ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ậtKhô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.

⚠️
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