1. BQT thông báo: Bạn sẽ tiết kiệm rất nhiều, rất nhiều thời gian khi bạn tuân thủ ĐIỀU KHOẢN SỬ DỤNG của diễn đàn. "Bạn dành 1 tiếng, 2 tiếng... để đăng bài, BQT chỉ cần 1 phút để xóa tất cả các bài đăng của bạn."
    Dismiss Notice

Code chuyển số thành chữ trong excel

Thảo luận trong 'Máy Tính' bắt đầu bởi Social, Thg 12 8, 2020.

Lượt xem: 15,152

  1. Social

    Social Administrator

    Trong bài viết cách chuyển số thành chữ trong Excel bằng Macro, có thêm nhiều anh chị gửi tin nhắn trên facebook yêu cầu Admin hướng dẫn thêm code chuyển số thành chữ trong Excel bằng VBA.

    Sau đây, admin sẽ hướng dẫn chi tiết code chuyển số thành chữ dùng hàm VBA trong excel như sau:

    Có 3 cách chuyển số thành chữ trong hàm VBA
    Đổi số thành chữ là một công việc gần như gặp hằng ngày với các bạn làm ủy nhiệm chi ngân hàng, viết hóa đơn, thu chi tiền mặt, phiếu lương…Nếu làm thủ công thì sẽ rất mất thời gian và dễ sai sót. Dân Tài Chính sẽ hướng dẫn bạn 3 cách để chuyển số sang chữ trong excel cực kì đơn giản, nhanh và chính xác:

    Cách 1: Sử dụng hàm trực tiếp, không dùng VBA hay Add-ins.
    [​IMG]

    Đầu tiên bạn tải file có công thức sẵn này về: doi-so-thanh-chu.xlsx (size: 95kb) - google driver
    Sau đó bạn nhập số cần đọc vào ô B2 như hình bên trên là xong. Bạn có thể copy nguyên phần công thức đó vào bảng tính hiện tại của bạn sau đó link phần chữ qua là được.

    Cách 2: Sử dụng VBA để chuyển số thành chữ
    Bạn không phải là người rành về VBA nên nghe có vẻ sợ nhưng đừng lo, sẽ rất đơn giản. Bạn chỉ cần 4 bước sau để thêm đoạn mã VBA đổi số thành chữ vào bảng tính của bạn:
    Bước 1: Mở bảng tính mà bạn cần đánh vần các con số.


    Bước 2: Nhấn Alt + F11 để mở cửa sổ trình soạn thảo Visual Basic.
    Bước 3: Nếu bạn đang mở nhiều tệp tin, hãy chọn bảng tính cần thiết bằng cách sử dụng danh sách các tệp ở bên trái của trình soạn thảo (tệp sẽ được đánh dấu màu xanh).
    Bước 4: Trong trình đơn chỉnh sửa hãy vào Insert-> Module .
    [​IMG]
    Bước 5: Bạn sẽ thấy cửa sổ có tên YourBook – Module1. Chọn tất cả mã trong khung bên dưới và dán nó vào cửa sổ này.
    [​IMG]
    Function UnicodeChar(UniCharCode As String) As String
    On Error GoTo Loi
    Dim str
    Dim desStr As String
    Dim I
    If Mid(UniCharCode, 1, 1) = ";" Then
    UniCharCode = Mid(UniCharCode, 2)
    End If
    If Right(UniCharCode, 1) = ";" Then
    UniCharCode = Mid(UniCharCode, 1, Len(UniCharCode) - 1)
    End If
    str = UniCharCode
    str = Split(str, ";")
    For I = LBound(str) To UBound(str)
    desStr = desStr & ChrW$("&H" & str(I))
    Next
    UnicodeChar = desStr
    Loi:
    Exit Function
    End Function

    Function vnd(ByVal NumCurrency As Currency) As String
    Static CharVND(9) As String, BangChu As String, I As Integer
    Dim SoLe, SoDoi As Integer, PhanChan, Ten As String
    Dim DonViTien As String, DonViLe As String
    Dim NganTy As Integer, Ty As Integer, Trieu As Integer, Ngan As Integer
    Dim Dong As Integer, Tram As Integer, Muoi As Integer, DonVi As Integer
    NumCurrency = Round(NumCurrency, 0)
    DonViTien = ";111;1ED3;6E;67" ' d?ng
    DonViLe = ";78;75" ' xu
    If NumCurrency = 0 Then
    vnd = UnicodeChar(";4B;68;F4;6E;67;20" & DonViTien)
    Exit Function
    End If
    If NumCurrency > 922337203685477# Then ' S? l?n nh?t c?a lo?i CURRENCY
    vnd = UnicodeChar(";4B;68;F4;6E;67;20;111;1ED5;69;20;111;1B0;1EE3;63;20;73" & _
    ";1ED1;20;6C;1EDB;6E;20;68;1A1;6E;20;39;32;32;2C;33;33;37" & _
    ";2C;32;30;33;2C;36;38;35;2C;34;37;37")
    Exit Function
    End If
    CharVND(1) = ";6D;1ED9;74" ' m?t
    CharVND(2) = ";68;61;69" ' hai
    CharVND(3) = ";62;61" ' ba
    CharVND(4) = ";62;1ED1;6E" ' b?n
    CharVND(5) = ";6E;103;6D" ' nam
    CharVND(6) = ";73;E1;75" ' s?u
    CharVND(7) = ";62;1EA3;79" ' b?y
    CharVND(8) = ";74;E1;6D" ' t?m
    CharVND(9) = ";63;68;ED;6E" ' ch?n
    SoLe = Int((NumCurrency - Int(NumCurrency)) * 100) ' 2 k? s?
    PhanChan = Trim$(str$(Int(NumCurrency)))
    PhanChan = Space(15 - Len(PhanChan)) + PhanChan
    NganTy = Val(Left(PhanChan, 3))
    Ty = Val(Mid$(PhanChan, 4, 3))
    Trieu = Val(Mid$(PhanChan, 7, 3))
    Ngan = Val(Mid$(PhanChan, 10, 3))
    Dong = Val(Mid$(PhanChan, 13, 3))
    If NganTy = 0 And Ty = 0 And Trieu = 0 And Ngan = 0 And Dong = 0 Then
    BangChu = ";6B;68;F4;6E;67;20" + DonViTien + ";20"
    I = 5
    Else
    BangChu = ""
    I = 0
    End If
    '-----------------------------------------------------
    ' B?t d?u d?i
    '-----------------------------------------------------
    While I <= 5 Select Case I Case 0 SoDoi = NganTy Ten = ";6E;67;E0;6E;20;74;1EF7" ' ng?n t? Case 1 SoDoi = Ty Ten = ";74;1EF7" ' t? Case 2 SoDoi = Trieu Ten = ";74;72;69;1EC7;75" ' tri?u Case 3 SoDoi = Ngan Ten = ";6E;67;E0;6E" ' ng?n Case 4 SoDoi = Dong Ten = DonViTien ' d?ng Case 5 SoDoi = SoLe Ten = DonViLe ' xu End Select If SoDoi <> 0 Then
    Tram = Int(SoDoi / 100)
    Muoi = Int((SoDoi - Tram * 100) / 10)
    DonVi = (SoDoi - Tram * 100) - Muoi * 10
    If Right(BangChu, 3) = ";20" Then
    BangChu = Left(BangChu, Len(BangChu) - 3)
    End If
    BangChu = BangChu + IIf(Len(BangChu) = 0, "", ";2C;20") + _
    IIf(Tram <> 0, Trim(CharVND(Tram)) + ";20;74;72;103;6D;20", "")
    If Muoi = 0 And Tram <> 0 And DonVi <> 0 Then
    BangChu = BangChu + ";6C;1EBB;20"
    Else
    If Muoi <> 0 Then
    BangChu = BangChu + IIf(Muoi <> 0 And Muoi <> 1, _
    Trim(CharVND(Muoi)) + ";20;6D;1B0;1A1;69;20", ";6D;1B0;1EDD;69;20")
    End If
    End If
    If Muoi <> 0 And DonVi = 5 Then
    BangChu = BangChu + ";6C;103;6D;20" + Ten + ";20"
    Else
    If Muoi > 1 And DonVi = 1 Then
    BangChu = BangChu + ";6D;1ED1;74;20" + Ten + ";20"
    Else
    BangChu = BangChu + IIf(DonVi <> 0, Trim(CharVND(DonVi)) + ";20" + Ten, Ten) + ";20"
    End If
    End If
    Else
    BangChu = BangChu + IIf(I = 4, DonViTien + "", "")
    End If
    I = I + 1
    Wend
    If SoLe = 0 Then
    BangChu = BangChu + IIf(Right(BangChu, 3) = ";20", "", ";20") + ";63;68;1EB5;6E"
    End If
    BangChu = UnicodeChar(BangChu)
    '??i sang ti?ng Vi?t Unicode
    ' ??i ch? c?i d?u ti?n th?nh ch? hoa
    Mid$(BangChu, 1, 1) = UCase$(Mid$(BangChu, 1, 1))
    vnd = BangChu
    End Function

    Nếu bị lỗi font thì các bạn tải file này về nhé, code đã có sẵn trong file: doisothanhchu.xlsm (size: 25kb)

    Bước 6: Bạn quay lại bảng tính vàsử dụng hàm VND để đọc số. Nhập =VND(B2) vào ô nơi bạn cần lấy số được viết bằng từ. Ở đây B2 là địa chỉ của ô có số hoặc số.

    [​IMG]

    Lưu ý khi lưu bảng tính có VBA bạn phải lưu với định dạng .xlsm thì mới lưu được nhé.

    Cách 3: Sử dụng Add-ins AccHelper để đọc số
    Accounting Helper là một Add-ins đọc số đa năng vô cùng mạnh mẽ dành cho Excel:
    – Cung cấp các hàm đọc số thành chữ bằng tiếng Anh, Việt bởi các loại font chữ TCVN3 (ABC), VNI, UNICODE. Các hàm: VND(), USD(), Num2Str().
    – Cung cấp hàm chuyển đổi font chữ từ TCVN3, VNI sang UNICODE. Hàm ToUNC().

    Bạn tải Add-ins về tại đây (size: 95kb), tiến hành giải nén và làm theo hướng dẫn trong file huongdan.txt nhé.
    Hoặc xem hướng dẫn cài đặt chi tiết tại đây

    Vậy là bạn đã có 3 cách chuyển số thành chữ trên Excel 365 rồi nhé, bạn cũng có thể áp dụng tương tự trên Excel 2003, 2007, 2013, 2016, 2019, 2010, 2013 đều được. Nếu bạn gặp khó khăn trong lúc thực hiện có thể để lại lời nhắn bên dưới mình sẽ hỗ trợ.