Chuyển số tiền từ số sang chữ trên Excel bằng hàm VBA

Nguyễn Thành Đông

Nguyễn Thành Đông

Tác giả bài viết

Ngày đăng

Tuesday 18/10/2022 - 10:09

Featured blog post

Nếu bạn muốn chuyển số tiền từ số sang chữ dễ dàng trên Excel, thì đây chính là thủ thuật dành cho bạn.

Cách thực hiện như sau:

Bước 1. Bạn nhấn Alt+F11 trên Excel để mở cửa sổ lập trình VBA. Cửa sổ VBA có giao diện như bên dưới.

Bước 2. Bạn vào Menu Insert trên cửa sổ VBA này và chọn Insert --> Module.

Bước 3. Bạn click vào vùng soạn thảo văn bản của Module. và dán đoạn code VBA sau vào.

'Bat dau
Function DocSo(ByVal numIn)
    nghin = "nghìn"
    trieu = "tri" & ChrW(7879) & "u"
    ty = "t" & ChrW(7927)
    phay = "ph" & ChrW(7849) & "y"
    
    Dim LSide, RSide, Temp, DecPlace, Count, oNum
    oNum = numIn
    ReDim Place(9) As String
    Place(2) = " " & nghin & " "
    Place(3) = " " & trieu & " "
    Place(4) = " " & ty & " "
    numIn = Trim(Str(numIn))
    DecPlace = InStr(numIn, ".")
    If DecPlace > 0 Then
        RSide = Doc_Chuc(Left(Mid(numIn, DecPlace + 1) & "00", 2))
        numIn = Trim(Left(numIn, DecPlace - 1))
    End If
    RSide = numIn
    Count = 1
    Do While numIn <> ""
        Temp = Doc_Tram(Right(numIn, 3))
        If Temp <> "" Then LSide = Temp & Place(Count) & LSide
        If Len(numIn) > 3 Then
            numIn = Left(numIn, Len(numIn) - 3)
        Else
            numIn = ""
        End If
        Count = Count + 1
    Loop

    DocSo = LSide
    If InStr(oNum, Application.DecimalSeparator) > 0 Then
        DocSo = DocSo & " " & phay & " " & Doc_ThapPhan(oNum)
    End If

End Function

Function Doc_Tram(ByVal numIn) 'Chuyen so tu 100-999 sang chu
    tram = "tr" & ChrW(259) & "m"
    
    Dim w As String
    If Val(numIn) = 0 Then Exit Function
    numIn = Right("000" & numIn, 3)
    If Mid(numIn, 1, 1) <> "0" Then
        w = Doc_Donvi(Mid(numIn, 1, 1)) & " " & tram & " "
    End If
    If Mid(numIn, 2, 1) <> "0" Then
        w = w & Doc_Chuc(Mid(numIn, 2))
    Else
        w = w & Doc_Donvi(Mid(numIn, 3))
    End If
    Doc_Tram = w
End Function

Function Doc_Chuc(TensText)  'Chuyen so tu 10-99 sang chu
    mot = "m" & ChrW(7897) & "t"
    hai = "hai"
    ba = "ba"
    bon = "b" & ChrW(7889) & "n"
    nam = "n" & ChrW(259) & "m"
    sau = "sáu"
    bay = "b" & ChrW(7843) & "y"
    tam = "tám"
    chin = "chín"
    muoi = "m" & ChrW(432) & ChrW(7901) & "i"
    muoii = "m" & ChrW(432) & ChrW(417) & "i"
    mott = "m" & ChrW(7889) & "t"
    
    Dim w As String
    w = ""
    If Val(Left(TensText, 1)) = 1 Then   'Neu gia tri tu 10-19
        Select Case Val(TensText)
            Case 10: w = muoi
            Case 11: w = muoi & " " & mot
            Case 12: w = muoi & " " & hai
            Case 13: w = muoi & " " & ba
            Case 14: w = muoi & " " & bon
            Case 15: w = muoi & " " & lam
            Case 16: w = muoi & " " & sau
            Case 17: w = muoi & " " & bay
            Case 18: w = muoi & " " & tam
            Case 19: w = muoi & " " & chin
            Case Else
        End Select
    Else      'Neu gia tri tu 20-99
        Select Case Val(Left(TensText, 1))
            Case 2: w = hai & " " & muoii
            Case 3: w = ba & " " & muoii
            Case 4: w = bon & " " & muoii
            Case 5: w = nam & " " & muoii
            Case 6: w = sau & " " & muoii
            Case 7: w = bay & " " & muoii
            Case 8: w = tam & " " & muoii
            Case 9: w = chin & " " & muoii
            Case Else
        End Select
        If Val(Right(TensText, 1)) = 1 Then
            w = w & " " & mott
        ElseIf Val(Right(TensText, 1)) <> 0 Then
            w = w & " " & Doc_Donvi(Right(TensText, 1))
        End If
    End If
    Doc_Chuc = w
End Function

Function Doc_Donvi(Digit) 'Chuyen so tu 1-9 sang chu
    mot = "m" & ChrW(7897) & "t"
    hai = "hai"
    ba = "ba"
    bon = "b" & ChrW(7889) & "n"
    nam = "n" & ChrW(259) & "m"
    sau = "sáu"
    bay = "b" & ChrW(7843) & "y"
    tam = "tám"
    chin = "chín"
    Select Case Val(Digit)
        Case 1: Doc_Donvi = mot
        Case 2: Doc_Donvi = hai
        Case 3: Doc_Donvi = ba
        Case 4: Doc_Donvi = bon
        Case 5: Doc_Donvi = nam
        Case 6: Doc_Donvi = sau
        Case 7: Doc_Donvi = bay
        Case 8: Doc_Donvi = tam
        Case 9: Doc_Donvi = chin
        Case Else: Doc_Donvi = ""
    End Select
End Function

Function Doc_ThapPhan(n) As String
    Dim fraction As String, x As Long
    fraction = Split(n, Application.DecimalSeparator)(1)
    For x = 1 To Len(fraction)
        If Doc_ThapPhan <> "" Then Doc_ThapPhan = Doc_ThapPhan & " "
        Doc_ThapPhan = Doc_ThapPhan & Doc_Donvi(Mid(fraction, x, 1))
    Next x
End Function

Bước 4. Bạn qua Excel, nhập hàm =DocSo vào 1 ô và trải nghiệm kết quả nhé