Hàm chuyển số sang chữ trong Excel

Thứ sáu - 01/07/2016 09:07
Đối với những người thường xuyên phải sử dụng Excel vào trong công việc tính toán, báo cáo hay thống kê thì việc chuyển số tiền thành chữ là công việc tốn khá nhiều thời gian do phải làm thủ công và thường phải làm lặp đi lặp lại. Hiểu được những khó khăn này, đã có nhiều tiện ích (Add-ins) được viết để hỗ trợ việc chuyển số sang chữ, những tiện ích này đã hỗ trợ người dùng làm việc hiệu quả hơn, rút ngắn thời gian làm việc.
Những tiện ích này được phát triển bởi một nhóm lập trình hay một công ty nào đó, những tiện ích này đều đã được biên dịch nên người sử dụng không thể xem được Code hay chỉnh sửa lại theo ý muốn. Vậy bạn có muốn viết riêng 1 hàm chuyển đổi số sang chữ cho riêng mình không? Và viết ngay trên phần mềm Excel quen thuộc mình vẫn hàng ngày làm việc. Hôm nay Tin học văn phòng sẽ hướng dẫn các bạn viết hàm chuyển số sang chữ và hàm này sẽ được sử dụng như các hàm thông dụng trong Excel như: SUM, AVERAGE, COUT, IF…

1. Khởi động Microsoft Excel
2. Đổi tên 1 Sheet bất kỳ thành Chuso
Do việc nhập các ký tự tiếng việt tại màn hình soạn thảo Code bị lỗi, nên Sheet này có nhiệm vụ chứa toàn bộ các ký tự phục vụ việc chuyển số sang chữ. Với việc những chữ số không cần đưa trực tiếp vào Code mà được để trong Sheet, người sử dụng có thể dễ dàng thay đổi các mã font như: Unicode, VNI, TCVN3 tùy theo thói quen của từng người. Sau khi nhập toàn bộ dữ liệu,  Sheet Chuso sẽ có thông tin như phía dưới. 


3. Nhấn ALT + F11 để bắt đầu Visual Basic Editor
Vào menu Inser\Module


4. Nhập toàn bộ đoạn mã sau vào
Function ReadNumber(ByVal MyNumber)
    Dim VND_Dong, VND_Xu, Temp
    Dim DecimalPlace, Count
    ReDim Place(9) As String

    'Tham chieu den cac o trong Sheet Chuso de lay gia tri
    Place(2) = ActiveWorkbook.Sheets("Chuso").Range("D2").Value
    Place(3) = ActiveWorkbook.Sheets("Chuso").Range("D3").Value
    Place(4) = ActiveWorkbook.Sheets("Chuso").Range("D4").Value
    Place(5) = ActiveWorkbook.Sheets("Chuso").Range("D5").Value

    MyNumber = Trim(Str(MyNumber))
    DecimalPlace = InStr(MyNumber, ".")

    If DecimalPlace > 0 Then
        VND_Xu = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
        MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
    End If

    Count = 1
    Do While MyNumber <> ""
        Temp = GetHundreds(Right(MyNumber, 3))
        If Temp <> "" Then VND_Dong = Temp & Place(Count) & VND_Dong
        If Len(MyNumber) > 3 Then
            MyNumber = Left(MyNumber, Len(MyNumber) - 3)
        Else
            MyNumber = ""
        End If
        Count = Count + 1
    Loop
    Select Case VND_Dong
        Case ""
            VND_Dong = ActiveWorkbook.Sheets("Chuso").Range("D8").Value  'Khong Dong
        Case "One"
            VND_Dong = ActiveWorkbook.Sheets("Chuso").Range("D9").Value  'Mot Dong
         Case Else
            VND_Dong = VND_Dong & ActiveWorkbook.Sheets("Chuso").Range("D7").Value  'Dong
    End Select
    'Doi voi Xu
    Select Case VND_Xu
        Case ""
            VND_Xu = ActiveWorkbook.Sheets("Chuso").Range("D11").Value  'Khong xu
        Case "One"
            VND_Xu = ActiveWorkbook.Sheets("Chuso").Range("D12").Value  'Mot xu
              Case Else
            VND_Xu = " và " & VND_Xu & ActiveWorkbook.Sheets("Chuso").Range("D10").Value  'Xu
    End Select
    'Cat bo khoang trang dau tien
    VND_Dong = Right(VND_Dong, Len(VND_Dong) - 1)
    'Viet hoa chu cai dau tien
    VND_Dong = UCase(Left(VND_Dong, 1)) & Right(VND_Dong, Len(VND_Dong) - 1)
    ReadNumber = VND_Dong & VND_Xu
End Function
  
'Chuyen doi so tu 100->999 sang chu
Function GetHundreds(ByVal MyNumber)
    Dim Result As String
    If Val(MyNumber) = 0 Then Exit Function
    MyNumber = Right("000" & MyNumber, 3)
    ' Chuyen doi noi hang tram
    If Mid(MyNumber, 1, 1) <> "0" Then
        Result = GetDigit(Mid(MyNumber, 1, 1)) & ActiveWorkbook.Sheets("Chuso").Range("D6").Value 'Tram
    End If
    ' Chuyen doi hang chuc
    If Mid(MyNumber, 2, 1) <> "0" Then
        Result = Result & GetTens(Mid(MyNumber, 2))
    Else
        Result = Result & GetDigit(Mid(MyNumber, 3))
    End If
    GetHundreds = Result
