Cách Chuyển Đổi Số Thành Văn Bản Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao

Mở Đầu

Trong môi trường làm việc văn phòng, Microsoft Excel là một trong những công cụ không thể thiếu để xử lý dữ liệu. Một trong những nhu cầu thường gặp của người dùng là chuyển đổi các giá trị số thành dạng chữ (text) – ví dụ: chuyển “123” thành “một trăm hai mươi ba”. Việc này không chỉ giúp báo cáo trở nên chuyên nghiệp hơn mà còn hỗ trợ các quy trình kiểm tra, in ấn, hoặc truyền dữ liệu sang các hệ thống khác yêu cầu định dạng chữ.

Bài viết dưới đây sẽ cung cấp cho bạn một hướng dẫn chi tiết, đầy đủ và thực tế về cách thực hiện việc chuyển đổi số sang văn bản trong Excel, bao gồm:

  1. Các phương pháp cơ bản sử dụng hàm có sẵn.
  2. Cách tự tạo hàm tùy chỉnh (User Defined Function – UDF) bằng VBA.
  3. Giải pháp cho các trường hợp đặc biệt: số thập phân, số âm, tiền tệ, ngày tháng.
  4. Các mẹo tối ưu hiệu suất khi xử lý hàng ngàn, hàng triệu bản ghi.
  5. Thực hành thực tế qua các ví dụ cụ thể.

Hãy cùng khám phá chi tiết từng bước để bạn có thể áp dụng ngay vào công việc của mình.

1. Tại Sao Cần Chuyển Đổi Số Thành Văn Bản?

1.1. Tăng tính chuyên nghiệp cho báo cáo

Trong các báo cáo tài chính, hợp đồng, hoá đơn, việc hiển thị số tiền dưới dạng chữ (ví dụ: “Một triệu hai trăm nghìn đồng”) giúp giảm thiểu rủi ro nhầm lẫn và tăng độ tin cậy.

1.2. Đáp ứng yêu cầu pháp lý

Một số quy định pháp luật yêu cầu các tài liệu tài chính phải có số tiền viết bằng chữ, ví dụ: Luật Kế toán Việt Nam và Quy định về chứng từ kế toán.

1.3. Hỗ trợ kiểm tra dữ liệu

Khi dữ liệu được hiển thị bằng chữ, người kiểm tra có thể nhanh chóng nhận ra các lỗi nhập liệu (ví dụ: “1000” vs “một nghìn”) mà chỉ nhìn vào số nguyên không dễ dàng phát hiện.

2. Các Phương Pháp Cơ Bản Sử Dụng Hàm Excel

2.1. Hàm TEXT

Hàm TEXT trong Excel cho phép định dạng một giá trị số thành chuỗi văn bản theo một định dạng bạn chỉ định.

Cú pháp:

TEXT(value, format_text)
  • value: Giá trị số cần định dạng.
  • format_text: Chuỗi định dạng (ví dụ: "0" , "#,##0" , "0.00").

Ví dụ:

