Hàm chuyển số thành chữ (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,443
Nghề nghiệp
Bác sĩ
Đã có rất nhiều hàm chuyển số thành chữ trên các diễn đàn, nhưng hôm nay, tôi xin giới thiệu với các bạn hàm chuyển số thành chữ hoàn chỉnh nhất của Paulsteigel trên diễn đàn Webketoan
Mã:
Option Explicit
'
Function CountValue(ByVal Target As Range, ByVal Criteria As Long, ByVal isGreater As Boolean) As Variant
Dim i As Long, j As Long
Dim k As Long
With Target
For i = 1 To .Rows.Count
For j = 1 To .Columns.Count
If Not IsEmpty(.Cells(i, j)) Then
If isGreater Then
If Val(.Cells(i, j)) >= Criteria Then k = k + 1
Else
If Val(.Cells(i, j)) <= Criteria Then k = k + 1
End If
End If
Next
Next
End With
CountValue = k + 1
End Function
 
 
Public Function NumtoWordExl(ByVal Target As Range, Optional IsToUnicode As Boolean = False) As String
Dim iStr As String, i As Long
Dim retVal As String
If isBigRange(Target) Then
NumtoWordExl = ""
GoTo tExitFunction
End If
' this is a trick to keep excel doesnt set the value to somewhat like 1.22e12+19
iStr = Format(Target.Value, "#000")
retVal = NumtoWord(iStr)
' Now we have to convert the result to unicode if neccessary
If retVal <> "" And IsToUnicode Then retVal = ToUnicode(retVal)
NumtoWordExl = retVal
tExitFunction:
End Function
 
Function NumtoWord(InTxt As String) As String
' Concert any length number to word
' The mentor is: break a number to 9 characters length and do the conversion
' for the rest .... increment the billion counter
' the main function for the conversion is at anywhere in the net and I took this one from anonimity
' My onwed function work similarly - but i failed in searching for it - it dumbed...
' so take this one in replacement
Dim i As Integer, j As Integer
Dim OutString As String
Dim ProcArr() As String
ReDim ProcArr(10)
While Len(InTxt) > 9
' break the input string to group of 9 digit
ProcArr(i) = Right(InTxt, 9)
InTxt = Left(InTxt, Len(InTxt) - 9)
i = i + 1
Wend
ProcArr(i) = InTxt
ReDim Preserve ProcArr(i)
' Now convert the group to value
i = UBound(ProcArr)
While i > 0
' add with "w" as billion word...
OutString = OutString & IIf(Val(ProcArr(i)) > 0, ReadBilGroup(ProcArr(i)) & String(i, "w"), "")
i = i - 1
Wend
OutString = Replace(OutString, "w", " tû") & ReadBilGroup(ProcArr(0))
NumtoWord = Trim(OutString)
End Function
 
Private Function ReadBilGroup(s As String) As String
Dim l As Integer, i As Integer, j As Integer
Dim dk As Boolean
Dim A(11) As Integer
Dim C As String
 
' Variant array to quick convert the number to word
Dim iArr As Variant
iArr = Array("kh«ng", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "b¶y", "t¸m", "chÝn")
 
C = ""
l = Len(s)
 
' break number to single string
For i = 1 To l
A(i) = CInt(Mid(s, i, 1))
Next i
 
For i = 1 To l '
 
Select Case A(i)
Case 1:
If (i > 1 And (l - i + 1) Mod 3 = 1 And A(i - 1) > 1) Then
C = C & " mèt"
ElseIf ((l - i + 1) Mod 3 <> 2 And A(i) = 1) Then
C = C & " mét"
End If
Case 5:
If (i > 0 And (l - i + 1) Mod 3 = 1 And A(i - 1) <> 0) Then
C = C & " l¨m"
Else
C = C & " n¨m"
End If
Case 0:
If (l - i + 1) Mod 3 = 0 And (A(i + 1) <> 0 Or A(i + 2) <> 0) Then C = C & " kh«ng"
If (l - i + 1) Mod 3 = 2 And A(i + 1) <> 0 Then C = C & " linh"
Case Else
If i = l And A(i) = 4 Then
C = C & " t&shy;"
Else
C = C & " " & iArr(A(i))
End If
End Select
 
If ((l - i + 1) Mod 3 = 2 And A(i) <> 0 And A(i) <> 1) Then
C = C & " m&shy;¬i"
ElseIf ((l - i + 1) Mod 3 = 2 And A(i) <> 0) Then
C = C & " m&shy;êi"
End If
 
If ((l - i + 1) Mod 3 = 0 And (A(i + 1) <> 0 Or A(i + 2) <> 0)) Then
C = C & " tr¨m"
ElseIf (l - i + 1) Mod 3 = 0 And A(i) <> 0 Then
C = C & " tr¨m"
End If
 
If ((l - i + 1) = 4) Then C = C & " ngµn"
If ((l - i + 1) = 7) Then C = C & " triÖu"
 
If ((l - i + 1) Mod 3 = 0 And A(i) = 0 And A(i + 1) = 0 And A(i + 2) = 0) Then i = i + 2
 
If ((l - i + 1) Mod 3 = 1) Then
dk = True
For j = i To l
If A(j) <> 0 Then dk = False
Next j
End If
If dk Then Exit For
Next i
ReadBilGroup = C
End Function
 
 
Private Function isBigRange(ByVal Target As Range) As Boolean
On Error GoTo ErrHandler
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then isBigRange = True
ErrHandler:
End Function
Function ToUnicode(txtString As String, Optional isReversed As Boolean = False) As String
' This function will do the conversion of text string into unicode
Dim iStr As String, repTxt As String, mText As String
Dim i As Long, j As Long
Dim iUnicode As Variant ' array to keep unicode char set
Dim iTCVN As Variant ' array to keep TCVN char set
Dim iProcList() As String ' array to keep what to convert
 
'parse the parameter into this local variable
iStr = txtString
mText = txtString
 
iUnicode = Array(225, 224, 7843, 227, 7841, 259, 7855, 7857, 7859, 7861, 7863, 226, _
7845, 7847, 7849, 7851, 7853, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, _
7877, 7879, 237, 236, 7881, 297, 7883, 243, 242, 7887, 245, 7885, 244, 7889, 7891, _
7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, 250, 249, 7911, 361, 7909, _
432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 273, 193, 192, 195, _
258, 194, 212, 416, 431, 272)
 
iTCVN = Array(184, 181, 182, 183, 185, 168, 190, 187, 188, 189, 198, 169, 202, 199, 200, _
201, 203, 208, 204, 206, 207, 209, 170, 213, 210, 211, 212, 214, 221, 215, 216, 220, _
222, 227, 223, 225, 226, 228, 171, 232, 229, 230, 231, 233, 172, 237, 234, 235, 236, _
238, 243, 239, 241, 242, 244, 173, 248, 245, 246, 247, 249, 253, 250, 251, 252, 254, _
174, 193, 192, 195, 161, 162, 164, 165, 166, 167)
 
' Reenlarge the array
ReDim iProcList(1, 133)
' process the vowel only and covert to asc code
For i = 1 To Len(mText)
repTxt = Mid(mText, i, 1)
If AscW(repTxt) > 122 Then
iStr = Replace(iStr, repTxt, "[" & AscW(repTxt) & "]")
mText = Replace(mText, repTxt, " ")
' write the processed list
iProcList(1, j) = "[" & AscW(repTxt) & "]"
If isReversed Then
iProcList(0, j) = GetElementNo(AscW(repTxt), iUnicode)
Else
iProcList(0, j) = GetElementNo(AscW(repTxt), iTCVN)
End If
j = j + 1
End If
Next
If j = 0 Then
ToUnicode = txtString
Exit Function
End If
ReDim Preserve iProcList(1, j - 1)
' now convert to unicode
For i = 0 To UBound(iProcList, 2)
If isReversed Then
iStr = Replace(iStr, iProcList(1, i), ChrW(iTCVN(Val(iProcList(0, i)))))
Else
iStr = Replace(iStr, iProcList(1, i), ChrW(iUnicode(Val(iProcList(0, i)))))
End If
Next
fExit:
ToUnicode = iStr
End Function
 
Hàm nay dài quá đợi em lam xong ham dịch số tiếng anh và tiếng việt để các bác sai thử nhé.
 
Upvote 0
trai_thanhnam đã viết:
Hàm nay dài quá đợi em lam xong ham dịch số tiếng anh và tiếng việt để các bác sai thử nhé.

SG mong đc học hỏi file của bạn. Bạn xem thử Add-ins đọc số thành chữ của anh Maika tại đây xem nha.

_RU_kiss đã viết:
Toi khong biet de cai add-in nhu the nao. Phai save link do vao dau. Anh chi nao biet chi gium.!$@!!

Sau khi dowload file về. Bạn giải nén. Copy file bạn vừa giải nén. Tiếp theo bạn vào tool====>add-ins======>browse======>paste file bạn vừa giải nén vào.

Bạn xem thêm bài: Minh họa cách tạo, nạp và sử dụng Add-Ins trong MS Excel nha.
 
Upvote 0
Tôi xin gửi các bạn hàm đổi số thành chữ của tôi, mong các bạn tham gia góp ý.
Để sử dụng:
1. Bạn Copy File UDF.XLA vào C:\Program Files\Microsoft Office\OFFICE11\Library
2. Mở Excel chọn Tools -> Add-ins rồi check vào UDF (Lưu ý phải để Tools->Macro->Security->Low)
Cách dùng: Tại ô cần đổi số thành chữ nhập =tien(địa chỉ ô hoặc số cần đổi) Enter.
quan66nm@yahoo.com
 
Upvote 0
Bong05 đã viết:
Co ban nao co dich so = chu USD ko? huong dan cho minh su dung voi. Mail cua minh: maiminhtien@yahoo.com
Bạn xem qua nhé :


PHP:
 Public Function USD(WhatNumber)
' Tien USD tieng Anh' 
 
Dim ToRead, NumString, Group, Word As String
Dim I, J As Byte, W, X, Y, Z As Double
Dim FristColum, SecondColum, ReadMetho
If WhatNumber = 0 Then
ToRead = "None"
Else
If Abs(WhatNumber) >= 1E+15 Then
ToRead = "Too long number ???"
Else
FristColum = Array("None", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", _
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eightteen", "nineteen")
SecondColum = Array("None", "None", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
ReadMetho = Array("None", "trillion", "billion", "million", "thousand", "dollars", "cents")
If WhatNumber < 0 Then
ToRead = "Minus" & Space(1)
Else
ToRead = Space(0)
End If
NumString = Format(Abs(WhatNumber), "##############0.00")
NumString = Right(Space(15) & NumString, 18)
For I = 1 To 6
Group = Mid(NumString, I * 3 - 2, 3)
If Group <> Space(3) Then
Select Case Group
Case "000"
If I = 5 And Abs(WhatNumber) > 1 Then
Word = "dollars" & Space(1)
Else
Word = Space(0)
End If
Case ".00"
Word = "only"
Case Else
X = Val(Left(Group, 1))
Y = Val(Mid(Group, 2, 1))
Z = Val(Right(Group, 1))
W = Val(Right(Group, 2))
If X = 0 Then
Word = Space(0)
Else
Word = FristColum(X) & Space(1) & "hundred" & Space(1)
If W > 0 And W < 21 Then
Word = Word & "and" & Space(1)
End If
End If
If I = 6 And Abs(WhatNumber) > 1 Then
Word = "and" & Space(1) & Word
End If
If W < 20 And W > 0 Then
Word = Word & FristColum(W) & Space(1)
Else
If W >= 20 Then
Word = Word & SecondColum(Y) & Space(1)
If Z > 0 Then
Word = Word & FristColum(Z) & Space(1)
End If
End If
End If
Word = Word & ReadMetho(I) & Space(1)
End Select
ToRead = ToRead & Word
End If
Next I
End If
End If
USD = UCase(Left(ToRead, 1)) & Mid(ToRead, 2)
End Function
Public Function VND_US(WhatNumber)
' Tien Viet tieng Anh
 
Dim ToRead, NumString, Group, Word As String
Dim I, J As Byte, W, X, Y, Z As Double
Dim FristColum, SecondColum, ReadMetho
If WhatNumber = 0 Then
ToRead = "None"
Else
If Abs(WhatNumber) >= 1E+15 Then
ToRead = "! Too long number ???"
Else
FristColum = Array("None", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", _
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eightteen", "nineteen")
SecondColum = Array("None", "None", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
ReadMetho = Array("None", "trillion", "billion", "million", "thousand", "Vietnamese dong", "xu")
If WhatNumber < 0 Then
ToRead = "Minus" & Space(1)
Else
ToRead = Space(0)
End If
NumString = Format(Abs(WhatNumber), "##############0.00")
NumString = Right(Space(15) & NumString, 18)
For I = 1 To 6
Group = Mid(NumString, I * 3 - 2, 3)
If Group <> Space(3) Then
Select Case Group
Case "000"
If I = 5 And Abs(WhatNumber) > 1 Then
Word = "Vietnamese dong" & Space(1)
Else
Word = Space(0)
End If
Case ".00"
Word = "only"
Case Else
X = Val(Left(Group, 1))
Y = Val(Mid(Group, 2, 1))
Z = Val(Right(Group, 1))
W = Val(Right(Group, 2))
If X = 0 Then
Word = Space(0)
Else
Word = FristColum(X) & Space(1) & "hundred" & Space(1)
If W > 0 And W < 21 Then
Word = Word & "and" & Space(1)
End If
End If
If I = 6 And Abs(WhatNumber) > 1 Then
Word = "and" & Space(1) & Word
End If
If W < 20 And W > 0 Then
Word = Word & FristColum(W) & Space(1)
Else
If W >= 20 Then
Word = Word & SecondColum(Y) & Space(1)
If Z > 0 Then
Word = Word & FristColum(Z) & Space(1)
End If
End If
End If
Word = Word & ReadMetho(I) & Space(1)
End Select
ToRead = ToRead & Word
End If
Next I
End If
End If
VND_US = UCase(Left(ToRead, 1)) & Mid(ToRead, 2)
End Function


Thân!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em đã làm đúng các bước hướng dẫn rồi mà sao em ko thể lôi hàm đó ra dùng được. Các anh chị giúp em bé với...........!$@!!
 
Upvote 0
Các bước thực hiện

Lephuongthuy411 đã viết:
Em đã làm đúng các bước hướng dẫn rồi mà sao em ko thể lôi hàm đó ra dùng được. Các anh chị giúp em bé với...........!$@!!

B1: Mở một Workbook mới, nhấn Alt+F11 để vào VBA
B2: Copy hàm vừa mới dow về vào trang VBA đó rồi thoát khỏi VBA
B3: Save lại với đuôi là .xla(File/Save As chọn trong khung Save as type là Microsoft Excel Add-In) . Nhớ đường dẫn tới file này và đặt tên cho nó
Thường thì khi save như trên nó sẽ tự động save vào thư mục mặc định Add-In (Documents and Setings/Ten chủ máy/Application Data/Microsoft/AddIns)
B4: Vào Tools/Add In ======>Bowser =====>chọn đường dẫn tới file vừa save=====> OK
Thế là dùng thoải mái
Thân
 
Upvote 0
tui cung xin đóng góp 1 hàm chuyển từ số sang chữ
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Đây là hàm của bác phamduylong - rất chuẩn và đa dạng (VNI, UNI, ABC, ...)

Mã:
Function DocSoVni(conso) As String
s09 = Array("", " moät", " hai", " ba", " boán", " naêm", " saùu", " baûy", " taùm", " chín")
lop3 = Array("", " trieäu", " nghìn", " tyû")
If Trim(conso) = "" Then
DocSoVni = ""
ElseIf IsNumeric(conso) = True Then
If conso < 0 Then dau = "aâm " Else dau = ""
conso = Application.WorksheetFunction.Round(Abs(conso), 0)
conso = " " & conso
conso = Replace(conso, ",", "", 1)
vt = InStr(1, conso, "E")
If vt > 0 Then
sonhan = Val(Mid(conso, vt + 1))
conso = Trim(Mid(conso, 2, vt - 2))
conso = conso & String(sonhan - Len(conso) + 1, "0")
End If
conso = Trim(conso)
sochuso = Len(conso) Mod 9
If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
docso = ""
I = 1
lop = 1
Do
n1 = Mid(conso, I, 1)
n2 = Mid(conso, I + 1, 1)
n3 = Mid(conso, I + 2, 1)
baso = Mid(conso, I, 3)
I = I + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(conso) - I > 2 Then s123 = " tyû" Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " khoâng traêm"
Else
s1 = s09(n1) & " traêm"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " möôøi" Else s2 = s09(n2) & " möôi"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " moät" Else s3 = " moát"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " laêm"
Else
s3 = s09(n3)
End If
If I > Len(conso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If I > Len(conso) Then Exit Do
Loop
If docso = "" Then DocSoVni = "khoâng" Else DocSoVni = dau & Trim(docso)
Else
DocSoVni = conso
End If
End Function
 
'==================================
Function DocSoAbc(conso) As String
s09 = Array("", " mét", " hai", " ba", " bèn", " n¨m", " s¸u", " b¶y", " t¸m", " chÝn")
lop3 = Array("", " triÖu", " ngh×n", " tû", " triÖu", " ngh×n", "")
If Trim(conso) = "" Then
DocSoAbc = ""
ElseIf IsNumeric(conso) = True Then
If conso < 0 Then dau = "©m " Else dau = ""
conso = Application.WorksheetFunction.Round(Abs(conso), 0)
conso = " " & conso
conso = Replace(conso, ",", "", 1)
vt = InStr(1, conso, "E")
If vt > 0 Then
sonhan = Val(Mid(conso, vt + 1))
conso = Trim(Mid(conso, 2, vt - 2))
conso = conso & String(sonhan - Len(conso) + 1, "0")
End If
conso = Trim(conso)
sochuso = Len(conso) Mod 9
If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
docso = ""
I = 1
lop = 1
Do
n1 = Mid(conso, I, 1)
n2 = Mid(conso, I + 1, 1)
n3 = Mid(conso, I + 2, 1)
baso = Mid(conso, I, 3)
I = I + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(conso) - I > 2 Then s123 = " tû" Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " kh«ng tr¨m"
Else
s1 = s09(n1) & " tr¨m"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " m&shy;êi" Else s2 = s09(n2) & " m&shy;¬i"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " mét" Else s3 = " mèt"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " l¨m"
Else
s3 = s09(n3)
End If
If I > Len(conso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If I > Len(conso) Then Exit Do
Loop
If docso = "" Then DocSoAbc = "kh«ng" Else DocSoAbc = dau & Trim(docso)
Else
DocSoAbc = conso
End If
End Function
'===============================
Function DocSoUni(conso) As String
s09 = Array("", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & _
ChrW(259) & "m", " s" & ChrW(225) & "u", " b" & ChrW(7843) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
lop3 = Array("", " tri" & ChrW(7879) & "u", " ngh" & ChrW(236) & "n", " t" & ChrW(7927))
'Stop
If Trim(conso) = "" Then
DocSoUni = ""
ElseIf IsNumeric(conso) = True Then
If conso < 0 Then dau = ChrW(226) & "m " Else dau = ""
conso = Application.WorksheetFunction.Round(Abs(conso), 0)
conso = " " & conso
conso = Replace(conso, ",", "", 1)
vt = InStr(1, conso, "E")
If vt > 0 Then
sonhan = Val(Mid(conso, vt + 1))
conso = Trim(Mid(conso, 2, vt - 2))
conso = conso & String(sonhan - Len(conso) + 1, "0")
End If
conso = Trim(conso)
sochuso = Len(conso) Mod 9
If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
docso = ""
I = 1
lop = 1
Do
n1 = Mid(conso, I, 1)
n2 = Mid(conso, I + 1, 1)
n3 = Mid(conso, I + 2, 1)
baso = Mid(conso, I, 3)
I = I + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(conso) - I > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " kh" & ChrW(244) & "ng tr" & ChrW(259) & "m"
Else
s1 = s09(n1) & " tr" & ChrW(259) & "m"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " m" & ChrW(432) & ChrW(7901) & "i" Else s2 = s09(n2) & " m" & ChrW(432) & ChrW(417) & "i"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " m" & ChrW(7897) & "t" Else s3 = " m" & ChrW(7889) & "t"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " l" & ChrW(259) & "m"
Else
s3 = s09(n3)
End If
If I > Len(conso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If I > Len(conso) Then Exit Do
Loop
If docso = "" Then DocSoUni = "kh" & ChrW(244) & "ng" Else DocSoUni = dau & Trim(docso)
Else
DocSoUni = conso
End If
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
rất tiếc!Lỗi đó là đúng rùi!bài này mình chỉ viết với font VNtime!Kết quả hiện ra đã được mặc định là VNtime!Lỗi này mình sẽ sửa!Tại đọc ko kỹ nên mới post bài ngay!Thành thật xin lỗi!
 
Upvote 0
Vấn đề khi đọc số có phần sau số thập phân thì đọc ra sao nhỉ?
Ví dụ: quản lý tiền USD đowng nhiên phải quản lý đến Cent: 123,23 USD thì có thể đọc ra được không?
 
Upvote 0
trandn đã viết:
Vấn đề khi đọc số có phần sau số thập phân thì đọc ra sao nhỉ?
Ví dụ: quản lý tiền USD đowng nhiên phải quản lý đến Cent: 123,23 USD thì có thể đọc ra được không?

Bạn hãy đọc lại bài số 8 (13/3/07) về hàm USD, nó sẽ chuyển đổi ngay cho bạn

One hundred twenty three dollars and twenty three cents


Thân!
 
Upvote 0
Secret_grasses đã viết:
SG mong đc học hỏi file của bạn. Bạn xem thử Add-ins đọc số thành chữ của anh Maika tại đây xem nha.

Chào Secret_grasses nhưng File của anh Maika chỉ đọc thành tiền chứ ko đọc số thành bình thường phải ko bạn?
Mình chưa học lập trình Excell nên ko rõ mình là IT nhân viên trong công ty hỏi mình. Nên mình lên GPEX search. Cám ơn bạn giúp đỡ |||||
Bạn có File nào đọc số thành chữ hoàn chỉnh và hay thì up lên giùm mình với, thanhks a lot! (Không đọc thành tiền) hii
 
Upvote 0
Paiper đã viết:
Chào Secret_grasses nhưng File của anh Maika chỉ đọc thành tiền chứ ko đọc số thành bình thường phải ko bạn?
Mình chưa học lập trình Excell nên ko rõ mình là IT nhân viên trong công ty hỏi mình. Nên mình lên GPEX search. Cám ơn bạn giúp đỡ |||||
Bạn có File nào đọc số thành chữ hoàn chỉnh và hay thì up lên giùm mình với, thanhks a lot! (Không đọc thành tiền) hii
Cái này trên GPE nhiều lắm. Bạn có thể tìm hàm chuyển đổi của thầy Phamduylong rất chuẩn hoặc của TuanVNUNI rất "tốc độ"
http://www.giaiphapexcel.com/forum/showthread.php?t=1047

TDN
 
Upvote 0
ba con oi giúp minh với, minh làm phiếu chi ở công ty, mình muốn dùng hàm đổi tiền từ số sang chữ, mình đã làm như hướng dẫn nhưng không được.Mình copy cái hàm đó và mở VBA, nhưng mình không thể paste vào
VBA.có thể chỉ dẫn cụ thể cho mình được không? cảm ơn trước nhé
 
Upvote 0
làm thế nào để thêm đc: ( Bằng chữ ..... đ) vào hàm của bác Phạm duy Long bây giờ nhỉ?
 
Upvote 0
kiendt1973 đã viết:
làm thế nào để thêm đc: ( Bằng chữ ..... đ) vào hàm của bác Phạm duy Long bây giờ nhỉ?
Em áp dụng toán tử nối chuỗi kết hợp với hàm đọc số.
Ví dụ B3 có số 100. Muốn kết quả là "Bằng chữ: một trăm đồng." (dùng hàm DocsoUni chuyển số thành chữ)
Công thức ="Bằng chữ: " & DocUni(B3) & " đồng."
 
Upvote 0
Hàm của bác Long là ngắn nhất, phù hợp với công việc đổi tiền. Còn 1 số hàm khác hơi dài nhưng lại phù hợp với việc đổi số (thêm phần thập phân).
 
Upvote 0
PhanTuHuong đã viết:
Hàm của bác Long là ngắn nhất, phù hợp với công việc đổi tiền. Còn 1 số hàm khác hơi dài nhưng lại phù hợp với việc đổi số (thêm phần thập phân).
Phần thập phân không biết đọc các nào cho đúng.
5,12 đọc thế nào cho đúng? Nếu đọc theo sách giáo khoa là năm đơn vị mười hai phần trăm thì chính xác, nhưng trong thực tế không ai đọc vậy. Nếu là tiền đọc năm đồng mười hai xu hoặc năm đồng một hào hai xu; còn nếu là độ dài, thể tích, ... đọc thế nào?
Chịu thua, không viết được!
 
Upvote 0
Xem thử cái này nhé các bạn, mình chỉnh sửa từ hàm say(number,unit) của 1 bạn quên tên (rất chân thành cám ơn bạn ấy) thành hàm say(number,unit,decimal), đọc số thập phân, đọc đơn vị tính tự do kiểu 3 lít phẩy năm mươi, đơn vị cho phần thập phân kiểu năm Mỹ kim và ba muơi hai cents ( một cent), đọc không đơn vị kiểu bốn phẩy năm mươi ba, bảy đồng chẵn.
Kèm theo là hàm đọc ra tiếng Anh saye(number,unit,decimal) cũng giống như vậy (Three litters point zero four), Five Euros and fifty cents, Zero US dolllar and four cents, Fifty pounds only)
Đặc biệt có ngoại lệ cho số nhiều kiểu foot, feet; penny, pence; mouse, mice. Ngoại lệ thêm vào thoải mái trong code phần exception.
Nhưng chưa có phần Unicode.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
vungoc đã viết:
Đây là hàm của bác phamduylong - rất chuẩn và đa dạng (VNI, UNI, ABC, ...)
PhanTuHuong đã viết:
Hàm của bác Long là ngắn nhất, phù hợp với công việc đổi tiền
rất hay, cám ơn bác Long đã XD các hàm này đa dạng cho các loại mã Font khác nhau. Tuy nhiên còn bất lợi nhỏ, đó là
+ Chưa phân biệt giữa lop3 (tức là phân cách hàng tỷ, triệu, nghìn) -> nên dùng dấu "," để phân cách, VD:
Số: 123,434,567,800
thì KQ chỉ là: một trăm hai mươi ba tỷ bốn trăm ba mươi bốn triệu năm trăm sáu mươi bảy nghìn tám trăm
Nên KQ là: Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm
(đã có dấu phẩy phân cách)

+ Chưa có Ký tự đầu tiên là chữ HOA, VD trên chỉ ra rằng "một trăm ...." nên là "Một trăm ...." (như màu xanh trên)

TigerTiger đã sửa các lỗi này rùi, xin post lên:

PHP:
Public Function DocSoVni(conso) As String
s09 = Array("", " moät", " hai", " ba", " boán", " naêm", " saùu", " baûy", " taùm", " chín")
lop3 = Array("", " trieäu,", " nghìn,", " tyû,")
If Trim(conso) = "" Then
DocSoVni = ""
ElseIf IsNumeric(conso) = True Then
If conso < 0 Then dau = "aâm " Else dau = ""
conso = Application.WorksheetFunction.Round(Abs(conso), 0)
conso = " " & conso
conso = Replace(conso, ",", "", 1)
vt = InStr(1, conso, "E")
If vt > 0 Then
sonhan = Val(Mid(conso, vt + 1))
conso = Trim(Mid(conso, 2, vt - 2))
conso = conso & String(sonhan - Len(conso) + 1, "0")
End If
conso = Trim(conso)
sochuso = Len(conso) Mod 9
If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
docso = ""
I = 1
lop = 1
Do
n1 = Mid(conso, I, 1)
n2 = Mid(conso, I + 1, 1)
n3 = Mid(conso, I + 2, 1)
baso = Mid(conso, I, 3)
I = I + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(conso) - I > 2 Then s123 = " tyû" Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " khoâng traêm"
Else
s1 = s09(n1) & " traêm"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " möôøi" Else s2 = s09(n2) & " möôi"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " moät" Else s3 = " moát"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " laêm"
Else
s3 = s09(n3)
End If
If I > Len(conso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If I > Len(conso) Then Exit Do
Loop
If docso = "" Then
  DocSoVni = "khoâng" 'Else DocSoVni = dau & Trim(docso)
Else: docso = Trim(docso): DocSoVni = dau & UCase(Left(docso, 1)) + Right(docso, Len(docso) - 1): End If
Else
DocSoVni = conso
End If
End Function
 
'==================================
Public Function DocSoAbc(conso) As String
s09 = Array("", " mét", " hai", " ba", " bèn", " n¨m", " s¸u", " b¶y", " t¸m", " chÝn")
lop3 = Array("", " triÖu,", " ngh×n,", " tû,", " triÖu,", " ngh×n,", "")
If Trim(conso) = "" Then
DocSoAbc = ""
ElseIf IsNumeric(conso) = True Then
If conso < 0 Then dau = "©m " Else dau = ""
conso = Application.WorksheetFunction.Round(Abs(conso), 0)
conso = " " & conso
conso = Replace(conso, ",", "", 1)
vt = InStr(1, conso, "E")
If vt > 0 Then
sonhan = Val(Mid(conso, vt + 1))
conso = Trim(Mid(conso, 2, vt - 2))
conso = conso & String(sonhan - Len(conso) + 1, "0")
End If
conso = Trim(conso)
sochuso = Len(conso) Mod 9
If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
docso = ""
I = 1
lop = 1
Do
n1 = Mid(conso, I, 1)
n2 = Mid(conso, I + 1, 1)
n3 = Mid(conso, I + 2, 1)
baso = Mid(conso, I, 3)
I = I + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(conso) - I > 2 Then s123 = " tû" Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " kh«ng tr¨m"
Else
s1 = s09(n1) & " tr¨m"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " m­¬i" Else s2 = s09(n2) & " m­¬i"
'If n2 = 1 Then s2 = " m&shy;êi" Else s2 = s09(n2) & " m&shy;¬i"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " mét" Else s3 = " mèt"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " l¨m"
Else
s3 = s09(n3)
End If
If I > Len(conso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If I > Len(conso) Then Exit Do
Loop
If docso = "" Then
DocSoAbc = "kh«ng" 'Else DocSoAbc = dau & Trim(docso)
Else: docso = Trim(docso): DocSoAbc = dau & UCase(Left(docso, 1)) + Right(docso, Len(docso) - 1): End If
Else
DocSoAbc = conso
End If
End Function
'===============================
Public Function DocSoUni(conso) As String
s09 = Array("", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & _
ChrW(259) & "m", " s" & ChrW(225) & "u", " b" & ChrW(7843) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
lop3 = Array("", " tri" & ChrW(7879) & "u,", " ngh" & ChrW(236) & "n,", " t" & ChrW(7927) & ",")
'lop3 = Array("", " tri" & ChrW(7879) & "u", " ngh" & ChrW(236) & "n", " t" & ChrW(7927))
'Stop
If Trim(conso) = "" Then
DocSoUni = ""
ElseIf IsNumeric(conso) = True Then
If conso < 0 Then dau = ChrW(226) & "m " Else dau = ""
conso = Application.WorksheetFunction.Round(Abs(conso), 0)
conso = " " & conso
conso = Replace(conso, ",", "", 1)
vt = InStr(1, conso, "E")
If vt > 0 Then
sonhan = Val(Mid(conso, vt + 1))
conso = Trim(Mid(conso, 2, vt - 2))
conso = conso & String(sonhan - Len(conso) + 1, "0")
End If
conso = Trim(conso)
sochuso = Len(conso) Mod 9
If sochuso > 0 Then conso = String(9 - (sochuso Mod 12), "0") & conso
docso = ""
I = 1
lop = 1
Do
n1 = Mid(conso, I, 1)
n2 = Mid(conso, I + 1, 1)
n3 = Mid(conso, I + 2, 1)
baso = Mid(conso, I, 3)
I = I + 3
If n1 & n2 & n3 = "000" Then
If docso <> "" And lop = 3 And Len(conso) - I > 2 Then s123 = " t" & ChrW(7927) Else s123 = ""
Else
If n1 = 0 Then
If docso = "" Then s1 = "" Else s1 = " kh" & ChrW(244) & "ng tr" & ChrW(259) & "m"
Else
s1 = s09(n1) & " tr" & ChrW(259) & "m"
End If
If n2 = 0 Then
If s1 = "" Or n3 = 0 Then
s2 = ""
Else
s2 = " linh"
End If
Else
If n2 = 1 Then s2 = " m" & ChrW(432) & ChrW(7901) & "i" Else s2 = s09(n2) & " m" & ChrW(432) & ChrW(417) & "i"
End If
If n3 = 1 Then
If n2 = 1 Or n2 = 0 Then s3 = " m" & ChrW(7897) & "t" Else s3 = " m" & ChrW(7889) & "t"
ElseIf n3 = 5 And n2 <> 0 Then
s3 = " l" & ChrW(259) & "m"
Else
s3 = s09(n3)
End If
If I > Len(conso) Then
s123 = s1 & s2 & s3
Else
s123 = s1 & s2 & s3 & lop3(lop)
End If
End If
lop = lop + 1
If lop > 3 Then lop = 1
docso = docso & s123
If I > Len(conso) Then Exit Do
Loop

'If docso = "" Then DocSoUni = "kh" & ChrW(244) & "ng" Else DocSoUni = dau & Trim(docso)
If docso = "" Then
     DocSoUni = "kh" & ChrW(244) & "ng"
Else: docso = Trim(docso): DocSoUni = dau & UCase(Left(docso, 1)) + Right(docso, Len(docso) - 1)
End If
Else
DocSoUni = conso
End If
End Function

 
Upvote 0
Nếu tôi có số tiền là 2 560 000.52 đồng, thì làm sao?

Lê Văn Duyệt
 
Upvote 0
Nếu tôi có số tiền là 2 560 000.52 đồng, thì làm sao?
Bác xem thử cái này:
PHP:
Function Say(number, unit, dec) As String
bangchu(0, 0) = "Khoâng traêm "
bangchu(1, 0) = "Moät traêm "
bangchu(2, 0) = "Hai traêm "
bangchu(3, 0) = "Ba traêm "
bangchu(4, 0) = "Boán traêm "
bangchu(5, 0) = "Naêm traêm "
bangchu(6, 0) = "Saùu traêm "
bangchu(7, 0) = "Baûy traêm "
bangchu(8, 0) = "Taùm traêm "
bangchu(9, 0) = "Chín traêm "
bangchu(0, 1) = IIf(Int(Abs(number)) = 0, "Khoâng ", " ")
bangchu(1, 1) = "Moät "
bangchu(2, 1) = "Hai "
bangchu(3, 1) = "Ba "
bangchu(4, 1) = "Boán "
bangchu(5, 1) = "Naêm "
bangchu(6, 1) = "Saùu "
bangchu(7, 1) = "Baûy "
bangchu(8, 1) = "Taùm "
bangchu(9, 1) = "Chín "
bangchu(0, 2) = "leû "
bangchu(1, 2) = "Möôøi "
bangchu(2, 2) = "Hai möôi "
bangchu(3, 2) = "Ba möôi "
bangchu(4, 2) = "Boán möôi "
bangchu(5, 2) = "Naêm möôi "
bangchu(6, 2) = "Saùu möôi "
bangchu(7, 2) = "Baûy möôi "
bangchu(8, 2) = "Taùm möôi "
bangchu(9, 2) = "Chín möôi "
banghang(0) = " "
banghang(1) = " "
banghang(2) = "ngaøn, "
banghang(3) = "trieäu "
banghang(4) = "tyû, "
banghang(5) = "ngaøn tyû, "
bangvaloi(1, 1) = "möôi moät"
bangvaloi(1, 2) = "möôi moát"
bangvaloi(2, 1) = "i naêm"
bangvaloi(2, 2) = "i laêm"
Tam = Abs(number)
Tam = Int(Tam)
l = Len(Tam)
For i = 1 To l
so = Mid(Tam, i, 1)
so1 = IIf(i > l - 1, 0, Mid(Tam, i + 1, 1))
so2 = IIf(i > l - 2, 0, Mid(Tam, i + 2, 1))
If i < 2 Then
so3 = 0
Else
so3 = Mid(Tam, i - 1, 1)
End If
If i < 3 Then
so4 = 0
Else
so4 = Mid(Tam, i - 2, 1)
End If
nhom = Int(l - i + 1) / 3 + 1
du = (l - i + 1) Mod 3
If ((du = 0) And (so = 0) And (so1 = 0) And (so2 = 0)) Or ((du = 2) And (so = 0) And (so1 = 0)) = True Then
chu = " "
Else
chu = bangchu(so, du)
End If
If (du = 1) And ((so <> 0) Or (so3 <> 0) Or (so4 <> 0)) Then
chu = chu & banghang(nhom)
End If
If chu <> " " Then
If i = 1 Then
Say = chu
Else
Say = Say & LCase(chu)
End If
End If
Next i
Say = Replace(Say, bangvaloi(1, 1), bangvaloi(1, 2))
Say = Replace(Say, bangvaloi(2, 1), bangvaloi(2, 2))
sole = Abs(number) - Int(Abs(number))
If sole > 0 Then
Select Case unit
Case 0
dvt = ""
Case 1
dvt = "ñoàng"
Case 2
dvt = "Myõ kim"
Case 3
dvt = "Euro"
Case Else
dvt = unit
End Select
Else
Select Case unit
Case 0
dvt = IIf(dec = 1, IIf(Tam < 2, "cent", "cents"), IIf(dec = 0, "", dec))
Case 1
dvt = "ñoàng chaün"
Case 2
dvt = "Myõ kim chaün"
Case 3
dvt = "Euro chaün"
Case Else
dvt = unit & " chaün"
End Select
End If
Select Case number
Case 0
Say = ""
Case Is > 0
Say = Trim(Say) & " " & dvt
Case Else
Say = "AÂm " & LCase(Say)
Say = Trim(Say) & " " & dvt
End Select
If sole > 0 Then
Say = Trim(Say) & IIf(dec = 0, " phaåy ", " vaø ")
Say = Say & IIf(Round(sole * 100, 0) < 10 And dec = 0, "khoâng ", "")
Say = Say & LCase(Say(Round(sole * 100, 0), 0, dec))
Else
Say = Trim(Say) & IIf(number = 0, "", ".")
'Exceptions:
Say = IIf(Tam > 1, Replace(Say, "penny", "pence"), Say)
Say = IIf(Tam > 1, Replace(Say, "foot", "feet"), Say)
End If
'Exceptions:
Say = IIf(Tam > 1, Replace(Say, "penny", "pence"), Say)
Say = IIf(Tam > 1, Replace(Say, "foot", "feet"), Say)
End Function

1.tham số Unit là đơn vị tính: 1 là đồng VN, 2 là USD, 3 là EUR, đơn vị khác thì gõ trực tiếp vào tham số ("mét" chẳng hạn)
2. Tham số Dec là đơn vị cho phần thập phân: 0 là không xài đọc là phẩy ba mươi hai, 1 là cent (số nhiều thêm s), đơn vị tính khác thì gõ vào ("centimét" chẳng hạn)
3. Đọc cả số âm kể cả số âm lẻ thập phân.

Tuy nhiên chỉ mới đọc ra font VNI, chưa bẫy lỗi chuỗi là text. ngoài ra số thập phân làm tròn đến 2 số.

Hàm này còn 1 thằng em là SayE(number,Unit,Dec) đọc sang tiếng Anh. Tính năng như trên. Thêm chức năng thêm s vào đv tính số nhiều, và phân biệt 1 vài trường hợp số nhiều bất quy tắc như: penny - pence, foot - feet, mouse - mice
Số lẻ đọc point nếu chọn dec = 0

Nhờ bác xem hộ rồi sửa giúp nếu còn sai sót.
 
Upvote 0
Cần nói rõ thêm với các bác, đây là hàm mình cải tiến từ hàm Say(number,unit) của "truong huu thai", Excel member, ở bài #13 trong topic http://www.giaiphapexcel.com/forum/showthread.php?page=2&t=1563
Đó là 1 trong số ít bài đổi số thành chữ mà code mình hiểu nổi bằng trình độ i tờ, từ đó mới mở rộng các tính năng khác được. bây giờ muốn cám ơn bạn ấy cũng không làm sao được. bạn ấy chỉ viết 1 bài duy nhất ngày 17/08/07 rồi không hề thấy nữa.
Code bài này mình cải tiến dùng toàn hàm VBA nên xài được trong Access, vì mình cần dùng trong Access nhiều hơn.

Xin góp luôn thằng em SayE(number, Unit, Dec)
1.tham số Unit là đơn vị tính: 1 là Vietnam Dong, 2 là US Dollar, 3 là Euro, đơn vị khác thì gõ trực tiếp vào tham số ("Kilogram" chẳng hạn); số nhiều thêm s, không là không xài, chẵn thì đọc sixty <Unit> only.
2. Tham số Dec là đơn vị tính cho phần thập phân (đã làm tròn 2 con: 0 là không xài đọc là point thirty two hoặc point zero five, 1 là cent , đơn vị tính khác thì gõ vào ("centimetter" chẳng hạn),số nhiều thêm s.
3. Cũng có phần exception cho số nhiều bất quy tắc.
Tên biến khai báo chung với thằng anh.
PHP:
Function SayE(number, unit, dec) As String
bangchu(0, 0) = "Zero hundred "
bangchu(1, 0) = "One hundred "
bangchu(2, 0) = "Two hundred "
bangchu(3, 0) = "Three hundred "
bangchu(4, 0) = "Four hundred "
bangchu(5, 0) = "Five hundred "
bangchu(6, 0) = "Six hundred "
bangchu(7, 0) = "Seven hundred "
bangchu(8, 0) = "Eight hundred "
bangchu(9, 0) = "Nine hundred "
bangchu(0, 1) = IIf(Int(Abs(number)) = 0, "Zero ", " ")
bangchu(1, 1) = "One "
bangchu(2, 1) = "Two "
bangchu(3, 1) = "Three "
bangchu(4, 1) = "Four "
bangchu(5, 1) = "Five "
bangchu(6, 1) = "Six "
bangchu(7, 1) = "Seven "
bangchu(8, 1) = "Eight "
bangchu(9, 1) = "Nine "
bangchu(0, 2) = "and "
bangchu(1, 2) = "Ten "
bangchu(2, 2) = "Twenty "
bangchu(3, 2) = "Thirty "
bangchu(4, 2) = "Fourty "
bangchu(5, 2) = "Fifty "
bangchu(6, 2) = "Sixty "
bangchu(7, 2) = "Seventy "
bangchu(8, 2) = "Eighty "
bangchu(9, 2) = "Ninety "
banghang(0) = " "
banghang(1) = " "
banghang(2) = "thousand, "
banghang(3) = "million "
banghang(4) = "billion, "
banghang(5) = "thousand billion, "
bangvaloi(1, 1) = "Ten one"
bangvaloi(1, 2) = "Eleven"
bangvaloi(2, 1) = "Ten two"
bangvaloi(2, 2) = "Twelve"
bangvaloi(3, 1) = "Ten three"
bangvaloi(3, 2) = "Thirteen"
bangvaloi(4, 1) = "Ten four"
bangvaloi(4, 2) = "Fourteen"
bangvaloi(5, 1) = "Ten five"
bangvaloi(5, 2) = "Fifteen"
bangvaloi(6, 1) = "Ten six"
bangvaloi(6, 2) = "Sixteen"
bangvaloi(7, 1) = "Ten seven"
bangvaloi(7, 2) = "Seventeen"
bangvaloi(8, 1) = "Ten eight"
bangvaloi(8, 2) = "Eighteen"
bangvaloi(9, 1) = "Ten nine"
bangvaloi(9, 2) = "Nineteen"
tam = Abs(number)
tam = Int(tam)
l = Len(tam)
For i = 1 To l
so = Mid(tam, i, 1)
so1 = IIf(i > l - 1, 0, Mid(tam, i + 1, 1))
so2 = IIf(i > l - 2, 0, Mid(tam, i + 2, 1))
If i < 2 Then
so3 = 0
Else
so3 = Mid(tam, i - 1, 1)
End If
If i < 3 Then
so4 = 0
Else
so4 = Mid(tam, i - 2, 1)
End If
nhom = Int(l - i + 1) / 3 + 1
du = (l - i + 1) Mod 3
If ((du = 0) And (so = 0) And (so1 = 0) And (so2 = 0)) Or ((du = 2) And (so = 0) And (so1 = 0)) = True Then
chu = " "
Else
chu = bangchu(so, du)
End If
If (du = 1) And ((so <> 0) Or (so3 <> 0) Or (so4 <> 0)) Then
chu = chu & banghang(nhom)
End If
If chu <> " " Then
If i = 1 Then
SayE = chu
Else
SayE = SayE & LCase(chu)
End If
End If
Next i
For x = 1 To 9
SayE = Replace(SayE, bangvaloi(x, 1), bangvaloi(x, 2))
SayE = Replace(SayE, LCase(bangvaloi(x, 1)), LCase(bangvaloi(x, 2)))
Next x
 
sole = Abs(number) - Int(Abs(number))
If sole > 0 Then
Select Case unit
Case 0
dvt = ""
Case 1
dvt = IIf(tam < 2, "VN dong", "VN dongs")
Case 2
dvt = IIf(tam < 2, "US dollar", "US dollars")
Case 3
dvt = IIf(tam < 2, "Euro", "Euros")
Case Else
dvt = IIf(tam < 2, unit, unit & "s")
End Select
Else
Select Case unit
Case 0
dvt = IIf(dec = 1, IIf(tam < 2, "cent", "cents"), IIf(dec = 0, "", IIf(tam < 2, dec, dec & "s")))
Case 1
dvt = IIf(tam < 2, "VN dong only", "VN dongs only")
Case 2
dvt = IIf(tam < 2, "US dollar only", "US dollars only")
Case 3
dvt = IIf(tam < 2, "Euro only", "Euros only")
Case Else
dvt = IIf(tam < 2, unit, unit & "s") & " only"
End Select
End If
Select Case number
Case 0
SayE = " "
Case Is > 0
SayE = Trim(SayE & dvt)
Case Else
SayE = "Minus " & LCase(SayE)
SayE = Trim(SayE & dvt)
End Select
If sole > 0 Then
SayE = Trim(SayE) & IIf(dec = 0, " point ", " and ")
SayE = SayE & IIf(Round(sole * 100, 0) < 10 And dec = 0, "zero ", "")
SayE = SayE & LCase(SayE(Round(sole * 100, 0), 0, dec))
Else
SayE = SayE & "."
End If
           'Exceptions:
SayE = Replace(SayE, "pennys", "pence")
SayE = Replace(SayE, "mouses", "mice")
SayE = Replace(SayE, "foots", "feet")
End Function
Phần code chính dùng nguyên xi như Say(), chỉ đổi giá trị biến.
 
Upvote 0
help me , cty mình xài excel 2007 , giao diện hoàn toàn khác , nên mình k biết cách cài , chỉ cho mình với
 
Upvote 0
Dây là 3 hàm đổi chữ ra số của các loại tiền Đô, VND, Yên. Em viết hơi lủng củng các bác tham khảo và tư vấn nhé (em cũng mới tiếp cận với VBA, nên còn gà lắm)
PHP:
Public Function Hgwordd(Num)
'Ham doi so ra chu voi tien Dollar'
 Dim sole, sotien, nhom, tr, hangtr, hangch, hangdv, chu, s1, s2, s3 As String
 Dim i, s11, s22, s33, sl1, sl2, sc As Integer
 Dim hang, ngang, count, count1, count2

 count = Array(" ", "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine ")
 count1 = Array("ten ", "eleven ", "twelve ", "thirteen  ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen ")
 count2 = Array("twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety ")
 ngan = Array(" ", "trillion, ", "billion, ", "million, ", "thousand, ", " ")
 If Num = 0 Then
    chu = ""
 Else
    If Abs(Num) >= 1E+15 Then
        chu = "Input smaller number"
    Else
        chu = ""
        If Num < 0 Then
            chu = "Minus"
        End If
    End If
    sotien = Format(Abs(Num), "################0.00")
    sotien = Right(Space(15) & sotien, 18)
    For i = 1 To 5
        nhom = Mid(sotien, i * 3 - 2, 3)
        If nhom <> Space(3) And nhom <> "000" Then
            hangtr = "":                      hangch = ""
            hangdv = ""
            s1 = Left(nhom, 1):            s2 = Mid(nhom, 2, 1)
            s3 = Right(nhom, 1):           s11 = Val(s1)
            s22 = Val(s2):                    s33 = Val(s3)
            hangtr = count(s11)
            If s11 <> 0 And s22 + s33 <> 0 Then
                 tr = "hundred and "
            Else
                  If s11 <> 0 And s22 + s33 = 0 Then
                        tr = "hundred"
                  Else
                         tr = " "
                  End If
            End If
            If s2 < "2" Then
                hangch = ""
            Else
                hangch = count2(s22 - 2)
            End If
            If s2 <> "1" Then
                hangdv = count(s33)
            Else
                 hangdv = count1(s33)
            End If
            sc = Val(Mid(sotien, 14, 3))
            If sc = 0 And i = 4 Then ngan(i) = "thousand "  '!'
            chu = chu & hangtr & tr & hangch & hangdv & ngan(i)
        End If
    Next i
End If

sl1 = Val(Mid(sotien, 17, 1))
sl2 = Val(Mid(sotien, 18, 1))

If sl1 = 0 And sl2 = 0 Then
    sole = "only."
Else
    If sl1 = 0 And sl2 > 0 Then
        sole = ".  " & "Cent " & count(sl2)
    Else
        If sl1 = 1 Then
            sole = ".  " & "Cent " & count1(sl2)
        Else
            If sl1 > 1 Then
                sole = ".  " & "Cent " & count2(sl1 - 2) & count(sl2)
        End If:        End If
End If:       End If

Hgwordd = "Dollar " & chu & sole
End Function

Mã:
[B]Public Function Hgwordv(Numv)[/B]
[COLOR="Blue"]'Ham doi so ra chu voi tien Vietnam[/COLOR]
 Dim solev, sotienv, nhomv, trv, hangtrv, hangchv, hangdvv, chuv, s1v, s2v, s3v As String
 Dim iv, s11v, s22v, s33v, sl1v, sl2v, scv As Integer
 Dim hangv, ngangv, countv, count1v, count2v
 countv = Array(" ", "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine ")
 count1v = Array("ten ", "eleven ", "twelve ", "thirteen  ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen ")
 count2v = Array("twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety ")
nganv = Array(" ", "trillion, ", "billion, ", "million, ", "thousand, ", " ")
 If Numv = 0 Then
    chuv = ""
 Else
    If Abs(Numv) >= 1E+15 Then
        chuv = "Input smaller number"
    Else
        chuv = ""
        If Numv < 0 Then
             chuv = "Minus"
        End If
    End If
    sotienv = Format(Abs(Numv), "################0.00")
    sotienv = Right(Space(15) & sotienv, 18)
    For iv = 1 To 5
        nhomv = Mid(sotienv, iv * 3 - 2, 3)
        If nhomv <> Space(3) And nhomv <> "000" Then
            hangtrv = "":            hangchv = ""
            hangdvv = ""
            s1v = Left(nhomv, 1):            s2v = Mid(nhomv, 2, 1)
            s3v = Right(nhomv, 1):            s11v = Val(s1v)
            s22v = Val(s2v):                      s33v = Val(s3v)
            hangtrv = countv(s11v)
            If s11v <> 0 And s22v + s33v <> 0 Then
                trv = "hundred and "
            Else
                If s11v <> 0 And s22v + s33v = 0 Then
                    trv = "hundred"
                Else
                     trv = " "
            End If:                       End If
            If s2v < "2" Then
                 hangchv = ""
            Else
                  hangchv = count2v(s22v - 2)
            End If
            If s2v <> "1" Then
                  hangdvv = countv(s33v)
            Else
                   hangdvv = count1v(s33v)
            End If
             scv = Val(Mid(sotienv, 14, 3))
            If scv = 0 And iv = 4 Then
                  nganv(iv) = "thousand "
            End If
                  chuv = chuv & hangtrv & trv & hangchv & hangdvv & nganv(iv)
            End If
    Next iv
 End If
 sl1v = Val(Mid(sotienv, 17, 1))
 sl2v = Val(Mid(sotienv, 18, 1))

 If sl1v = 0 And sl2v = 0 Then
    solev = "only."
 End If

 Hgwordv = "Dong " & chuv & solev
[B]End Function[/B]

PHP:
Public Function Hgwordy(Numy)
 'Ham doi so ra chu voi tien Yen'
 Dim soley, sotieny, nhomy, try, hangtry, hangchy, hangdvy, chuy, s1y, s2y, s3y As String
 Dim iy, s11y, s22y, s33y, sl1y, sl2y, scy As Integer
 Dim hangy, ngangy, county, count1y, count2y
 county = Array(" ", "one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine ")
 count1y = Array("ten ", "eleven ", "twelve ", "thirteen  ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen ")
 count2y = Array("twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety ")
 ngany = Array(" ", "trillion, ", "billion, ", "million, ", "thousand, ", " ")
 If Numy = 0 Then
    chuy = ""
 Else
    If Abs(Numy) >= 1E+15 Then
         chuy = "Input smaller number"
    Else
         chu = ""
         If Numy < 0 Then
             chuy = "Minus"
         End If
    End If
    sotieny = Format(Abs(Numy), "################0.00")
    sotieny = Right(Space(15) & sotieny, 18)
    For iy = 1 To 5
        nhomy = Mid(sotieny, iy * 3 - 2, 3)
        If nhomy <> Space(3) And nhomy <> "000" Then
            hangtry = "":                         hangchy = ""
            hangdvy = ""
            s1y = Left(nhomy, 1):             s2y = Mid(nhomy, 2, 1)
            s3y = Right(nhomy, 1):            s11y = Val(s1y)
            s22y = Val(s2y):                     s33y = Val(s3y)
            hangtry = county(s11y)
            If s11y <> 0 And s22y + s33y <> 0 Then
                 try = "hundred and "
            Else
                 If s11y <> 0 And s22y + s33y = 0 Then
                     try = "hundred"
                 Else
                     try = " "
            End If:                            End If
            If s2y < "2" Then
                 hangchy = ""
            Else
                 hangchy = count2y(s22y - 2)
            End If
            If s2y <> "1" Then
                 hangdvy = county(s33y)
            Else
                 hangdvy = count1y(s33y)
            End If
            scy = Val(Mid(sotieny, 14, 3))
            If scy = 0 And iy = 4 Then
                  ngany(iy) = "thousand "
            End If
            chuy = chuy & hangtry & try & hangchy & hangdvy & ngany(iy)
        End If
    Next iy
 End If
 sl1y = Val(Mid(sotieny, 17, 1))
 sl2y = Val(Mid(sotieny, 18, 1))
 If sl1y = 0 And sl2y = 0 Then
      soley = "only."
 End If

 Hgwordy = "Yen " & chuy & soley
End Function
'L.V.Hưng
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Dây là 3 hàm đổi chữ ra số của các loại tiền Đô, VND, Yên. Em viết hơi lủng củng các bác tham khảo và tư vấn nhé (em cũng mới tiếp cận với VBA, nên còn gà lắm)

Thực ra 3 function của bạn cũng chỉ là 1; khác nhau mỗi đoạn cuối.
Bạn gộp chung lại, cho thêm 1 tham số nữa để nhận diện loại nào thế là gom được cái đuôi.)(&&@@)(&&@@

@$@!^%
 
Upvote 0
Chào các anh/chị, em đã đọc bài chuyển đổi số thành chữ nhưng không biết phải làm sao các anh chị chỉ giúp em với.Em muốn diễn giải số tiền bằng số trong file đính kèm thành chữ , giúp với !-=.,,:cc_confused:

Em cảm ơn anh, nhưng anh có thể gửi cho em file khác không ? vì file đó em mở không đươc ?_+)(9
 

File đính kèm

Upvote 0
Chào các anh/chị, em đã đọc bài chuyển đổi số thành chữ nhưng không biết phải làm sao các anh chị chỉ giúp em với.Em muốn diễn giải số tiền bằng số trong file đính kèm thành chữ , giúp với !-=.,,:cc_confused:
Đề tài này có nhiều trên GPE mình rồi đó bạn. Bạn vào thư viện GPE tải về các add-ins hỗ trợ việc dịch số ra chữ về xài. Còn nếu không muốn mất thời gian thì tải file mình đính kèm bên dưới. Sau đó giải nén vào một thư mục (thư mục nào cũng được, miễn dễ nhớ). Mở excel lên, chọn Tool-->Add-Ins-->Browse, chỉ đường dẫn tới chỗ lưu file này. ấn OK.

Muốn đọc số ra chữ bạn gõ vào công thức tại ô cần đặt chữ: =VND(số tiền).
Add-Ins này cũng hỗ trợ chuyển đổi chữ hoa, chữ thường đấy nhé (giống trong Word ấn Shift+F3 vậy)
Cách làm như sau: chọn vùng cần đổi sang chữ HOA/thường
Phím tắt như sau:
Ctrl+Shift+T: chuyển hết thành chữ thường
Ctrl+Shift+H: CHUYỂN HẾT THÀNH CHỮ HOA
Ctrl+Shift+K: Chuyển Thành Dạng Như Thế này.
File này mình đúc kết từ các bài viết của các anh chị GPE mình đấy!
Bạn làm thử xem nhé!

Em cảm ơn anh, nhưng anh có thể gửi cho em file khác không ? vì file đó em mở không đươc ?_+)(9
Nếu bạn chưa có Winrar thì có thể tải tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=2273


Ps: Nhìn cái hình chọt lét người ta rồi làm ngơ thấy ghét quá!
:-=
 

File đính kèm

Upvote 0
các bác ơi em làm theo các bác nhưng sao không có được. bác nào chỉ giúp em với. Thanks!
 
Upvote 0
các bácơi!
mình cần 1 hàm đọc số tiền ra chữ trong tiếng anh.
ví dụ : 100usd---->usd....chữ.
cám ơn.
và các thêm hàm vào
 
Upvote 0
các bác ơi em làm theo các bác nhưng sao không có được. bác nào chỉ giúp em với. Thanks!

Bạn làm theo các bác là làm theo bác nào? Không được là không được làm sao? Bạn phải nói rõ thì mọi người mới biết mà hướng dẫn chứ!

Nguyên văn bởi: quangsaiga
các bácơi!
mình cần 1 hàm đọc số tiền ra chữ trong tiếng anh.
ví dụ : 100usd---->usd....chữ.
cám ơn.
và các thêm hàm vào
Bạn chịu khó đọc kỹ các bài trong topic này xem. Mọi người đã hướng dẫn rõ lắm rồi mà.
 
Upvote 0
các bác ơi!!
mình chép cai này docso.zip vào và làm như sau:

- mình vào tools/ Add-In ---> browse----> dia chi file ---> ok
sau buoc ke tiep
- mình thoát ra ngoài vào lại
gõ thử 1 số : 123----> =docso(123) ----> chuong trinh doc khong duoc.
các bác chỉ giúp mình với.
mình cám ơn
 
Upvote 0
cái này tớ dùng ở EX 2003 thì được nhưng 2007 thì bị báo lỗi, có ai dùng được ở 2007 không ?
 
Upvote 0
Vấn đề này đã có rất nhiều người làm với nhiều thuật toán khác nhau. Mình xin đưa ra một cách mới như sau, cách này xây dựng hàm, không phải Add-In. Các bạn xem thử có đúng không nhé.
 

File đính kèm

Upvote 0
Hello everybody! Em là new member. Em cũng tự viết 1 hàm chyển đổi số sang chữ, em dân tin, ko phải dân tài chính nên ko rõ các quy định đọc số thành chữ lắm, mong mọi người cho ý kiến. Mới chỉ dừng lại ở việc đọc từ số sang chữ tiếng Việt, có đọc số thập phân.

Tiện thể hỏi các bác số này đọc thế nào: 1001 là một nghìn linh một hay một nghìn không trăm linh một?
 
Lần chỉnh sửa cuối:
Upvote 0
Thank. Nhưng trong bản em mới viết lại dưới đây thì em cứ đọc là một nghìn linh một cho đơn giản. Đọc lướt qua các trang khác em thấy có nhiều người cũng viết hàm này. Em cũng thấy có một số yêu cầu của các thành viên khác và em tự tìm cách giải quyết, có trùng với ai thì cũng ngẫu nhiên mà thôi.
http://www.mediafire.com/?izzdnm2ifyl
Em định viết tiếp hàm đọc số sang tiếng Anh nhưng tiếng Anh em dở quá, các anh đọc giúp lại cho em số này trong tiếng Anh để đối chiếu lại cách đọc của mình:
1001501000123,1024 (1 nghìn linh một tỷ năm trăm linh một triệu một trăm hai mươi ba phẩy một không hai bốn). Thank!
 
Upvote 0
1.001.501.000.123,1024 = One thousand and one billion, five hundred and one millon, and one hundred twenty three, point one o (or zero) two four.
Nghe hơi ngượng chỗ 3 số không. không biểt 3 số không có đọc không nữa.
 
Upvote 0
Tôi thấy người ta đọc thành thế này
Mã:
     [B]one trillion one billion five hundred one million one hundred twenty-three and 1022 / 10000[/B]
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm dọc số ra chữ

Vấn đề này đã có rất nhiều người làm với nhiều thuật toán khác nhau. Mình xin đưa ra một cách mới như sau, cách này xây dựng hàm, không phải Add-In. Các bạn xem thử có đúng không nhé.
Tuyệt cú mèo, không biết nếu dùng Word mà chèn thêm bảng tính excel trong word thì có chạy được không bạn?
Oh.....tuyệt.......Tôi đã thử dán hàm của bạn vào trong module trong bảng tính được chèn vào word, chạy rất tuyệt có cả tiếng việt (đương nhiên là phải thêm sheet 2 của bạn. Vấn đề tiếng việt làm tôi đau đầu mấy hôm nay, bạn tặng cho đoạn code thật tuyệt..............Thank you very much.
 
Lần chỉnh sửa cuối:
Upvote 0
B1: Mở một Workbook mới, nhấn Alt+F11 để vào VBA
B2: Copy hàm vừa mới dow về vào trang VBA đó rồi thoát khỏi VBA
B3: Save lại với đuôi là .xla(File/Save As chọn trong khung Save as type là Microsoft Excel Add-In) . Nhớ đường dẫn tới file này và đặt tên cho nó
Thường thì khi save như trên nó sẽ tự động save vào thư mục mặc định Add-In (Documents and Setings/Ten chủ máy/Application Data/Microsoft/AddIns)
B4: Vào Tools/Add In ======>Bowser =====>chọn đường dẫn tới file vừa save=====> OK
Thế là dùng thoải mái
Thân

Em ấn Alt + F11 nhưng không thấy hiện ra cái gì là sao ạ
 
Upvote 0
Không có gì hết tức là bạn chưa viết gì vào VBA cả? Bạn bắt đầu bằng tạo 1 Module mới. Bạn nhấn Alt + F11 -> nhấn phải chuột vào các tên sheet chọn Insert -> Module -> Rồi muốn viết gì vào đó thì cứ viêt nhưng phải đúng cú pháp. Cú pháp chính: Sub () '... đoạn code xử lý End Sub Ví dụ: Sub napso() Range("A1").Value = 1 End Sub Muốn chạy code thì bạn có thể nhấn vào biểu tượng Run hình giống nút Play ở thanh công cụ bên trên. Hoặc vào lại trang bảng tính nhấn Alt + F8 (tức là vào Tools -> Macro -> Macros) chọn tên sub vừa đặt -> Run. Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Góp thêm một tí!
Bạn cũng có thể copy tập tin *.xla vừa mới tạo vào thư mục C:\Program Files\Microsoft Office\OFFICE11\XLSTART
Khởi động lại ứng dụng êxcl thế là dùng được...
 
Upvote 0
HÀM CỦA BAN HANDUNG107 LỖI CHỖ NÀY LA SAO?

iArr = Array("kh"ng", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "by", "t¸m", "chÝn")
 
Upvote 0
Bản đọc số update của em: http://www.mediafire.com/?2mjcizjmyez Đọc số tiếng Việt (Unicode, TCVN, VNI): viết gọn lại hơn và sửa lỗi, tuỳ chọn cách đọc. Đọc số tiếng Tây (cái này thì cần các anh kiểm tra lại cách đọc). Đọc tiền tệ và ngày tháng.
 
Upvote 0
Các bạn giúp mình với. Mình làm theo hướng dẫn nhưng vẫn không được. Tới khúc cuối là báo lỗi. Liệu có phải không tích hợp với Excel 2003
 
Upvote 0
Trợ giúp gấp

Tôi xin gửi các bạn hàm đổi số thành chữ của tôi, mong các bạn tham gia góp ý.
Để sử dụng:
1. Bạn Copy File UDF.XLA vào C:\Program Files\Microsoft Office\OFFICE11\Library
2. Mở Excel chọn Tools -> Add-ins rồi check vào UDF (Lưu ý phải để Tools->Macro->Security->Low)
Cách dùng: Tại ô cần đổi số thành chữ nhập =tien(địa chỉ ô hoặc số cần đổi) Enter.
Cách của bạn rất đơn giản, nhưng font chữ bị lỗi. Có thể giúp tôi khắc phục không. Cám ơn bạn nhiều.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Các bạn ơi với code này thì làm thế nào để thêm chữ "đồng" ở cuối vậy
Ví dụ: "Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm đồng"

Chứ không phải "
Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm"

Mong có sự phản hôig sớm, cảm ơn nhiều!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Các bạn ơi với code này thì làm thế nào để thêm chữ "đồng" ở cuối vậy
Ví dụ: "Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm đồng"

Chứ không phải "
Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm"

Mong có sự phản hôig sớm, cảm ơn nhiều!
Cách 1/ =docsouni(...) & " đồng"
Cách 2
Vào code sửa dòng gần cuối
PHP:
DocSoUni = conso
End If
End Function
Thành
PHP:
DocSoUni = conso
DocSoUni =DocSoUni & " đồng"
End If
End Function
 
Upvote 0
Em đã thử nhưng ko được bác ạ, bác có thể hướng dẫn em cho đoạn code "docsoabc" được ko
 
Upvote 0
Em đã thử nhưng ko được bác ạ, bác có thể hướng dẫn em cho đoạn code "docsoabc" được ko
Sorry bạn sửa lại như sau
PHP:
Else
DocSoAbc = conso
End If
End Function

Thành
PHP:
Else
DocSoAbc = conso
End If
DocSoAbc = DocSoAbc & " ®ång"
End Function
Trên End Function và dưới End If
 
Upvote 0
Cam on ban pham_duy_long va ban vungoc, minh da chuyen duoc so thanh chu. Nhung co 1 van de nua, hay giup minh. Chu cai dau tien lai ko phai la chu hoa, co cach nao sua, mach minh voi!
 
Upvote 0
Hàm đọc số với các tham số theo yêu cầu người dùng

Cam on ban pham_duy_long va ban vungoc, minh da chuyen duoc so thanh chu. Nhung co 1 van de nua, hay giup minh. Chu cai dau tien lai ko phai la chu hoa, co cach nao sua, mach minh voi!
Tôi đã viết lại hàm đọc số, hàm viết ngắn gọn hơn. Tất cả các chuỗi tiếng Việt đều đưa vào 2 mảng arNumarGrp, nếu có thay đổi cách đọc như ngàn/nghìn, bốn/, ... các bạn có thể thay đổi trong mảng là được.
Mỗi người dùng có yêu cầu khác nhau. Muốn hàm đáp ứng được các yêu cầu riêng, tôi bổ sung thêm 4 tham số để tùy chọn đơn vị, cách đọc linh lẻ, dấu tách nhóm, cách viết hoa.

Function DocSo(Number, DonVi, Le, Phay, Hoa)
Ý nghĩa các tham số:
Number: bắt buộc nhập, là số hoặc chuỗi có dạng số.
DonVi: không bắt buộc. Ngầm định không có đơn vị. DonVi nhập dạng chuỗi.
Le: không bắt buộc nhập. Ngầm định cách đọc "lẻ". Le nhập dạng chuỗi.
Phay: không bắt buộc nhập. Ngầm định không có dấu tách nhóm. Phay nhập dạng chuỗi.
Hoa: không bắt buộc nhập. Ngầm định viết hoa ký tự đầu tiên. Hoa nhập dạng Boolean:
_____________- TRUE hoặc số nguyên <>0: viết hoa ký tự đầu
_____________- FALSE hoặc 0: không viết hoa ký tự đầu.

Ví dụ đọc số 1.123.405 tại ô B2


Công thức​




|
Kết quả​




|
Ghi chú​


|
=Docso($B$2)|Một triệu một trăm hai mươi ba ngàn bốn trăm lẻ năm|Không có tham số DonVi, Le, Phay, Hoa (ngầm định)|
=Docso($B$2;"đồng")|Một triệu một trăm hai mươi ba ngàn bốn trăm lẻ năm đồng|Có tham số DonVi|
=Docso($B$2;"đồng";"linh")|Một triệu một trăm hai mươi ba ngàn bốn trăm linh năm đồng|Có tham số DonVi, Le|
=Docso($B$2;"đồng";"linh";"-")|Một triệu- một trăm hai mươi ba ngàn- bốn trăm linh năm đồng|Có tham số DonVi, Le, Phay (dùng dấu gạch " - " tách nhóm)|
=Docso($B$2;"đồng";"linh";",")|Một triệu, một trăm hai mươi ba ngàn, bốn trăm linh năm đồng|Có tham số DonVi, Le, Phay (dùng dấu phẩy " , " tách nhóm)|
=Docso($B$2;"đồng";"linh";",";0)|một triệu, một trăm hai mươi ba ngàn, bốn trăm linh năm đồng|Có tham số DonVi, Le, Phay (dùng dấu phẩy " , " tách nhóm), Hoa (viết chữ thường ký tự đầu)|
=Docso($B$2;"";"";"";0)|một triệu một trăm hai mươi ba ngàn bốn trăm lẻ năm|Bỏ qua DonVi, Le, Phay. Hoa (viết chữ thường ký tự đầu)|
Mã:
Function DocSo(Number As String, Optional DonVi As String = "", Optional Le As String = "", Optional Phay As String = "", Optional Hoa As Boolean = True) As String
Dim arNum, arGrp, dInt As String, dau As String, dvInt As String, s123 As String
Dim s1 As String, s2 As String, s3 As String, sNhom As String
Dim nId As Long, n03 As Long, n1 As Long, n2 As Long, n3 As Long
[COLOR=blue]arNum = Array(" không", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", " sáu", " b" & ChrW(7843) & "y", " tám", " chín", " m" & ChrW(432) & ChrW(7901) & "i", " m" & ChrW(432) & ChrW(417) & "i", " m" & ChrW(7889) & "t", " l" & ChrW(7867), " b" & ChrW(7889) & "n", " l" & ChrW(259) & "m", " ch" & ChrW(7859) & "n", " không", ",", " l" & ChrW(7867))[/COLOR]
[COLOR=blue]arGrp = Array(" tr" & ChrW(259) & "m", " tri" & ChrW(7879) & "u", " ngàn", " t" & ChrW(7927), " âm", "", "")[/COLOR]
On Error GoTo baoloi
If Phay <> "" Then arGrp(5) = Trim(Phay)
If DonVi <> "" Then arGrp(6) = " " & Trim(DonVi)
If Le <> "" Then arNum(13) = " " & Trim(Le)
If Number < 0 Then
  Number = Abs(Number)
  dau = arGrp(4)
End If
dvInt = Int(Number)
n1 = ((Len(Str(dvInt)) - 1) Mod 9)
dvInt = String(9 - (((Len(Str(dvInt)) - 1) Mod 9) Mod 12), "0") & dvInt
n03 = 1
For nId = 1 To Len(dvInt) Step 3
  s1 = "": s2 = "": s3 = "": sNhom = ""
  If Mid(dvInt, nId, 3) = "000" Then
    s123 = ""
    [COLOR=red]If dInt <> "" And nId = 7 Then dInt = dInt & arGrp(3)[/COLOR]
  Else
    n1 = Mid(dvInt, nId, 1)
    n2 = Mid(dvInt, nId + 1, 1)
    n3 = Mid(dvInt, nId + 2, 1)
    If n1 = 0 And dInt <> "" Then s1 = arNum(0) & arGrp(0)
    If n1 > 0 Then s1 = arNum(n1) & arGrp(0)
    If n2 = 0 And (s1 = "" Or n3 = 0) Then s2 = ""
    If n2 = 0 And s1 <> "" And n3 > 0 Then s2 = arNum(13)
    If n2 = 1 Then s2 = arNum(10)
    If n2 > 1 Then s2 = arNum(n2) & arNum(11)
    If n3 = 1 And n2 <= 1 Then s3 = arNum(1)
    If n3 = 1 And n2 > 1 Then s3 = arNum(12)
    If n3 = 5 And n2 = 0 Then s3 = arNum(5)
    If n3 = 5 And n2 <> 0 Then s3 = arNum(15)
    If s3 = "" And n3 > 0 Then s3 = arNum(n3)
    s123 = s1 & s2 & s3
    If n03 = 3 And (dInt <> "" Or s123 <> "") And Len(dvInt) - nId > 9 Then sNhom = arGrp(3)
    If sNhom = "" And n03 < 3 Then sNhom = arGrp(n03)
    s123 = s123 & sNhom
    dInt = dInt & s123 & arGrp(5)
  End If
  If n03 = 3 Then n03 = 1 Else n03 = n03 + 1
Next
If dInt = "" Then dInt = arNum(0) Else dInt = dau & dInt
If Right(dInt, 1) = arGrp(5) Then dInt = Left(dInt, Len(dInt) - 1)
If Hoa = True Then
  DocSo = UCase(Left(Trim(dInt), 1)) & Mid(Trim(dInt) & arGrp(6), 2)
Else
  DocSo = Trim(dInt) & arGrp(6)
End If
Exit Function
baoloi:
DocSo = Number & " ?"
End Function
Hàm này cho Unicode, tôi sẽ viết tiếp các hàm cho VNI-Windows và TCVN3-ABC
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm đọc số với các tham số theo yêu cầu người dùng (tt)

Chỉnh hàm DocSo(Number, DonVi, Le, Phay, Hoa) sử dụng cho bảng mã VNI-Windows và TCVN3-ABC:
Để sử dụng cho các bảng mã VNI-Windows và TCVN3-ABC, bạn chỉ cần thay 2 mảng arNumarGrp trong hàm DocSo bằng các bảng mã tương ứng:

VNI-Windows:
Mã:
arNum = Array(" khoâng", " moät", " hai", " ba", " boán", " naêm", " saùu", " baûy", " taùm", " chín", " möôøi", " möôi", " moát", " leû", " boán", " laêm", " chaún", " khoâng", ",", " leû")
arGrp = Array(" traêm", " trieäu", " ngaøn", " tyû", " aâm", "", "")

TCVN3-ABC:

Mã:
arNum = Array(" kh«ng", " mét", " hai", " ba", " bèn", " n¨m", " s¸u", " b¶y", " t¸m", " chÝn", " m­êi", " m­¬i", " mèt", " lÎ", " bèn", " l¨m", " ch¼n", " kh«ng", ",", " lÎ")
arGrp = Array(" tr¨m", " triÖu", " ngµn", " tû", " ©m", "", "")
 
Upvote 0
Tôi đã viết lại hàm đọc số, hàm viết ngắn gọn hơn. Mỗi người dùng có yêu cầu khác nhau. Muốn hàm đáp ứng được các yêu cầu riêng, tôi bổ sung thêm 4 tham số để tùy chọn đơn vị, cách đọc linh lẻ, dấu tách nhóm, cách viết hoa.

Function DocSo(Number, DonVi, Le, Phay, Hoa)

Hoa: không bắt buộc nhập. Ngầm định không viết hoa ký tự đầu tiên. Hoa nhập dạng Boolean: TRUE hoặc số nguyên <>0: viết hoa ký tự đầu FALSE hoặc 0: không viết hoa ký tự đầu.
Thưa Thầy, hình như tham số Hoa ngầm định là viết hoa đầu câu chứ ? Chỉ khi nào không muốn viết hoa đầu câu thì gõ số 0 vào chỗ đó ?
 
Upvote 0
Thưa Thầy, hình như tham số Hoa ngầm định là viết hoa đầu câu chứ ? Chỉ khi nào không muốn viết hoa đầu câu thì gõ số 0 vào chỗ đó ?
Tham số Hoa ngầm định là viết hoa đầu câu đúng như BNTT đã phát hiện. Đã chỉnh lại bài 58
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã làm các bước như trên. Nhưng lúc làm vẫn "ok"
Vần đề là em Off chương trình Exel, rồi mở lại dùng lại lệnh kô đc, mà TV mới nên còn nhiều cái chưa rõ mong các Bác hướng dẫn giúp. Thân ./.
 
Lần chỉnh sửa cuối:
Upvote 0
mong thầy chỉ bảo thêm

Tôi đã viết lại hàm đọc số, hàm viết ngắn gọn hơn. Tất cả các chuỗi tiếng Việt đều đưa vào 2 mảng arNumarGrp, nếu có thay đổi cách đọc như ngàn/nghìn, bốn/, ... các bạn có thể thay đổi trong mảng là được.
Mỗi người dùng có yêu cầu khác nhau. Muốn hàm đáp ứng được các yêu cầu riêng, tôi bổ sung thêm 4 tham số để tùy chọn đơn vị, cách đọc linh lẻ, dấu tách nhóm, cách viết hoa.

Function DocSo(Number, DonVi, Le, Phay, Hoa)
Ý nghĩa các tham số:
Number: bắt buộc nhập, là số hoặc chuỗi có dạng số.
DonVi: không bắt buộc. Ngầm định không có đơn vị. DonVi nhập dạng chuỗi.
Le: không bắt buộc nhập. Ngầm định cách đọc "lẻ". Le nhập dạng chuỗi.
Phay: không bắt buộc nhập. Ngầm định không có dấu tách nhóm. Phay nhập dạng chuỗi.
Hoa: không bắt buộc nhập. Ngầm định viết hoa ký tự đầu tiên. Hoa nhập dạng Boolean:
_____________- TRUE hoặc số nguyên <>0: viết hoa ký tự đầu
_____________- FALSE hoặc 0: không viết hoa ký tự đầu.

Ví dụ đọc số 1.123.405 tại ô B2

Công thức​


|
Kết quả​


|
Ghi chú​

|
=Docso($B$2)|Một triệu một trăm hai mươi ba ngàn bốn trăm lẻ năm|Không có tham số DonVi, Le, Phay, Hoa (ngầm định)|
=Docso($B$2;"đồng")|Một triệu một trăm hai mươi ba ngàn bốn trăm lẻ năm đồng|Có tham số DonVi|
=Docso($B$2;"đồng";"linh")|Một triệu một trăm hai mươi ba ngàn bốn trăm linh năm đồng|Có tham số DonVi, Le|
=Docso($B$2;"đồng";"linh";"-")|Một triệu- một trăm hai mươi ba ngàn- bốn trăm linh năm đồng|Có tham số DonVi, Le, Phay (dùng dấu gạch " - " tách nhóm)|
=Docso($B$2;"đồng";"linh";",")|Một triệu, một trăm hai mươi ba ngàn, bốn trăm linh năm đồng|Có tham số DonVi, Le, Phay (dùng dấu phẩy " , " tách nhóm)|
=Docso($B$2;"đồng";"linh";",";0)|một triệu, một trăm hai mươi ba ngàn, bốn trăm linh năm đồng|Có tham số DonVi, Le, Phay (dùng dấu phẩy " , " tách nhóm), Hoa (viết chữ thường ký tự đầu)|
=Docso($B$2;"";"";"";0)|một triệu một trăm hai mươi ba ngàn bốn trăm lẻ năm|Bỏ qua DonVi, Le, Phay. Hoa (viết chữ thường ký tự đầu)|
Mã:
Function DocSo(Number As String, Optional DonVi As String = "", Optional Le As String = "", Optional Phay As String = "", Optional Hoa As Boolean = True) As String
Dim arNum, arGrp, dInt As String, dau As String, dvInt As String, s123 As String
Dim s1 As String, s2 As String, s3 As String, sNhom As String
Dim nId As Long, n03 As Long, n1 As Long, n2 As Long, n3 As Long
[COLOR=blue]arNum = Array(" không", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", " sáu", " b" & ChrW(7843) & "y", " tám", " chín", " m" & ChrW(432) & ChrW(7901) & "i", " m" & ChrW(432) & ChrW(417) & "i", " m" & ChrW(7889) & "t", " l" & ChrW(7867), " b" & ChrW(7889) & "n", " l" & ChrW(259) & "m", " ch" & ChrW(7859) & "n", " không", ",", " l" & ChrW(7867))[/COLOR]
[COLOR=blue]arGrp = Array(" tr" & ChrW(259) & "m", " tri" & ChrW(7879) & "u", " ngàn", " t" & ChrW(7927), " âm", "", "")[/COLOR]
On Error GoTo baoloi
If Phay <> "" Then arGrp(5) = Trim(Phay)
If DonVi <> "" Then arGrp(6) = " " & Trim(DonVi)
If Le <> "" Then arNum(13) = " " & Trim(Le)
If Number < 0 Then
  Number = Abs(Number)
  dau = arGrp(4)
End If
dvInt = Int(Number)
n1 = ((Len(Str(dvInt)) - 1) Mod 9)
dvInt = String(9 - (((Len(Str(dvInt)) - 1) Mod 9) Mod 12), "0") & dvInt
n03 = 1
For nId = 1 To Len(dvInt) Step 3
  s1 = "": s2 = "": s3 = "": sNhom = ""
  If Mid(dvInt, nId, 3) = "000" Then
    s123 = ""
  Else
    n1 = Mid(dvInt, nId, 1)
    n2 = Mid(dvInt, nId + 1, 1)
    n3 = Mid(dvInt, nId + 2, 1)
    If n1 = 0 And dInt <> "" Then s1 = arNum(0) & arGrp(0)
    If n1 > 0 Then s1 = arNum(n1) & arGrp(0)
    If n2 = 0 And (s1 = "" Or n3 = 0) Then s2 = ""
    If n2 = 0 And s1 <> "" And n3 > 0 Then s2 = arNum(13)
    If n2 = 1 Then s2 = arNum(10)
    If n2 > 1 Then s2 = arNum(n2) & arNum(11)
    If n3 = 1 And n2 <= 1 Then s3 = arNum(1)
    If n3 = 1 And n2 > 1 Then s3 = arNum(12)
    If n3 = 5 And n2 = 0 Then s3 = arNum(5)
    If n3 = 5 And n2 <> 0 Then s3 = arNum(15)
    If s3 = "" And n3 > 0 Then s3 = arNum(n3)
    s123 = s1 & s2 & s3
    If n03 = 3 And (dInt <> "" Or s123 <> "") And Len(dvInt) - nId > 9 Then sNhom = arGrp(3)
    If sNhom = "" And n03 < 3 Then sNhom = arGrp(n03)
    s123 = s123 & sNhom
    dInt = dInt & s123 & arGrp(5)
  End If
  If n03 = 3 Then n03 = 1 Else n03 = n03 + 1
Next
If dInt = "" Then dInt = arNum(0) Else dInt = dau & dInt
If Right(dInt, 1) = arGrp(5) Then dInt = Left(dInt, Len(dInt) - 1)
If Hoa = True Then
  DocSo = UCase(Left(Trim(dInt), 1)) & Mid(Trim(dInt) & arGrp(6), 2)
Else
  DocSo = Trim(dInt) & arGrp(6)
End If
Exit Function
baoloi:
DocSo = Number & " ?"
End Function
Hàm này cho Unicode, tôi sẽ viết tiếp các hàm cho VNI-Windows và TCVN3-ABC
Hàm của thầy dùng tốt,em dùng hàm này để đổi tiền.vấn đề nảy sinh là em muốn đọc tiền chẵn,tiền lẻ.ví dụ 15000 = mười lăm nghìn đồng chẵn,15123 = mười lăm nghìn một trăm hai ba đồng.Thầy giúp em với
 
Upvote 0
Có đọc được tới hàng tỷ không? Với lại tui thấy không đọc được chữ số 0 trong hàng trăm, vì ngân hàng yêu cầu. Ví dụ: 123065 (một trăm hai mươi ba triệu không trăm sáu mươi lăm ngàn đồng chẵn). Xin cải tổ giúp.
 
Upvote 0
Có đọc được tới hàng tỷ không? Với lại tui thấy không đọc được chữ số 0 trong hàng trăm, vì ngân hàng yêu cầu. Ví dụ: 123065 (một trăm hai mươi ba triệu không trăm sáu mươi lăm ngàn đồng chẵn). Xin cải tổ giúp.
Sao bạn không dùng thử hàm Docso trước khi hỏi ?
Có đọc được tới hàng tỷ không?
Đọc chính xác đến số 15 chữ số (999.999 tỷ)
Các số trên 15 chữ số vẫn đọc được nhưng excel làm tròn các số bên phải. Ví dụ 123.456.789.012.345.678 > 123.456.789.012.346.000

123065 (một trăm hai mươi ba triệu không trăm sáu mươi lăm ngàn đồng chẵn)

Docso(123065) > Một trăm hai mươi ba ngàn không trăm sáu mươi lăm
Docso(123065000) > Một trăm hai mươi ba triệu không trăm sáu mươi lăm ngàn
Đúng như yêu cầu của trungtintran

thanlan102 đã viết:
Hàm của thầy dùng tốt,em dùng hàm này để đổi tiền.vấn đề nảy sinh là em muốn đọc tiền chẵn,tiền lẻ.ví dụ 15000 = mười lăm nghìn đồng chẵn,15123 = mười lăm nghìn một trăm hai ba đồng.Thầy giúp em với
Do mỗi người có yêu cầu khác nhau, nên khó có thể viết 1 hàm đáp ứng cho nhiều người.
Từ hàm Docso, em có thể kết hợp với các hàm có sẳn của excel để phục vụ cho yêu cầu của riêng của mình.
Còn chẳn là sao? 15000 là chẳn, 15500, 15550 có gọi là chẳn không?
Nếu số hàng đơn vị là 0 (15000 là chẳn, 15500, 15550) gọi là chẳn thì em có thể dùng công thức này:
=IF(MOD(A1,10)=0, docso(A1) & " chẳn", docso(A1) & " đồng")
 
Upvote 0
SG mong đc học hỏi file của bạn. Bạn xem thử Add-ins đọc số thành chữ của anh Maika tại đây xem nha.



Sau khi dowload file về. Bạn giải nén. Copy file bạn vừa giải nén. Tiếp theo bạn vào tool====>add-ins======>browse======>paste file bạn vừa giải nén vào.

Bạn xem thêm bài: Minh họa cách tạo, nạp và sử dụng Add-Ins trong MS Excel nha.
cái này thì hay, nhưng khổ nổi đem sang máy khác (không có cài macro nay) thì lại không hiện thị được
 
Upvote 0
Font TCVN3 không phù hợp với các code trong office 2003 chạy win 7

Cho mình hỏi tại sao khi dùng hàm đổi số thành chữ font TCVN3 trên Office 2003 (hệ điều hành Win7) thì font cứ bị lỗi một số chỗ nhỉ, trong khi đó cũng hàm này khi dùng trên win XP thì ngon lành cành đào
 
Lần chỉnh sửa cuối:
Upvote 0
Cách tạo hàm này thế nào? Bạn có thể nói rõ cho mình được không? Mình tìm hàm dịch số mà không biết phải làm thế nào? Các bạn hướng dẫn cụ thể cho tui với. Cảm ơn cả nhà nghe!
 
Upvote 0
Kg: thầy Long
Hàm docso cua thầy đáp ứng được yêu cầu của người dùng, nhưng Funnction của thầy không đọc đúng cho số hàng ngàn tỷ khi nhóm ngàn là "000" (ví dụ: docso(2.000.000.009.000)= "Hai ngàn không trăm lẻ chín ngàn" ), Thầy bổ sung lại giúp mọi người với. Cảm ơn
 
Upvote 0
Kg: thầy Long
Hàm docso cua thầy đáp ứng được yêu cầu của người dùng, nhưng Funnction của thầy không đọc đúng cho số hàng ngàn tỷ khi nhóm ngàn là "000" (ví dụ: docso(2.000.000.009.000)= "Hai ngàn không trăm lẻ chín ngàn" ), Thầy bổ sung lại giúp mọi người với. Cảm ơn

Nếu bạn chỉ quan tâm tới ứng dụng (không lập trình VBA) thì tham khảo add-in dưới đây:
http://www.giaiphapexcel.com/forum/...-độ-nhanh-tối-đa-nhanh-hơn-80-các-Addins-khác
 
Upvote 0
Kg: thầy Long
Hàm docso cua thầy đáp ứng được yêu cầu của người dùng, nhưng Funnction của thầy không đọc đúng cho số hàng ngàn tỷ khi nhóm ngàn là "000" (ví dụ: docso(2.000.000.009.000)= "Hai ngàn không trăm lẻ chín ngàn" ), Thầy bổ sung lại giúp mọi người với. Cảm ơn
Tôi đã chỉnh lại code ở bài #58
Cám ơn duchuynh103 đã phát hiện lỗi
 
Upvote 0
em đã mở library ra rồi nhưng không biết copy cái nào nữa, chỉ thấy các file: EUROTOOL; HTML; LOOKUP; SUMIF nên không thể copy file UDF.XLA và check vào UDF được. Rất mong được sự chỉ dẫn tân tình. Em cảm ơn nhiều
 
Upvote 0
Xin chi cho minh cach su dung voi. Minh Add - Ins roi nhung dung the nao day
 
Upvote 0
Hàm chuyển số thành chữ font Unicode đây...


Public Function vnd(Diachi)
Dim Ketqua, Sotien, Nhom, Chu, Dich, S1, S2, S3 As String
Dim I, J, Vitri As Byte, S As Double
Dim Hang, Doc, Dem
If Diachi = 0 Then
Ketqua = "Kh" & ChrW(244) & "ng " & ChrW(273) & ChrW(7891) & "ng."
Else
If Abs(Diachi) >= 1E+15 Then
Ketqua = "S" & ChrW(7889) & " qu" & ChrW(225) & " l" & ChrW(7899) & "n !"
Else
If Diachi < 0 Then
Ketqua = "tr" & ChrW(7915) & Space(1)
Else
Ketqua = Space(0)
End If
Sotien = Format(Abs(Diachi), "##############0.00") '18 digits with 2 decimal
Sotien = Right(Space(15) & Sotien, 18)
Hang = Array("None", "tr" & ChrW(259) & "m", "m" & ChrW(432) & ChrW(417) & "i", "ng" & ChrW(236) & "n")
Doc = Array("None", "ng" & ChrW(224) & "n t" & ChrW(7927), "t" & ChrW(7927), "tri" & ChrW(7879) & "u", "ng" & ChrW(224) & "n", ChrW(273) & ChrW(7891) & "ng", ".")
Dem = Array("None", "m" & ChrW(7897) & "t", "hai", "ba", "b" & ChrW(7889) & "n", "n" & ChrW(259) & "m", "s" & ChrW(225) & "u", "b" & ChrW(7843) & "y", "t" & ChrW(225) & "m", "ch" & ChrW(237) & "n")
For I = 1 To 6
Nhom = Mid(Sotien, I * 3 - 2, 3)
If Nhom <> Space(3) Then
Select Case Nhom
Case "000"
If I = 5 Then
Chu = ChrW(273) & ChrW(7891) & "ng" & Space(1)
Else
Chu = Space(0)
End If
Case ".00"
Chu = "ch" & ChrW(7861) & "n ."
Case Else
S1 = Left(Nhom, 1)
S2 = Mid(Nhom, 2, 1)
S3 = Right(Nhom, 1)
Chu = Space(0)
Hang(3) = Doc(I)
For J = 1 To 3
Dich = Space(0)
S = Val(Mid(Nhom, J, 1))
If S > 0 Then
Dich = Dem(S) & Space(1) & Hang(J) & Space(1)
End If
Select Case J
Case 2 And S = 1
Dich = "möôøi" & Space(1)
Case 3 And S = 0 And Nhom <> Space(2) & "0"
Dich = Hang(J) & Space(1)
Case 3 And S = 5 And S2 <> Space(1) And S2 <> "0"
Dich = "l" & Mid(Dich, 2)
Case 2 And S = 0 And S3 <> "0"
If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And I = 4) Then
Dich = "leû" & Space(1)
End If
End Select
Chu = Chu & Dich
Next J
End Select
Vitri = InStr(1, Chu, "m" & ChrW(432) & ChrW(417) & "i m" & ChrW(7897) & "t", 1)
If Vitri > 0 Then Mid(Chu, Vitri, 10) = "m" & ChrW(432) & ChrW(417) & "i m" & ChrW(7889) & "t"
Ketqua = Ketqua & Chu
End If
Next I
End If
End If
vnd = "(" & UCase(Left(Ketqua, 1)) & Mid(Ketqua, 2) & ")"
End Function
 
Upvote 0
các bạn ơi tôi đã làm nhưng nó chẳng có chữ ( đồng chẵn) ở cuối là sao vậy
 
Upvote 0
Đề tài này có nhiều trên GPE mình rồi đó bạn. Bạn vào thư viện GPE tải về các add-ins hỗ trợ việc dịch số ra chữ về xài. Còn nếu không muốn mất thời gian thì tải file mình đính kèm bên dưới. Sau đó giải nén vào một thư mục (thư mục nào cũng được, miễn dễ nhớ). Mở excel lên, chọn Tool-->Add-Ins-->Browse, chỉ đường dẫn tới chỗ lưu file này. ấn OK.

Muốn đọc số ra chữ bạn gõ vào công thức tại ô cần đặt chữ: =VND(số tiền).
Add-Ins này cũng hỗ trợ chuyển đổi chữ hoa, chữ thường đấy nhé (giống trong Word ấn Shift+F3 vậy)
Cách làm như sau: chọn vùng cần đổi sang chữ HOA/thường
Phím tắt như sau:
Ctrl+Shift+T: chuyển hết thành chữ thường
Ctrl+Shift+H: CHUYỂN HẾT THÀNH CHỮ HOA
Ctrl+Shift+K: Chuyển Thành Dạng Như Thế này.
File này mình đúc kết từ các bài viết của các anh chị GPE mình đấy!
Bạn làm thử xem nhé
Anh cadafi ơi.Các bước như trên em đều làm được hết rồi nhưng e có thắc mắc là tại sao lần sau cứ mỗi khi thoát ra vào lại excel thì máy lại hiện báo là bị lỗi .lúc đó mình lại phải vào addin gỡ nó ra rùi lại cài vào rồi mới sd được.A cho e hỏi có cách nào để lần sau mình vào máy ko báo lỗi thế không?Cám ơn A nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn man ơi! Mình dow hàm của bạn nhưng khi mình thực hiện thì nó không hiển thị "đồng" ở đuôi nhỉ ? Bạn chỉ cho mình với nha.Cảm ơn bạn nhiều.
 
Upvote 0
ui sao mình làm theo các bước bạn hướng dẫn mà không dùng được là sao?
 
Upvote 0
Xin chao!
Minh la thanh vien moi, minh da tai ham cua "man" ve de chuyen so thanh chu nhung k duoc va hien ra "?name"
ban vui long giai thich giup minh nhe!
Cam on!
 
Upvote 0
Xin chao!
Minh la thanh vien moi, minh da tai ham cua "man" ve de chuyen so thanh chu nhung k duoc va hien ra "?name"
ban vui long giai thich giup minh nhe!
Cam on!

Bạn cần viết có dấu tiếng Việt để dễ đọc, cũng là quy định của diễn đàn. Bạn cũng cần trích bài mà bạn hỏi để tiện biết bạn đang sử dụng bài của người nào mà hướng dẫn đúng cho bạn.
 
Upvote 0
cho e hỏi làm thế nào để nó chạy ẩn mà ko cần phải gõ hàm khi sử dụng ấy. Chẳng hạn mình chỉ cần gõ số 100 thì nó tự biến thành chữ luôn, k cần phải gõ đầy đủ hàm =vnd(100) ấy :), hướng dẫn e đầy đủ dc k :)
 
Upvote 0
Có một vấn lỗi mong thầy sửa dùm: khi đọc số chẵn ngàn, mười ngàn, trăm ngàn thi có thêm chữ tỷ ví dụ như đọc :50000 có kết quả là Năm mươi ngàn, tỷ đồng. Mong thầy sớm khắc phục
 
Upvote 0
Có một vấn lỗi mong thầy sửa dùm: khi đọc số chẵn ngàn, mười ngàn, trăm ngàn thi có thêm chữ tỷ ví dụ như đọc :50000 có kết quả là Năm mươi ngàn, tỷ đồng. Mong thầy sớm khắc phục

Bạn thử code này xem.
Code mudule
Mã:
Private donvi0, hangchuc, donvi1, donvi2, donvi_nhom, IsInitArrayStr As Boolean
Private Sub InitArrayStr()
    If IsInitArrayStr Then Exit Sub
    IsInitArrayStr = True
    
    donvi0 = Array("", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " n" & ChrW(259) & "m", _
            " s" & ChrW(225) & "u", " b" & ChrW(7849) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
    hangchuc = Array("", " m" & ChrW(432) & ChrW(7901) & "i", _
                " hai m" & ChrW(432) & ChrW(417) & "i", " ba m" & ChrW(432) & ChrW(417) & "i", _
                " b" & ChrW(7889) & "n m" & ChrW(432) & ChrW(417) & "i", " n" & ChrW(259) & "m m" & ChrW(432) & ChrW(417) & "i", _
                " s" & ChrW(225) & "u m" & ChrW(432) & ChrW(417) & "i", " b" & ChrW(7849) & "y m" & ChrW(432) & ChrW(417) & "i", _
                " t" & ChrW(225) & "m m" & ChrW(432) & ChrW(417) & "i", " ch" & ChrW(237) & "n m" & ChrW(432) & ChrW(417) & "i")
    donvi1 = Array("", " m" & ChrW(7897) & "t", " hai", " ba", " b" & ChrW(7889) & "n", " l" & ChrW(259) & "m", _
                " s" & ChrW(225) & "u", " b" & ChrW(7849) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
    donvi2 = Array("", " m" & ChrW(7889) & "t", " hai", " ba", " t" & ChrW(432), " l" & ChrW(259) & "m", _
                " s" & ChrW(225) & "u", " b" & ChrW(7849) & "y", " t" & ChrW(225) & "m", " ch" & ChrW(237) & "n")
    donvi_nhom = Array("", " tri" & ChrW(7879) & "u", " ngh" & ChrW(236) & "n", " t" & ChrW(7927))
End Sub
' doc so thanh chu Viet unicode
Function BangLoiVn(ByVal So, ByVal strDonVi As String) As String
' So - là số cần chuyển thành chữ
' strDonvi - chuỗi miêu tả đơn vị cần đưa vào chuỗi trả về. strDonvi có dạng: "donvichan+donvile"
' vd. "dollar+cent", "met+cm", "+phan tram"
' BangLoiVn(1234567891000, "lần được lên mây+")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn lần được lên mây"
' BangLoiVn(1234567891000, "con trâu+")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn con trâu"
' BangLoiVn(1234567891000, "lọ thuốc tăng lực+")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn lọ thuốc tăng lực"
' BangLoiVn(1234567891000,56, "+phần trăm")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn và năm mươi sáu phần trăm"
        
' BangLoiVn(1234567891000,56, "kg+dag")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn kg và năm mươi sáu dag"
        
' BangLoiVn(1234567891000,56, "mét+cm")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn mét và năm mươi sáu cm"
        
' BangLoiVn(1234567891000,56, "đồng+xu")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn đồng và năm mươi sáu xu"
        
' BangLoiVn(1234567891000,56, "dollar+cent")
' Trả về "Một nghìn hai trăm ba mươi tư tỷ năm trăm sáu mươi bẩy triệu tám trăm chín mươi mốt nghìn dollar và năm mươi sáu cent"
Dim dau As String, ketqua As String
Dim dvchan As String, dvle As String, nguyen As Double
Dim le As Byte, n1 As Byte, n2 As Byte, n3 As Byte, index As Byte, chisonhom As Byte
Dim tram As String, chuc As String, DonVi As String, baso As String
    InitArrayStr
    
    If Trim(So) = "" Then
        BangLoiVn = ""
    ElseIf Not IsNumeric(So) Then
        BangLoiVn = So
    Else
        ' chuẩn bị phần nguyên và phần lẻ
        If So < 0 Then dau = ChrW(226) & "m "
        So = Application.WorksheetFunction.Round(Abs(So), 2)
        index = InStr(1, So, "E")
        If index > 0 Then ' số có dạng xxxE+yyy
            le = 0
            ' loại các ký tự "." và ","
            So = Replace(Replace(So, ".", ""), ",", "")
            ' vị trí E
            index = InStr(1, So, "E")
            ' yyy
            nguyen = Mid(So, index + 1)
            So = Mid(So, 1, index - 1)
            ' phần chẵn ở dạng "ab...c0...0"
            So = So & String(nguyen - Len(So) + 1, "0")
        Else
            ' phần lẻ
            le = (So - Int(So)) * 100
            ' phần chẵn
            So = Int(So)
        End If
        index = Len(So) Mod 9
        ' ta thêm các ký tự "0" vào đầu khi cần thiết để độ dài chuỗi chia hết cho 9
        If index > 0 Then So = String(9 - index, "0") & So
        ' đọc số
        index = 1
        Size = Len(So)
        chisonhom = 1
        ketqua = ""
        Do
            baso = ""
            ' đọc lần lượt 3 ký tự
            n1 = Mid(So, index, 1)
            n2 = Mid(So, index + 1, 1)
            n3 = Mid(So, index + 2, 1)
            index = index + 3
            If n1 & n2 & n3 <> "000" Then
                If n1 = 0 Then
                    ' hang tram la 0. Ta them "khong tram" chi khi no khong nam o dau chuoi tra ve
                    If ketqua = "" Then tram = "" Else tram = " kh" & ChrW(244) & "ng tr" & ChrW(259) & "m"
                Else
                    ' hang tram bang loi
                    tram = donvi0(n1) & " tr" & ChrW(259) & "m"
                End If
                
                If n2 > 0 Then
                    ' hang chuc khac 0 nen ta doc tu bang ra
                    chuc = hangchuc(n2)
                ElseIf tram = "" Then
                    ' chu so hang chuc bang 0 nam o nhom 3 ky tu dau So ma hang tram cung bang 0
                    chuc = ""
                ElseIf n3 > 0 Then
                    ' chu so hang chuc bang 0, ham tram va don vi khac 0 nen ta dung tu "linh"
                     chuc = " linh"
                Else
                    ' chu so hang chuc va hang don vi bang 0
                    chuc = ""
                End If
                
                If n2 = 1 Then
                    ' neu chu so hang chuc la 1 thi don vi doc tu bang donvi1
                    DonVi = donvi1(n3)
                ElseIf n2 > 1 Then
                    ' neu chu so hang chuc > 1 thi don vi doc tu bang donvi2
                    DonVi = donvi2(n3)
                Else
                    ' neu chu so hang chuc bang 0 thi don vi doc tu bang donvi0
                    DonVi = donvi0(n3)
                End If
                ' neu chua doc het chuoi tuc la nhom 3 so doc ra chua phai la nhom 3 so cuoi
                ' cung nen ta them don vi "trieu", nghin", "ty"
                If index < Size Then
                    baso = tram & chuc & DonVi & donvi_nhom(chisonhom)
                Else
                ' nhom 3 so doc ra la nhom 3 so cuoi cung nen khong them don vi gi ca
                    baso = tram & chuc & DonVi
                End If
            End If
            ' them vao ket qua tam thoi
            ketqua = ketqua & baso
            chisonhom = chisonhom + 1
            ' neu chisonhom = 4 co nghia la ta vua doc xong 3 nhom 3 chu so (tuc tong cong 9 chu so)
            ' ta bat dau lai chu ky doc 9 chu so, trong 3 dot - moi dot 3 chu so
            If chisonhom > 3 Then chisonhom = 1
            ' neu da doc het cac chu so thi ra khoi vong lap
            If index > Size Then Exit Do
        Loop
        ketqua = Trim(ketqua)
        If ketqua = "" Then
            ketqua = "Kh" & ChrW(244) & "ng"
        ElseIf dau <> "" Then
            ketqua = dau & ketqua
        Else
            ' tra ve chuoi co ky tu dau la Hoa
            ketqua = UCase(Left(ketqua, 1)) & Mid(ketqua, 2)
        End If
        ' Ta xet phan DonVi
        index = InStr(1, strDonVi, "+")
        If index > 0 Then
            dvchan = Mid(strDonVi, 1, index - 1)
            If dvchan <> "" Then dvchan = " " & dvchan
            dvle = Mid(strDonVi, index + 1)
            If dvle <> "" Then dvle = " " & dvle
        End If
        ketqua = ketqua & dvchan
        If le <> 0 Then
            So = CStr(le)
            n2 = Left(So, 1)
            n3 = Right(So, 1)
            If n2 > 0 Then chuc = hangchuc(n2) Else chuc = ""
            If n2 = 1 Then
                DonVi = donvi1(n3)
            ElseIf n2 > 1 Then
                DonVi = donvi2(n3)
            Else
                DonVi = ""
            End If
            
            ketqua = ketqua & " v" & ChrW(224) & chuc & DonVi & dvle
        Else
            ketqua = ketqua & " ch" & ChrW(7861) & "n"
        End If
        BangLoiVn = ketqua
    End If
End Function

Tải về rồi đổi thành SoThanhChu.bas
 

File đính kèm

Upvote 0
các bác cho mình macro hoàn chỉnh chuyển như thế này:

Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm đồng.

được không vậy, mong có trả lời sớm.
và cho minh hỏi:
có mấy macro: Một trăm hai mươi ba tỷ bốn trăm ba mươi bốn triệu năm trăm sáu mươi bảy ngàn tám trăm đồng
muốn thêm dấu phẩy "," với chuyển chữ ngàn => nghìn thì mình đổi như thế nào trong MVB
 
Upvote 0
các bác cho mình macro hoàn chỉnh chuyển như thế này:

Một trăm hai mươi ba tỷ, bốn trăm ba mươi bốn triệu, năm trăm sáu mươi bảy nghìn, tám trăm đồng.

được không vậy, mong có trả lời sớm.
và cho minh hỏi:
có mấy macro: Một trăm hai mươi ba tỷ bốn trăm ba mươi bốn triệu năm trăm sáu mươi bảy ngàn tám trăm đồng
muốn thêm dấu phẩy "," với chuyển chữ ngàn => nghìn thì mình đổi như thế nào trong MVB

Bạn sử dụng công thức sau nhé:
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(
HAM_DOC_SO(XXX);"tỷ";"tỷ,");"triệu";"triệu,");"ngàn";"ngàn,")
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(
HAM_DOC_SO(XXX);"tỷ";"tỷ,");"triệu";"triệu,");"ngàn";"nghìn,")
Ghi chú:
  1. HAM_DOC_SO là cái hàm gì đó được dùng để đọc số.
  2. XXX là giá trị số cần đọc (có thể là địa chỉ 1 ô, 1 số cụ thể hay là 1 công thức tính ra giá trị số...)

Đây là công thức chữa cháy khi chưa tìm ra HAM_DOC_SO như ý của bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Code đọc số thành chữ.

Có một ý kiến, bạn có thể đặt tên hàm "SoThanhChu" ngắn lại không, dài quá hơi bất tiện mà thao tác type cũng mất thời gian. VD có thể đổi là DocSo() !?
Thanks!

gui tham khao, chi don gian la ten ham DSOTIEN( SO TIEN)
nếu có gì sai, mong được gốp ý để hoàn thiện thêm thanks
 
Lần chỉnh sửa cuối:
Upvote 0
nếu có gì sai, mong được gốp ý để hoàn thiện thêm thanks


View attachment 87493

Bạn muốn người ta góp ý cho bạn mà bạn "chơi" ảnh? Bạn nghĩ là người ta sẽ ngồi gõ cái code của bạn, chú ý cao độ để khỏi gõ sai so với code của bạn?
Nhưng thôi, tôi đã chót viết thì cũng vài lời, gọi là "nhìn" thấy cái gì thì nói.
1. Cái sotien as Single kia có vấn đề. Single chỉ dùng 4 bai nên nếu số cỡ hơi bự (không hẳn là nguyên soái) vd. 12345678 thì nó được truyền vào hàm ở dạng 1,x...yE+z. Như thế thì Val(sotien) sẽ trả về 1. Do vậy với a = Fix(Val(sotien)) thì a = 1. Nếu code tiếp theo đúng cả thì kết quả là "một đồng" cho số 12345678. Bạn cứ thử mà xem.
2. Tôi nhìn thấy ở đầu
Mã:
b = Len(Trim(a))
y = (b) - 1
Tức y >= 0. Ở cuối vòng lặp DO có
Mã:
 y = y + 1 
Loop Until y < 0
Thế thì có bao giờ y < 0 đâu.
3. Tôi nhìn thấy If (y = 3 Or y = 6 Or y = 12 Or y = 15) Then, tức bạn hỗ trợ số hơi to đấy. Nhưng thôi tôi xét số nhập vào có 14 chữ số thôi. Sau dòng y = b - 1 ta có y = 13.
Tiếp theo có code
Mã:
dv = Array("", "muoi", "tram", "nghin", "muoi", "tram", "trieu", "muoi", "tram", "ty", "muoi", "tram", "nghin")
ddv = dv(y)
Thế này thì chết rồi. Mảng dv có chỉ số trên là 12 mà gọi ddv = dv(y) = dv(13) thì toi rồi.
Ha, viết xong thì thấy bạn sửa là y = y - 1. Thôi không tính điểm 2.
Thôi không dò tiếp nữa. Lần sau bạn gửi văn bản để người ta dễ dán vào module để thử.

À mà bạn khai mảng như thế thì bạn sẽ có
15 = "mười năm đồng", 21 = "hai mười một đồng", 51 = "năm mười một đồng"
Sao kỳ quặc thế
Không chỉ đơn giản "ngọng líu ngọng lô" mà có thể gây hiểu lầm: "hai mười một" = 211, "năm mười một" = 511
 
Lần chỉnh sửa cuối:
Upvote 0
[GPECODE=vb]Option Explicit
Public Function VND(sotien As Double)
Dim a, b, X, Y As Double, Dso, Ddv, So, Dv, doc As String
If sotien = 0 Then
VND = "Khoâng"
Exit Function
End If
a = Fix(Val(sotien))
b = Len((a))
X = 1
Y = b - 1
Do
So = Array("khoâng", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chín")
Dso = So(Mid(a, X, 1))
Dv = Array("", "möôi", "traêm", "nghìn,", "möôi", "traêm", "trieäu,", "möôi", "traêm", "tyû,", "möôi", "traêm", "nghìn", "möôi", "traêm")
Ddv = Dv(Y)
If Dso <> "khoâng" Then
If Ddv = "traêm" Then
doc = doc & " " & Dso & " " & Ddv
ElseIf Ddv = "möôi" Then
If Dso = "moät" Then
If X > 1 Then
doc = doc & " " & "möôøi"
Else
doc = "möôøi"
End If
Else
doc = doc & " " & Dso & " " & Ddv
End If
Else
If X > 1 Then
If Dso = "moät" And Val(Mid(a, X - 1, 1)) > 1 Then
doc = doc & " moát" & " " & Ddv
Else
doc = doc & " " & Dso & " " & Ddv
End If
Else
doc = Dso & " " & Ddv
End If
End If
Else
If Ddv = "traêm" Then
If Val(Mid(a, X, 2)) = 0 And Val(Mid(a, X, 3)) = 0 Then
doc = doc
Else
doc = doc & " " & Dso & " " & Ddv
End If
ElseIf Ddv = "möôi" Then
If Val(Mid(a, X, 2)) = 0 Then
doc = doc
Else
doc = doc & " leû"
End If
Else
If X >= 3 Then
If Val(Mid(a, X - 2, 3)) > 0 Or Y = 9 Or Y = 12 Then
doc = doc & " " & Ddv
Else
doc = doc
End If
Else
If Val(Mid(a, X - 1, 2)) > 0 Or Y = 9 Or Y = 12 Then
doc = doc & " " & Ddv
Else
doc = doc
End If
End If
End If
End If
X = X + 1
Y = Y - 1
Loop Until Y < 0
doc = Trim(doc)
If Val(Right(a, 3)) = 0 Or Val(Right(a, 6)) = 0 Or Val(Right(a, 9)) = 0 Then
doc = Left(doc, Len(doc) - 1)
Else
doc = doc
End If
doc = UCase(Left(doc, 1)) & Right(doc, Len(doc) - 1)
VND = doc
End Function



[/GPECODE]
chỉnh sửa bổ sung thêm dấu phải, font vni

Bổ sung bài viết hàm dùng font UniCode
[GPECODE=vb]Option Explicit




Function UniVND(sotien As Double)
Dim a, b, X, Y As Double, Dso, Ddv, So, Dv, doc As String


If sotien = 0 Then
UniVND = "kh" & ChrW(244) & "ng"
Exit Function
End If
a = Fix(Val(sotien))
b = Len((a))
X = 1
Y = b - 1
Do
So = Array("kh" & ChrW(244) & "ng", "m" & ChrW(7897) & "t", "hai", "ba", "b" & ChrW(7889) & "n", "n" & ChrW(259) & "m", "s" & ChrW(225) & "u", "b" & ChrW(7843) & "y", "t" & ChrW(225) & "m", "ch" & ChrW(237) & "n")
Dso = So(Mid(a, X, 1))
Dv = Array("", "m" & ChrW(432) & ChrW(417) & "i", "tr" & ChrW(259) & "m", "ng" & ChrW(224) & "n,", "m" & ChrW(432) & ChrW(417) & "i", "tr" & ChrW(259) & "m", "tri" & ChrW(7879) & "u,", "m" & ChrW(432) & ChrW(417) & "i", "tr" & ChrW(259) & "m", "t" & ChrW(7927) & ",", "m" & ChrW(432) & ChrW(417) & "i", "tr" & ChrW(259) & "m", "ng" & ChrW(224) & "n")
Ddv = Dv(Y)
If Dso <> "kh" & ChrW(244) & "ng" Then
If Ddv = "tr" & ChrW(259) & "m" Then
doc = doc & " " & Dso & " " & Ddv
ElseIf Ddv = "m" & ChrW(432) & ChrW(417) & "i" Then
If Dso = "m" & ChrW(7897) & "t" Then
If X > 1 Then
doc = doc & " " & "m" & ChrW(432) & ChrW(7901) & "i"
Else
doc = "m" & ChrW(432) & ChrW(7901) & "i"
End If
Else
doc = doc & " " & Dso & " " & Ddv
End If
Else
If X > 1 Then
If Dso = "m" & ChrW(7897) & "t" And Val(Mid(a, X - 1, 1)) > 1 Then
doc = doc & " " & "m" & ChrW(7889) & "t" & " " & Ddv
Else
doc = doc & " " & Dso & " " & Ddv
End If
Else
doc = Dso & " " & Ddv
End If
End If
Else
If Ddv = "tr" & ChrW(259) & "m" Then
If Val(Mid(a, X, 2)) = 0 And Val(Mid(a, X, 3)) = 0 Then
doc = doc
Else
doc = doc & " " & Dso & " " & Ddv
End If
ElseIf Ddv = "m" & ChrW(432) & ChrW(417) & "i" Then
If Val(Mid(a, X, 2)) = 0 Then
doc = doc
Else
doc = doc & " l" & ChrW(7867)
End If
Else
If X >= 3 Then
If Val(Mid(a, X - 2, 3)) > 0 Or Y = 9 Or Y = 12 Then
doc = doc & " " & Ddv
Else
doc = doc
End If
Else
If Val(Mid(a, X - 1, 2)) > 0 Or Y = 9 Or Y = 12 Then
doc = doc & " " & Ddv
Else
doc = doc
End If
End If
End If
End If
X = X + 1
Y = Y - 1
Loop Until Y < 0
doc = Trim(doc)
If Val(Right(a, 3)) = 0 Or Val(Right(a, 6)) = 0 Or Val(Right(a, 9)) = 0 Then
doc = Left(doc, Len(doc) - 1)
Else
doc = doc
End If
doc = UCase(Left(doc, 1)) & Right(doc, Len(doc) - 1)
UniVND = doc
End Function
[/GPECODE]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đề tài này có nhiều trên GPE mình rồi đó bạn. Bạn vào thư viện GPE tải về các add-ins hỗ trợ việc dịch số ra chữ về xài. Còn nếu không muốn mất thời gian thì tải file mình đính kèm bên dưới. Sau đó giải nén vào một thư mục (thư mục nào cũng được, miễn dễ nhớ). Mở excel lên, chọn Tool-->Add-Ins-->Browse, chỉ đường dẫn tới chỗ lưu file này. ấn OK.

Muốn đọc số ra chữ bạn gõ vào công thức tại ô cần đặt chữ: =VND(số tiền).
Add-Ins này cũng hỗ trợ chuyển đổi chữ hoa, chữ thường đấy nhé (giống trong Word ấn Shift+F3 vậy)
Cách làm như sau: chọn vùng cần đổi sang chữ HOA/thường
Phím tắt như sau:
Ctrl+Shift+T: chuyển hết thành chữ thường
Ctrl+Shift+H: CHUYỂN HẾT THÀNH CHỮ HOA
Ctrl+Shift+K: Chuyển Thành Dạng Như Thế này.
File này mình đúc kết từ các bài viết của các anh chị GPE mình đấy!
Bạn làm thử xem nhé!


Nếu bạn chưa có Winrar thì có thể tải tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=2273


Ps: Nhìn cái hình chọt lét người ta rồi làm ngơ thấy ghét quá!
:-=

Mình dùng rồi thấy rât ok, nhưng vẫn bị đọc thiếu số. VD: 63.050.298.427 đọc là Sáu mươi ba tỷ (mình mun thêm không trăm năm mươi)năm mươi triệu hai trăm chín mươi tám ngàn bốn trăm hai mươi bẩy đồng -->thiếu số 0
 
Lần chỉnh sửa cuối:
Upvote 0
Có ai chỉ dùm cho mình cách copy và cài phần đọc từ số sang chữ với. mình đang cần. cảm ơn nhiều
 
Upvote 0
có ai chỉ cho e chi tiết được không?em hk thực hành được/
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom