Excel không có sẵn hàm đổi số tiền thành chữ tiếng Việt. Cách làm phổ biến là thêm một hàm tự tạo bằng VBA, ở bài này đặt tên DocSoTien, rồi dùng như hàm thường: =DocSoTien(A2) đổi 1250000 thành “Một triệu hai trăm năm mươi nghìn đồng” để ghi lên hoá đơn, phiếu chi.
Ví dụ nhanh: =DocSoTien(A2) → Một triệu hai trăm năm mươi nghìn đồng
Nguồn: danh sách hàm Excel theo nhóm và tài liệu hàm BAHTTEXT của Microsoft, đối chiếu ngày 07/10/2026. Áp dụng cho Excel cho Windows có VBA: Microsoft 365, 2021, 2019, 2016 (Excel trên web không chạy được VBA).

Cú pháp hàm DocSoTien
Danh sách hàm của Microsoft không có hàm đọc số tiếng Việt; hàm đọc số duy nhất có sẵn là BAHTTEXT, chỉ đọc ra tiếng Thái. Sau khi thêm đoạn mã VBA ở phần dưới, bạn có hàm mới với cú pháp:
=DocSoTien(số_tiền)
| Đối số | Bắt buộc? | Ý nghĩa |
|---|---|---|
số_tiền |
Có | Số hoặc ô chứa số tiền, từ 0 tới dưới 1.000 tỷ. Phần lẻ sau dấu thập phân được làm tròn. |
Cách thêm hàm DocSoTien vào Excel
- Mở file Excel, nhấn Alt + F11 để mở cửa sổ VBA.
- Chọn Insert > Module.
- Dán toàn bộ đoạn mã bên dưới vào Module vừa tạo, đóng cửa sổ VBA.
- Lưu file dạng Excel Macro-Enabled Workbook (*.xlsm); khi mở lại, chọn Enable Content để bật macro.
Mã viết chữ có dấu bằng ChrW (mã Unicode), vì cửa sổ VBA không hiện đúng chữ tiếng Việt gõ trực tiếp.
Private Function Doc3(ByVal n As Integer, ByVal DayDu As Boolean) As String
Dim So, tr As Integer, ch As Integer, dv As Integer, s As String
So = Array("kh" & ChrW(244) & "ng", "m" & ChrW(7897) & "t", "hai", "ba", "b" & ChrW(7889) & "n", "n" & ChrW(259) & "m", "s" & ChrW(225) & "u", "b" & ChrW(7843) & "y", "t" & ChrW(225) & "m", "ch" & ChrW(237) & "n")
tr = n \ 100: ch = (n \ 10) Mod 10: dv = n Mod 10
If DayDu Or tr > 0 Then s = So(tr) & " " & "tr" & ChrW(259) & "m"
If ch = 0 Then
If dv > 0 And (DayDu Or tr > 0) Then s = s & " linh"
ElseIf ch = 1 Then
s = s & " " & "m" & ChrW(432) & ChrW(7901) & "i"
Else
s = s & " " & So(ch) & " " & "m" & ChrW(432) & ChrW(417) & "i"
End If
If dv > 0 Then
If dv = 1 And ch >= 2 Then
s = s & " " & "m" & ChrW(7889) & "t"
ElseIf dv = 5 And ch >= 1 Then
s = s & " " & "l" & ChrW(259) & "m"
Else
s = s & " " & So(dv)
End If
End If
Doc3 = Trim(s)
End Function
Public Function DocSoTien(ByVal SoTien As Double) As String
Dim DonVi, g(3) As Integer, i As Integer, Dau As Integer, kq As String, n As Double
n = Int(SoTien + 0.5)
If n < 0 Or n >= 1E+12 Then DocSoTien = "Ngoai pham vi": Exit Function
If n = 0 Then DocSoTien = "Kh" & ChrW(244) & "ng " & ChrW(273) & ChrW(7891) & "ng": Exit Function
DonVi = Array("", " ngh" & ChrW(236) & "n", " tri" & ChrW(7879) & "u", " t" & ChrW(7927))
For i = 0 To 3
g(i) = n - Int(n / 1000) * 1000
n = Int(n / 1000)
Next i
Dau = 3
Do While g(Dau) = 0: Dau = Dau - 1: Loop
For i = Dau To 0 Step -1
If g(i) > 0 Then kq = kq & " " & Doc3(g(i), i < Dau) & DonVi(i)
Next i
kq = Trim(kq)
DocSoTien = UCase(Left(kq, 1)) & Mid(kq, 2) & " " & ChrW(273) & ChrW(7891) & "ng"
End Function
Ví dụ 1: Đọc các số tiền thường gặp
Cột A chứa số tiền, cột B dùng DocSoTien. Kết quả mẫu được tính theo đúng quy tắc của đoạn mã; hãy thử vài số trước khi dùng cho chứng từ. File mẫu tải về là .xlsx nên cột B báo #NAME? cho tới khi bạn thêm mã VBA và lưu thành .xlsm.
| A | |
|---|---|
| 1 | Số tiền |
| 2 | 1250000 |
| 3 | 15000 |
| 4 | 2021 |
| Ô | Công thức | Kết quả | Giải thích |
|---|---|---|---|
| B2 | =DocSoTien(A2) |
Một triệu hai trăm năm mươi nghìn đồng | |
| B3 | =DocSoTien(A3) |
Mười lăm nghìn đồng | |
| B4 | =DocSoTien(A4) |
Hai nghìn không trăm hai mươi mốt đồng |
Ví dụ 2: Số tiền lớn, có hàng linh và nhóm số 0
Hàm tự đọc “linh”, bỏ qua nhóm nghìn bằng 0 và đọc tới hàng tỷ.
| A | |
|---|---|
| 1 | Số tiền |
| 2 | 105000000 |
| 3 | 1000500 |
| 4 | 3500000000 |
| Ô | Công thức | Kết quả | Giải thích |
|---|---|---|---|
| B2 | =DocSoTien(A2) |
Một trăm linh năm triệu đồng | |
| B3 | =DocSoTien(A3) |
Một triệu năm trăm đồng | |
| B4 | =DocSoTien(A4) |
Ba tỷ năm trăm triệu đồng |

