irvine00_54
New Member
Mình có tìm được hàm đổi trước số thành chữ như sau:
Function TIENCHU(A) As String
Dim s, cdv, ctr, cng, cty As String
Dim sdv, strieu, sng, sty As String
chuoi = ""
s = Trim(str(A))
While Len(s) < 12
s = "0" + s
Wend
sdv = Right(s, 3)
sng = Mid(s, 7, 3)
strieu = Mid(s, 4, 3)
sty = Left(s, 3)
chuoi = IIf(doi(sty) <> " ", doi(sty) & " tỷ", "") & IIf(doi(strieu) <> " ", doi(strieu) & " triệu", "") & IIf(doi(sng) <> " ", doi(sng) & " nghìn", "") & IIf(doi(sdv) <> " ", doi(sdv), "") & " đồng chẳn"
TIENCHU = UCase(Left(Trim(chuoi), 1)) & Right(Trim(chuoi), Len(Trim(chuoi)) - 1) & "."
End Function
Function doi(c) As String
Dim dv, ch, tr, st1 As String
While Len(c) < 3
c = "0" & Trim(c)
Wend
dv = Right(c, 1)
ch = Mid(c, 2, 1)
tr = Left(c, 1)
st1 = ""
If tr = "0" Then
If ch = "0" Then
If dv = "0" Then
st1 = st1 & " "
Else
st1 = st1 & so(dv)
End If
Else
If dv = "0" Then
st1 = st1 & IIf(ch = "1", " mười", so(ch) & " mươi")
Else
st1 = st1 & IIf(ch = "1", " mười", so(ch) & " mươi") & IIf(dv = "1", " mốt", IIf(dv = "5", " lăm", so(dv)))
End If
End If
Else
If ch = "0" Then
If dv = "0" Then
st1 = st1 & so(tr) & " trăm"
Else
st1 = st1 & so(tr) & " trăm lẻ" & so(dv)
End If
Else
If dv = "0" Then
st1 = st1 & so(tr) & " trăm" & IIf(ch = "1", " mười", so(ch) & " mươi")
Else
st1 = st1 & so(tr) & " trăm" & IIf(ch = "1", " mười", so(ch) & " mươi") & IIf(dv = "1", IIf(ch = "1", " một", " mốt"), IIf(dv = "5", " lăm", so(dv)))
End If
End If
End If
doi = st1
End Function
Function so(c) As String
s = ""
Select Case c
Case "0"
s = s + " không"
Case "1"
s = s + " một"
Case "2"
s = s + " hai"
Case "3"
s = s + " ba"
Case "4"
s = s + " bốn"
Case "5"
s = s + " năm"
Case "6"
s = s + " sáu"
Case "7"
s = s + " bảy"
Case "8"
s = s + " tám"
Case "9"
s = s + " chín"
End Select
so = s
End Function
Nhưng sau khi mình áp dụng hàm này cho một ô số trong excel thì kết quả chữ không hiện đúng tiếng Việt mặc dù mình vừa dùng đúng font unicode và ngay cả đổi sang bảng mã VNI-win vẫn không được. Giúp mình phần này nhé! Thanks!
Function TIENCHU(A) As String
Dim s, cdv, ctr, cng, cty As String
Dim sdv, strieu, sng, sty As String
chuoi = ""
s = Trim(str(A))
While Len(s) < 12
s = "0" + s
Wend
sdv = Right(s, 3)
sng = Mid(s, 7, 3)
strieu = Mid(s, 4, 3)
sty = Left(s, 3)
chuoi = IIf(doi(sty) <> " ", doi(sty) & " tỷ", "") & IIf(doi(strieu) <> " ", doi(strieu) & " triệu", "") & IIf(doi(sng) <> " ", doi(sng) & " nghìn", "") & IIf(doi(sdv) <> " ", doi(sdv), "") & " đồng chẳn"
TIENCHU = UCase(Left(Trim(chuoi), 1)) & Right(Trim(chuoi), Len(Trim(chuoi)) - 1) & "."
End Function
Function doi(c) As String
Dim dv, ch, tr, st1 As String
While Len(c) < 3
c = "0" & Trim(c)
Wend
dv = Right(c, 1)
ch = Mid(c, 2, 1)
tr = Left(c, 1)
st1 = ""
If tr = "0" Then
If ch = "0" Then
If dv = "0" Then
st1 = st1 & " "
Else
st1 = st1 & so(dv)
End If
Else
If dv = "0" Then
st1 = st1 & IIf(ch = "1", " mười", so(ch) & " mươi")
Else
st1 = st1 & IIf(ch = "1", " mười", so(ch) & " mươi") & IIf(dv = "1", " mốt", IIf(dv = "5", " lăm", so(dv)))
End If
End If
Else
If ch = "0" Then
If dv = "0" Then
st1 = st1 & so(tr) & " trăm"
Else
st1 = st1 & so(tr) & " trăm lẻ" & so(dv)
End If
Else
If dv = "0" Then
st1 = st1 & so(tr) & " trăm" & IIf(ch = "1", " mười", so(ch) & " mươi")
Else
st1 = st1 & so(tr) & " trăm" & IIf(ch = "1", " mười", so(ch) & " mươi") & IIf(dv = "1", IIf(ch = "1", " một", " mốt"), IIf(dv = "5", " lăm", so(dv)))
End If
End If
End If
doi = st1
End Function
Function so(c) As String
s = ""
Select Case c
Case "0"
s = s + " không"
Case "1"
s = s + " một"
Case "2"
s = s + " hai"
Case "3"
s = s + " ba"
Case "4"
s = s + " bốn"
Case "5"
s = s + " năm"
Case "6"
s = s + " sáu"
Case "7"
s = s + " bảy"
Case "8"
s = s + " tám"
Case "9"
s = s + " chín"
End Select
so = s
End Function
Nhưng sau khi mình áp dụng hàm này cho một ô số trong excel thì kết quả chữ không hiện đúng tiếng Việt mặc dù mình vừa dùng đúng font unicode và ngay cả đổi sang bảng mã VNI-win vẫn không được. Giúp mình phần này nhé! Thanks!