Thứ Tư, 25 tháng 5, 2016

Hàm đọc vừa số vừa chữ trong Excel tạo bằng VBA

Hàm đọc vừa số vừa chữ trong Excel tạo bằng VBA

Mình xin chia sẻ tới các bạn hàm NumAndText để đọc vừa số vừa chữ ở đơn vị tiền tệ. Ví dụ cần đọc con số 1234567890 là "1 Tỷ 234 Triệu 567 Ngàn 890 Đồng". Chúng ta chỉ cần gõ công thức=NumAndText(1234567890).Thực hiện các bước sau:
Bước 1: ALT+F11 vào môi trường VBA. Vào menu Insert->Module - Tạo module
Bước 2: Copy đoạn code dưới đây dán vào module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
'----COPY CODE
Function NumAndText(ByVal Amount As Double, _
                    Optional ByVal StrUnit As String = "Dong") As String
    'Author: Nguyen Duy Tuan - [EMAIL="duytuan@bluesofts.net"]duytuan@bluesofts.net[/EMAIL]
    Dim CountGroup&, ArrSo, StrSo$, I&, nSkip&, S$, Ub&
    Dim Doc(3)
     
    If StrUnit = "Dong" Then StrUnit = ChrW(272) & ChrW(7891) & "ng"
     
    Doc(0) = "T" & ChrW(7927) ' "Ty"
    Doc(1) = "Tri" & ChrW(7879) & "u" ' "Trieu"
    Doc(2) = "Ngàn" ' "Ngan"
    Doc(3) = StrUnit
     
    StrSo = Format(Amount, "#,##0")
     
    ArrSo = Split(StrSo, ",")
    Ub = UBound(ArrSo)
    CountGroup = Ub - LBound(ArrSo)
    nSkip = 4 - CountGroup
    For I = LBound(ArrSo) To Ub
        S = RemoveZeroLeading(ArrSo(I))
        If S <> "" Then
            NumAndText = NumAndText & IIf(I = 0, "", " ") & _
                    S & " " & Doc(nSkip + I - 1)
        Else
            If I = Ub Then
                NumAndText = NumAndText & " " & Doc(nSkip + I - 1)
            End If
        End If
    Next
    StrUnit = Trim(StrUnit)
End Function
'-----------------------------------------------------------------
Function RemoveZeroLeading(ByVal S As String) As String
    Dim I&
    For I = 1 To Len(S)
        If Mid(S, I, 1) <> "0" Then
            Exit For
        End If
    Next
    RemoveZeroLeading = Mid(S, I)
End Function
'----KẾT THÚC COPY CODE

Bước 3. Thực hành. Bạn nhấn ALT+F11 để ra môi trường bảng tính. Nhập công thức:
=NumAndText(1234567890) sẽ đọc là: 1 Tỷ 234 Triệu 567 Ngàn 890 Đồng

Bạn có thể đọc các con số bất kỳ trong phạm vi cao nhất tỷ đồng luôn đúng.
=NumAndText(1234567890)
=NumAndText(12345678)
=NumAndText(1234567)
=NumAndText(123456)
=NumAndText(12345)
=NumAndText(1234)
=NumAndText(123)
=NumAndText(12)

DOWNLOAD
Tác giả: Nguyễn Duy Tuân - Công ty Cổ phần Bluesofts