Lỗi thường gặp khi đổi số thành chữ
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
#NAME? |
Chưa thêm mã VBA, hoặc mở file .xlsx (không lưu được macro), hoặc macro đang bị chặn. | Thêm mã vào Module, lưu .xlsm, bấm Enable Content. |
Chữ hiện dấu ? |
Gõ trực tiếp chữ có dấu trong cửa sổ VBA. | Dùng đúng đoạn mã có ChrW ở trên. |
Ngoai pham vi |
Số âm hoặc từ 1.000 tỷ trở lên. | Kiểm tra lại số tiền. |
Số tiền đọc sai |
Ô chứa số dạng văn bản, ví dụ “1.250.000” gõ có dấu chấm theo kiểu văn bản. | Đổi ô về dạng số trước. |
Quy tắc đọc số mà hàm áp dụng
- Hàng chục bằng 0 đọc “linh”: 105 triệu đọc là “một trăm linh năm triệu”.
- Số 1 sau hàng chục từ 20 trở lên đọc “mốt”: 21 là “hai mươi mốt”.
- Số 5 sau hàng chục đọc “lăm”: 15 là “mười lăm”.
- Nhóm ba số ở giữa có hàng trăm bằng 0 đọc “không trăm”: 2021 là “hai nghìn không trăm hai mươi mốt”.
- Nhóm bằng 0 được bỏ qua: 1.000.500 đọc là “một triệu năm trăm”.
Đọc số dạng thường bằng hàm chuỗi xem bài hàm xử lý chuỗi; danh sách hàm ở bài các hàm trong Excel.
Tải file Excel mẫu
File mẫu gồm 2 trang tính, mỗi trang là một ví dụ ở trên với công thức để sẵn; Excel tự tính lại khi mở. Tải file Excel mẫu (.xlsx).
Câu hỏi thường gặp
Excel có hàm đổi số thành chữ có sẵn không?
Không có cho tiếng Việt. Hàm BAHTTEXT có sẵn nhưng chỉ đọc ra tiếng Thái.
Gửi file cho người khác thì hàm có chạy không?
Có, nếu gửi file .xlsm và người nhận bật macro. Nếu chỉ cần kết quả, sao chép cột chữ rồi dán dạng Values.
Dùng được hàm trên Google Sheets không?
Không. Google Sheets không chạy VBA.
Xem thêm các thủ thuật khác tại ITGO (thủ thuật máy tính & Excel).