End Function
  
'Chuyen doi so tu 10->99 sang chu
Function GetTens(TensText)
    Dim Result As String
    Result = ""
    If Val(Left(TensText, 1)) = 1 Then
        'Gia tri nam trong khoang tu 10->19
        Select Case Val(TensText)
            'Tham chieu den O B2 de lay chu: muoi
            Case 10: Result = ActiveWorkbook.Sheets("Chuso").Range("B2").Value
            Case 11: Result = ActiveWorkbook.Sheets("Chuso").Range("B3").Value
            Case 12: Result = ActiveWorkbook.Sheets("Chuso").Range("B4").Value
            Case 13: Result = ActiveWorkbook.Sheets("Chuso").Range("B5").Value
            Case 14: Result = ActiveWorkbook.Sheets("Chuso").Range("B6").Value
            Case 15: Result = ActiveWorkbook.Sheets("Chuso").Range("B7").Value
            Case 16: Result = ActiveWorkbook.Sheets("Chuso").Range("B8").Value
            Case 17: Result = ActiveWorkbook.Sheets("Chuso").Range("B9").Value
            Case 18: Result = ActiveWorkbook.Sheets("Chuso").Range("B10").Value
            Case 19: Result = ActiveWorkbook.Sheets("Chuso").Range("B11").Value
            Case Else
        End Select
    Else
        'Gia tri trong khoang tu 20->99
        Select Case Val(Left(TensText, 1))
         'Tham chieu den O C2 de lay chu: hai muoi
            Case 2: Result = ActiveWorkbook.Sheets("Chuso").Range("C2").Value
            Case 3: Result = ActiveWorkbook.Sheets("Chuso").Range("C3").Value
            Case 4: Result = ActiveWorkbook.Sheets("Chuso").Range("C4").Value
            Case 5: Result = ActiveWorkbook.Sheets("Chuso").Range("C5").Value
            Case 6: Result = ActiveWorkbook.Sheets("Chuso").Range("C6").Value
            Case 7: Result = ActiveWorkbook.Sheets("Chuso").Range("C7").Value
            Case 8: Result = ActiveWorkbook.Sheets("Chuso").Range("C8").Value
            Case 9: Result = ActiveWorkbook.Sheets("Chuso").Range("C9").Value
            Case Else
        End Select
        Result = Result & GetDigit(Right(TensText, 1))
    End If
    GetTens = Result
End Function

'Chuyen so tu 1->9 sang chu
Function GetDigit(Digit)
    Select Case Val(Digit)
        'Tham chieu den O A2 de lay chu: mot
        Case 1: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A2").Value
        'So hai
        Case 2: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A3").Value
        'So ba
        Case 3: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A4").Value
        'So bon
        Case 4: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A5").Value
        'So nam
        Case 5: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A6").Value
        'So sau
        Case 6: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A7").Value
        'So bay
        Case 7: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A8").Value
        'So tam
        Case 8: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A9").Value
        'So chin
        Case 9: GetDigit = ActiveWorkbook.Sheets("Chuso").Range("A10").Value
        Case Else: GetDigit = ""
    End Select
End Function
Kích nút Save để lưu lại, bạn có thể xem thêm bài viết cách lưu file Excel khi chứa Macro hoặc hàm.

5. Quay trở lại màn hình Excel và sử dụng hàm vừa tạo
Có 2 cách để sử dụng hàm vừa tạo
Cách 1:
Cú pháp: =readnumber(Số cần chuyển)
Ví dụ: =readnumber(13456356)
Cách 2:
Cú pháp: =readnumber(Địa chỉ ô cần chuyển)
Ví dụ: =readnumber(A2)
Nếu bạn nào sau khi đã tạo hàm xong nhưng khi sử dụng thì gặp phải trường hợp giá trị trả về #NAME? thì phải thực hiện theo các bước dưới đây nếu sử dụng Office 2007.

- Kích nút Office Button\Excel Options
- Chọn Trust Center\Trust Center Settings


- Chọn Macro Settings\Enable all macros (not recommended; potentially dangerous code can run)



Chọn OK

Hi vọng hàm chuyển số sang chữ sẽ giúp ích các bạn nhiều trong công việc.

Tổng số điểm của bài viết là: 0 trong 0 đánh giá

Click để đánh giá bài viết

  Ý kiến bạn đọc

Hỗ trợ online
Hỗ trợ online
  • Tư vấn Kỹ thuật

    Lê Quang Lưu

    0905 914 411

    quangluutk@gmail.com

  • Tư vấn Kinh doanh

    Dương Thị Ngọc Liễu

    0985 040 674

    ngoclieuti@gmail.com

Thống kê
  • Đang truy cập3
  • Hôm nay67
  • Tháng hiện tại4,700
  • Tổng lượt truy cập145,701
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây