Chào mọi người,
Dạo này mình hay phải làm việc với các văn bản hành chính, hợp đồng, mà cứ phải ngồi gõ số tiền bằng chữ mỏi cả tay. Tìm tòi trên mạng thì thấy có mấy cách làm thủ công hoặc dùng VBA phức tạp quá. Hôm nay, mình muốn chia sẻ một tiện ích nhỏ mà mình tự mày mò ra, giúp tự động chuyển đổi định dạng số sang chữ một cách nhanh chóng, đỡ mất công gõ lại.
Cách này không cần cài thêm phần mềm gì phức tạp, cũng không cần viết code VBA. Nó tận dụng một hàm tùy chỉnh (User Defined Function - UDF) mà mình đã đóng gói lại. Các bạn chỉ cần chép đoạn code này vào module trong Excel là dùng được ngay.
Cách sử dụng:
- Mở file Excel của bạn.
- Nhấn Alt + F11 để mở cửa sổ VBA Editor.
- Vào Insert > Module.
- Copy đoạn code dưới đây và dán vào cửa sổ Module vừa mở:
Function SoSangChu(So As Double, Optional loaiTien As String = "VND") As String
Dim MangSo() As String
Dim ChuoiSo As String
Dim ChuoiChu As String
Dim i As Integer
So = Abs(So)
ChuoiSo = Format(So, "#,##0.00") ' Định dạng số có 2 thập phân
MangSo = Split(ChuoiSo, ".")
ChuoiChu = DocSo(MangSo(0)) ' Đọc phần nguyên
If UBound(MangSo) = 1 Then
If Val(MangSo(1)) > 0 Then
ChuoiChu = ChuoiChu & " phẩy " & DocSo(MangSo(1)) ' Đọc phần thập phân
End If
End If
Select Case UCase(loaiTien)
Case "VND"
SoSangChu = ChuoiChu & " đồng"
Case Else
SoSangChu = ChuoiChu
End Select
End Function
Function DocSo(GiaTri As String) As String
Dim MangChuoi() As String
Dim i As Integer
Dim KetQua As String
GiaTri = Trim(GiaTri)
GiaTri = Replace(GiaTri, ",", "") ' Loại bỏ dấu phẩy ngăn cách hàng nghìn
GiaTri = Replace(GiaTri, " ", "") ' Loại bỏ khoảng trắng
MangChuoi = Split(GiaTri, "") ' Tách từng ký tự số
For i = 1 To UBound(MangChuoi)
Select Case MangChuoi(i)
Case "0": KetQua = KetQua & " không "
Case "1": KetQua = KetQua & " một "
Case "2": KetQua = KetQua & " hai "
Case "3": KetQua = KetQua & " ba "
Case "4": KetQua = KetQua & " bốn "
Case "5": KetQua = KetQua & " năm "
Case "6": KetQua = KetQua & " sáu "
Case "7": KetQua = KetQua & " bảy "
Case "8": KetQua = KetQua & " tám "
Case "9": KetQua = KetQua & " chín "
End Select
Next i
' Xử lý các trường hợp đặc biệt như hàng chục, hàng trăm...
' (Phần này có thể tùy chỉnh để tối ưu hơn nữa)
KetQua = Replace(KetQua, " một nghìn ", " nghìn ")
KetQua = Replace(KetQua, " một trăm ", " trăm ")
KetQua = Replace(KetQua, " mười không ", " mười ")
KetQua = Replace(KetQua, " không trăm ", " ")
KetQua = Replace(KetQua, " không mười ", " lẻ ")
KetQua = Trim(KetQua)
KetQua = Replace(KetQua, " ", " ") ' Loại bỏ khoảng trắng thừa
DocSo = KetQua
End FunctionSau khi dán code, bạn có thể sử dụng hàm SoSangChu trong các ô tính của mình. Ví dụ, nếu số bạn muốn chuyển đổi nằm ở ô A1, bạn chỉ cần gõ vào ô khác công thức:
=SoSangChu(A1)
Hoặc nếu muốn kèm theo đơn vị tiền tệ:
=SoSangChu(A1, "VND")
Hy vọng tiện ích nhỏ này sẽ giúp ích cho công việc của mọi người. Ai có cách nào hay hơn thì chia sẻ thêm nhé!