Thứ ba, 13/10/2026
ITGOCùng học IT

Hàm đổi số tiền thành chữ trong Excel: cú pháp, ví dụ và lỗi thường gặp

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

hàm đổi số thành chữ trong excel: ví dụ 1 với bảng dữ liệu và kết quả công thức (minh hoạ)
hàm đổi số thành chữ trong excel: ví dụ 1 với bảng dữ liệu và kết quả công thức (minh hoạ)

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

  1. Mở file Excel, nhấn Alt + F11 để mở cửa sổ VBA.
  2. Chọn Insert > Module.
  3. Dán toàn bộ đoạn mã bên dưới vào Module vừa tạo, đóng cửa sổ VBA.
  4. 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
hàm đổi số thành chữ trong excel: ví dụ 2 với bảng dữ liệu và kết quả công thức (minh hoạ)
hàm đổi số thành chữ trong excel: ví dụ 2 với bảng dữ liệu và kết quả công thức (minh hoạ)

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

Bài viết liên quan