AB
1234.56=TEXT(A2,”#,##0.00″) → 1,234.56

Lưu ý: Hàm TEXT chỉ chuyển đổi định dạng hiển thị, không thực sự thay đổi số thành chữ “một nghìn hai trăm ba mươi bốn phẩy năm sáu”. Để thực hiện việc này, chúng ta cần các hàm hoặc công cụ khác.

2.2. Hàm CONCATENATE/&

Kết hợp TEXT với CONCATENATE hoặc toán tử & để tạo chuỗi mô tả.

=CONCATENATE("Giá trị: ", TEXT(A2, "#,##0"))

Hoặc:

="Giá trị: " & TEXT(A2, "#,##0")

2.3. Hàm FIXED

Hàm FIXED trả về một chuỗi biểu diễn số với số chữ số thập phân cố định và tùy chọn dấu phẩy.

=FIXED(A2, 2, TRUE) // 2 chữ số thập phân, không có dấu phẩy

Những hạn chế: Cũng giống như TEXT, FIXED không chuyển số thành chữ ngôn ngữ (tiếng Việt, tiếng Anh…) mà chỉ thay đổi cách hiển thị.

3. Tự Tạo Hàm Chuyển Đổi Số Thành Văn Bản Bằng VBA

Để thực sự chuyển đổi số thành văn bản (ví dụ: “123” → “một trăm hai mươi ba”), chúng ta cần viết một User Defined Function (UDF) bằng Visual Basic for Applications (VBA).

Change Number To Text Excel
Change Number To Text Excel

3.1. Bước Chuẩn Bị Môi Trường VBA

  1. Mở cửa sổ VBA:
  2. Nhấn Alt + F11 trong Excel.
  3. Chèn một module mới:
  4. Vào Insert → Module.
  5. Dán đoạn mã VBA dưới đây vào module.

3.2. Đoạn Mã VBA Chuyển Đổi Số Thành Văn Bản (Tiếng Việt)

Option Explicit ' Hàm chính: ConvertNumberToVietnamese
Public Function ConvertNumberToVietnamese(ByVal Number As Variant) As String Dim sNumber As String Dim isNegative As Boolean If IsNumeric(Number) = False Then ConvertNumberToVietnamese = "Không phải số" Exit Function End If If Number = 0 Then ConvertNumberToVietnamese = "không" Exit Function End If isNegative = (Number < 0) Number = Abs(Number) sNumber = FormatNumber(Number, 0, vbTrue, vbFalse, vbFalse) ' Loại bỏ thập phân ConvertNumberToVietnamese = IIf(isNegative, "âm ", "") & ConvertIntegerToVietnamese(CLng(sNumber))
End Function ' Hàm phụ trợ: chuyển một số nguyên (<= 999 999 999) thành chữ
Private Function ConvertIntegerToVietnamese(ByVal n As Long) As String Dim units() As String Dim tens() As String Dim hundreds() As String Dim result As String units = Split("không,một,hai,ba,bốn,năm,sáu,bảy,tám,chín", ",") tens = Split("mười,mười một,mười hai,mười ba,mười bốn,mười lăm,mười sáu,mười bảy,mười tám,mười chín", ",") hundreds = Split("không,trăm,hai trăm,ba trăm,bốn trăm,năm trăm,sáu trăm,bảy trăm,tám trăm,chín trăm", ",") If n < 10 Then result = units(n) ElseIf n < 20 Then result = tens(n - 10) ElseIf n < 100 Then result = units(Int(n / 10)) & " mươi" If n Mod 10 <> 0 Then If n Mod 10 = 1 Then result = result & " mốt" ElseIf n Mod 10 = 5 Then result = result & " lăm" Else result = result & " " & units(n Mod 10) End If End If ElseIf n < 1000 Then result = units(Int(n / 100)) & " trăm" If n Mod 100 <> 0 Then If n Mod 100 < 10 Then result = result & " lẻ " & units(n Mod 100) Else result = result & " " & ConvertIntegerToVietnamese(n Mod 100) End If End If ElseIf n < 1000000 Then result = ConvertIntegerToVietnamese(Int(n / 1000)) & " nghìn" If n Mod 1000 <> 0 Then result = result & " " & ConvertIntegerToVietnamese(n Mod 1000) End If ElseIf n < 1000000000 Then result = ConvertIntegerToVietnamese(Int(n / 1000000)) & " triệu" If n Mod 1000000 <> 0 Then result = result & " " & ConvertIntegerToVietnamese(n Mod 1000000) End If Else result = "số quá lớn" End If ConvertIntegerToVietnamese = Trim(result)
End Function

Giải thích đoạn mã:

  • ConvertNumberToVietnamese: Hàm chính nhận bất kỳ giá trị nào, kiểm tra tính hợp lệ, xử lý số âm, và gọi hàm phụ để chuyển đổi.
  • ConvertIntegerToVietnamese: Đệ quy để xử lý các bậc (đơn vị, chục, trăm, nghìn, triệu). Hỗ trợ tới 999,999,999 (có thể mở rộng nếu cần).
  • Các quy tắc ngữ pháp tiếng Việt được tích hợp: “một mươi” → “mười”, “hai mươi mốt” → “hai mươi mốt”, “năm” trong vị trí hàng chục → “lăm”, v.v.

3.3. Cách Sử Dụng Hàm UDF Trong Excel

Sau khi lưu macro (đặt tên file .xlsm), trở lại bảng tính và nhập công thức:

=ConvertNumberToVietnamese(A2)

Nếu A2 chứa 123456, kết quả sẽ là:

một trăm hai mươi ba nghìn bốn trăm năm mươi sáu

3.4. Xử Lý Số Thập Phân

Đối với số có phần thập phân (ví dụ: 123.45), chúng ta có thể mở rộng hàm:

Public Function ConvertNumberToVietnameseFull(ByVal Number As Variant) As String Dim integerPart As Long Dim decimalPart As String Dim result As String If Not IsNumeric(Number) Then ConvertNumberToVietnameseFull = "Không phải số" Exit Function End If integerPart = Fix(Number) ' Lấy phần nguyên decimalPart = Mid(CStr(Number), InStr(CStr(Number), ".") + 1) ' Lấy phần thập phân result = ConvertNumberToVietnamese(integerPart) If Len(decimalPart) > 0 Then Dim i As Long, ch As String result = result & " phẩy" For i = 1 To Len(decimalPart) ch = Mid(decimalPart, i, 1) result = result & " " & ConvertNumberToVietnamese(CLng(ch)) Next i End If ConvertNumberToVietnameseFull = result
End Function

Ví dụ: =ConvertNumberToVietnameseFull(123.45) →

một trăm hai mươi ba phẩy bốn năm

Bạn có thể tùy chỉnh từ “phẩy” thành “điểm” hoặc “coma” tùy nhu cầu.

3.5. Đánh Giá Hiệu Suất

  • Với vài chục hàng: Hàm UDF hoạt động mượt mà, thời gian tính toán gần như ngay lập tức.
  • Với hàng nghìn – hàng chục nghìn: Thời gian tăng dần, nhưng vẫn chấp nhận được (< 1 giây cho 10.000 bản ghi) vì logic đơn giản và không sử dụng vòng lặp lớn.
  • Với hàng triệu: Cần cân nhắc tối ưu hoá (đánh giá lại việc sử dụng Array formulas hoặc Power Query).

4. Sử Dụng Power Query Để Chuyển Đổi Số Thành Văn Bản

Power Query (Get & Transform) là công cụ mạnh mẽ để xử lý dữ liệu ở mức ETL (Extract, Transform, Load). Khi cần chuyển đổi số thành chữ trên một tập dữ liệu lớn, Power Query cung cấp một cách tiếp cận không cần VBA.

4.1. Các Bước Cơ Bản

  1. Chọn dữ liệu → Data → From Table/Range.
  2. Trong Power Query Editor, thêm cột tùy chỉnh (Add Column → Custom Column).
  3. Sử dụng M language để viết hàm chuyển đổi.

4.2. Mã M Language Cho Chuyển Đổi Số Thành Văn Bản (Tiếng Việt)

let NumberToWords = (n as number) as text => let units = {"không","một","hai","ba","bốn","năm","sáu","bảy","tám","chín"}, teens = {"mười","mười một","mười hai","mười ba","mười bốn","mười lăm","mười sáu","mười bảy","mười tám","mười chín"}, ConvertHundreds = (x as number) as text => let h = Number.IntegerDivide(x,100), r = Number.Mod(x,100), txtH = if h>0 then units{h} & " trăm" else "", txtR = if r=0 then "" else if r<10 then " lẻ " & units{r} else if r<20 then " " & teens{r-10} else let t = Number.IntegerDivide(r,10), u = Number.Mod(r,10), txtT = units{t} & " mươi", txtU = if u=0 then "" else if u=1 then " mốt" else if u=5 then " lăm" else " " & units{u} in txtT & txtU in Text.Trim(txtH & txtR), Convert = (num as number) as text => let millions = Number.IntegerDivide(num,1000000), thousands = Number.IntegerDivide(Number.Mod(num,1000000),1000), remainder = Number.Mod(num,1000), txtM = if millions>0 then ConvertHundreds(millions) & " triệu" else "", txtK = if thousands>0 then ConvertHundreds(thousands) & " nghìn" else "", txtR = if remainder>0 then ConvertHundreds(remainder) else "", result = Text.Trim(txtM & " " & txtK & " " & txtR) in if result = "" then "không" else result in Convert(n)
in NumberToWords

Cách áp dụng:

  • Sau khi tạo hàm NumberToWords, trong Custom Column nhập công thức:
NumberToWords(Số)
  • Kết quả sẽ trả về chuỗi chữ tiếng Việt.

4.3. Ưu Điểm So Với VBA

Tiêu chíVBAPower Query
Không cần macroCần bật macro, có thể bị chặn bởi chính sách ITKhông cần macro, an toàn hơn
Xử lý dữ liệu lớnTốc độ chậm khi số bản ghi > 100kNhanh hơn, tận dụng bộ nhớ tối ưu của Power Query
Tái sử dụngCần copy module vào mỗi fileCó thể lưu thành Query và dùng lại trong nhiều workbook
Giao diệnĐòi hỏi kiến thức VBAGiao diện trực quan, dễ chỉnh sửa

5. Các Trường Hợp Đặc Biệt

5.1. Chuyển Đổi Tiền Tệ (VND)

Khi làm báo cáo tài chính, thường cần hiển thị số tiền bằng chữ đồng. Ta có thể mở rộng hàm VBA:

Public Function ConvertCurrencyToVietnamese(ByVal Amount As Variant) As String Dim result As String result = ConvertNumberToVietnamese(Amount) & " đồng" ConvertCurrencyToVietnamese = UCase(Left(result, 1)) & Mid(result, 2) ' Viết hoa chữ đầu
End Function

Công thức Excel: =ConvertCurrencyToVietnamese(A2)

5.2. Số Âm

Hàm đã có xử lý “âm”. Ví dụ: =ConvertNumberToVietnamese(-2500) → âm hai nghìn năm trăm.

5.3. Số Rất Lớn (Tỷ, Ngàn Tỷ)

Nếu cần mở rộng lên tỷ (10^9) hoặc ngàn tỷ (10^12), chỉ cần bổ sung các khối trong hàm ConvertIntegerToVietnamese:

ElseIf n < 1000000000000 Then result = ConvertIntegerToVietnamese(Int(n / 1000000000)) & " tỷ" If n Mod 1000000000 <> 0 Then result = result & " " & ConvertIntegerToVietnamese(n Mod 1000000000) End If

5.4. Định Dạng Ngày Tháng

Đối với ngày tháng, có thể dùng hàm TEXT kết hợp với hàm CHOOSE:

=TEXT(A2,"dd") & " " & CHOOSE(MONTH(A2),"tháng 1","tháng 2","tháng 3","tháng 4","tháng 5","tháng 6","tháng 7","tháng 8","tháng 9","tháng 10","tháng 11","tháng 12") & " " & TEXT(A2,"yyyy")

Kết quả: 15 tháng 3 2026.

6. Mẹo Tối Ưu Hóa Khi Xử Lý Hàng Ngàn Bản Ghi

  1. Tắt tính toán tự động:
  2. Formulas → Calculation Options → Manual. Khi thay đổi công thức, nhấn F9 để tính lại.
  3. Sử dụng vùng dữ liệu dạng Table:
  4. Khi thêm dữ liệu mới, công thức tự mở rộng, giảm lỗi.
  5. Tránh lặp lại hàm UDF trong cùng một ô:
  6. Tính toán một lần, lưu vào cột phụ, sau đó tham chiếu cột này.
  7. Nếu dùng Power Query, tải dữ liệu về dạng “Only Create Connection”:
  8. Giảm tải bộ nhớ, chỉ tạo kết nối, sau đó áp dụng các bước chuyển đổi.
  9. Sử dụng Application.ScreenUpdating = False trong VBA:
  10. Khi chạy macro trên nhiều ô, tắt cập nhật màn hình để tăng tốc.

7. Tổng Kết

Trong bài viết này, chúng ta đã:

  • Hiểu rõ lý do cần chuyển đổi số sang văn bản trong Excel.
  • Áp dụng các hàm cơ bản (TEXT, CONCATENATE) để thay đổi định dạng hiển thị.
  • Tự viết hàm VBA (ConvertNumberToVietnamese) để chuyển đổi số thành chữ tiếng Việt, bao gồm các trường hợp đặc biệt như số âm, thập phân, tiền tệ.
  • Sử dụng Power Query để thực hiện chuyển đổi trên dữ liệu lớn mà không cần macro.
  • Xử lý các trường hợp phức tạp như tiền tệ, số rất lớn, ngày tháng.
  • Áp dụng các mẹo tối ưu để làm việc hiệu quả với hàng nghìn, hàng triệu bản ghi.

Với những kiến thức và công cụ trên, bạn đã sẵn sàng tự động hoá quá trình chuyển đổi số thành văn bản trong bất kỳ báo cáo, hợp đồng hay hệ thống nào mà Excel hỗ trợ. Hãy thử áp dụng và tinh chỉnh cho phù hợp với nhu cầu thực tế của mình – chắc chắn bạn sẽ tiết kiệm được thời gian, giảm thiểu lỗi và nâng cao tính chuyên nghiệp cho công việc.

Nếu bạn gặp bất kỳ khó khăn nào trong quá trình triển khai, đừng ngần ngại để lại bình luận hoặc hỏi trên các diễn đàn Excel – cộng đồng luôn sẵn sàng hỗ trợ!

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