Đổi số thành chữ trong Excel

Sao chép code VBA hàm DocSo dán vào Excel để đọc số tiền thành chữ ngay trong bảng tính, kèm ô thử kết quả trực tiếp.

Kết quả

Mười lăm triệu bảy trăm năm mươi nghìn đồng chẵn

Code VBA hàm DocSo

Module1 - VBA
Function DocSo(ByVal SoTien As Double, Optional ByVal DonVi As String = "dong") As String
    Dim ChuSo As Variant, Hang As Variant
    Dim i As Long, j As Long, Nhom As Long
    Dim S As String, KetQua As String, Temp As String
    Dim Tram As Long, Chuc As Long, DonViSo As Long
    Dim Am As Boolean

    ChuSo = Array("khong", "mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin")
    Hang = Array("", " nghin", " trieu", " ty")

    If SoTien < 0 Then Am = True: SoTien = -SoTien
    SoTien = Int(SoTien)
    If SoTien = 0 Then
        DocSo = "Khong " & DonVi & " chan"
        Exit Function
    End If

    S = Format(SoTien, "0")
    Do While Len(S) Mod 9 <> 0 And Len(S) Mod 3 <> 0
        S = "0" & S
    Loop
    Do While Len(S) Mod 3 <> 0
        S = "0" & S
    Loop

    Nhom = Len(S) / 3
    For i = 1 To Nhom
        Temp = Mid(S, (i - 1) * 3 + 1, 3)
        Tram = CLng(Mid(Temp, 1, 1))
        Chuc = CLng(Mid(Temp, 2, 1))
        DonViSo = CLng(Mid(Temp, 3, 1))
        If CLng(Temp) > 0 Or (Nhom - i) Mod 3 = 0 Then
            Dim Cum As String
            Cum = ""
            If CLng(Temp) > 0 Then
                If Tram > 0 Or KetQua <> "" Then Cum = ChuSo(Tram) & " tram"
                If Chuc = 0 Then
                    If DonViSo > 0 And (Tram > 0 Or KetQua <> "") Then Cum = Cum & " le"
                    If DonViSo > 0 Then Cum = Cum & " " & ChuSo(DonViSo)
                ElseIf Chuc = 1 Then
                    Cum = Cum & " muoi"
                    If DonViSo = 5 Then
                        Cum = Cum & " lam"
                    ElseIf DonViSo > 0 Then
                        Cum = Cum & " " & ChuSo(DonViSo)
                    End If
                Else
                    Cum = Cum & " " & ChuSo(Chuc) & " muoi"
                    If DonViSo = 1 Then
                        Cum = Cum & " mot"
                    ElseIf DonViSo = 5 Then
                        Cum = Cum & " lam"
                    ElseIf DonViSo > 0 Then
                        Cum = Cum & " " & ChuSo(DonViSo)
                    End If
                End If
            End If
            j = (Nhom - i) Mod 3
            Cum = Cum & Hang(j)
            Cum = Cum & String$((Nhom - i) \ 3, 0)
            KetQua = Trim(KetQua & " " & Trim(Cum))
            If (Nhom - i) \ 3 > 0 Then KetQua = Trim(KetQua & " ty")
        End If
    Next i

    KetQua = Application.WorksheetFunction.Trim(KetQua)
    KetQua = UCase(Left(KetQua, 1)) & Mid(KetQua, 2)
    If Am Then KetQua = "Am " & KetQua
    DocSo = KetQua & " " & DonVi & " chan"
End Function

Code trên đọc số không dấu để tránh lỗi font khi copy giữa các máy. Nếu cần kết quả có dấu tiếng Việt, hãy dùng công cụ đọc số trực tuyến rồi dán kết quả vào Excel.

Cách dùng

  1. 1Mở file Excel, nhấn Alt + F11 để mở cửa sổ VBA.
  2. 2Chọn Insert > Module, dán toàn bộ code VBA bên dưới vào.
  3. 3Đóng cửa sổ VBA, lưu file ở định dạng .xlsm (Excel Macro-Enabled Workbook).
  4. 4Tại ô bất kỳ gõ =DocSo(A1) hoặc =DocSo(A1;"VND") để đọc số ở ô A1 thành chữ.

Câu hỏi thường gặp

Công cụ liên quan