PDA

View Full Version : Hàm chuyển số thành chữ



handung107
13-06-06, 06:02 PM
Đã 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



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­"
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­¬i"
ElseIf ((l - i + 1) Mod 3 = 2 And A(i) <> 0) Then
C = C & " m­ê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

trai_thanhnam
12-08-06, 02:38 PM
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é.

Pansy_flower
13-08-06, 06:17 PM
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 (http://www.giaiphapexcel.com/forum/showpost.php?p=407&postcount=17) xem nha.


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 (http://www.giaiphapexcel.com/forum/showthread.php?t=379) nha.

quan_tn
28-11-06, 11:34 PM
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

Chuotdong
30-11-06, 05:35 PM
Đây cũng là hàm chuyển chữ sang số:
http://www.4shared.com/file/6685708/925bcc44/So2Chu.html

Mr Okebab
13-03-07, 05:02 PM
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é :



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!

Lephuongthuy411
11-05-07, 04:33 PM
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...........!$@!!

anhphuong
11-05-07, 05:42 PM
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

man
09-06-07, 04:39 PM
tui cung xin đóng góp 1 hàm chuyển từ số sang chữ

chibi
10-06-07, 12:05 AM
To man

tui cung xin đóng góp 1 hàm chuyển từ số sang chữ
Dùng cho font UNICODE thì làm sao đây?

To handung


If isReversed Then
iProcList(0, j) = GetElementNo(AscW(repTxt), iUnicode)
Else
iProcList(0, j) = GetElementNo(AscW(repTxt), iTCVN)
End If

Bị báo lỗi tại GetElementNo là sao vậy?

vungoc
10-06-07, 06:23 AM
Đây là hàm của bác phamduylong - rất chuẩn và đa dạng (VNI, UNI, ABC, ...)



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­êi" Else s2 = s09(n2) & " m­¬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

man
13-06-07, 12:53 AM
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!

trandn
16-06-07, 02:23 PM
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?

Mr Okebab
16-06-07, 05:09 PM
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!

Paiper
08-10-07, 02:02 AM
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 (http://www.giaiphapexcel.com/forum/showpost.php?p=407&postcount=17) 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

tedaynui
08-10-07, 06:22 AM
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

blueseaftc
29-10-07, 03:26 PM
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é

kiendt1973
31-10-07, 08:47 PM
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ỉ?

phamduylong
31-10-07, 10:37 PM
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."

PhanTuHuong
01-11-07, 11:00 AM
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).

phamduylong
01-11-07, 11:51 AM
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!

ptm0412
28-11-07, 12:24 AM
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.

tigertiger
25-12-07, 02:19 AM
Đây là hàm của bác phamduylong - rất chuẩn và đa dạng (VNI, UNI, ABC, ...)

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:




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­êi" Else s2 = s09(n2) & " m­¬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

levanduyet
25-12-07, 08:15 AM
Nếu tôi có số tiền là 2 560 000.52 đồng, thì làm sao?

Lê Văn Duyệt

ptm0412
25-12-07, 10:55 AM
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:


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.

ptm0412
25-12-07, 10:00 PM
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.


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.

littlegirl
19-03-08, 12:53 PM
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

summerhq2006
08-04-08, 04:17 PM
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)

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



Public Function Hgwordv(Numv)
'Ham doi so ra chu voi tien Vietnam
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
End Function


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

nhatminhqtkd2003
24-05-08, 01:16 PM
làm thế nào để ghép đoạn code đó vào trong bảng tính excel

aThuan
24-05-08, 10:49 PM
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.)(&&@@)(&&@@

@$@!^%

simtim2008
11-06-08, 06:25 PM
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

cadafi
11-06-08, 06:34 PM
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á! :-=

hoangdanh282vn
15-07-08, 02:28 PM
Anh chị vui lòng hướng dẫn giúp em. Đọc số thành chữ trong excel. Cám ơn anh chị

Bạn đọc lại từ bài đầu tiên "#1" trong topic này thì bạn sẽ làm được.

phuonghd282
04-08-08, 11:04 AM
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!

quangsaiga
06-08-08, 11:52 AM
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

cadafi
06-08-08, 01:32 PM
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à.

quangsaiga
06-08-08, 03:26 PM
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

vvtaa
19-08-08, 09:29 AM
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 ?

rollover79
10-09-08, 11:23 PM
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é.

LumiereSolaire
23-09-08, 02:39 AM
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?

rollover79
24-09-08, 08:15 PM
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?
Theo tôi là Một nghìn không trăm linh một.

LumiereSolaire
25-09-08, 08:18 PM
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!

ptm0412
25-09-08, 11:08 PM
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.

rollover79
26-09-08, 08:08 AM
Tôi thấy người ta đọc thành thế này


one trillion one billion five hundred one million one hundred twenty-three and 1022 / 10000

thanhbinh_dk
06-11-08, 09:50 AM
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.

quoctuankid
10-11-08, 08:35 PM
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 ạ

Po_Pikachu
10-11-08, 08:41 PM
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 <tên 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.

huuthuanpnb
11-11-08, 03:31 PM
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...

tanxd3-90
24-11-08, 01:12 PM
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")

LumiereSolaire
20-12-08, 03:56 AM
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.

hoangthimien
04-01-09, 09:19 PM
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

hoangthimien
04-01-09, 09:46 PM
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.

soonwi
09-06-09, 11:08 AM
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!

ThuNghi
09-06-09, 11:12 AM
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

DocSoUni = conso
End If
End Function
Thành

DocSoUni = conso
DocSoUni =DocSoUni & " đồng"
End If
End Function

soonwi
09-06-09, 11:28 AM
Em đã thử nhưng ko được bác ạ, bác có thể hướng dẫn em cho đoạn code "docsoabc" được ko

ThuNghi
09-06-09, 11:41 AM
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

Else
DocSoAbc = conso
End If
End Function


Thành

Else
DocSoAbc = conso
End If
DocSoAbc = DocSoAbc & " ®ång"
End Function

Trên End Function và dưới End If

144thuong
11-06-09, 05:53 PM
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!

phamduylong
11-06-09, 09:02 PM
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 arNum và arGrp, nếu có thay đổi cách đọc như ngàn/nghìn, bốn/tư, ... 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)|
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
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))
arGrp = Array(" tr" & ChrW(259) & "m", " tri" & ChrW(7879) & "u", " ngàn", " t" & ChrW(7927), " âm", "", "")
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 = ""
If dInt <> "" And nId = 7 Then dInt = dInt & arGrp(3)
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

phamduylong
11-06-09, 09:25 PM
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 arNum và arGrp trong hàm DocSo bằng các bảng mã tương ứng:

VNI-Windows:

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:

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", "", "")

BNTT
11-06-09, 09:53 PM
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ỗ đó ?

phamduylong
12-06-09, 06:11 AM
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 (http://www.giaiphapexcel.com/forum/showpost.php?p=163772&postcount=58)

k_malau
17-07-09, 09:20 AM
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 ./.

mungphuong
15-10-09, 11:15 AM
tui cung xin đóng góp 1 hàm chuyển từ số sang chữ
Tại sao mỗi lần thay đổi số đếud bị báo lỗi và phải chọn lỗi ok 2 lần mới dc

thanlan102
31-10-09, 08:33 AM
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 arNum và arGrp, nếu có thay đổi cách đọc như ngàn/nghìn, bốn/tư, ... 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)|
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
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))
arGrp = Array(" tr" & ChrW(259) & "m", " tri" & ChrW(7879) & "u", " ngàn", " t" & ChrW(7927), " âm", "", "")
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

trungtintran
08-01-10, 04:38 PM
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.

phamduylong
09-01-10, 02:07 PM
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


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")

kiencang76
19-01-10, 11:50 AM
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 (http://www.giaiphapexcel.com/forum/showpost.php?p=407&postcount=17) 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 (http://www.giaiphapexcel.com/forum/showthread.php?t=379) 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

NHG
01-04-10, 03:58 PM
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

ngocp09
21-04-10, 03:27 PM
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!

duchuynh103
21-05-10, 11:38 AM
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

Nguyễn Duy Tuân
21-05-10, 11:49 AM
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/showthread.php?1047-XLL-Add-In-%C4%90%E1%BB%95i-s%E1%BB%91-th%C3%A0nh-ch%E1%BB%AF-T%E1%BB%91c-%C4%91%E1%BB%99-nhanh-t%E1%BB%91i-%C4%91a-nhanh-h%C6%A1n-80-c%C3%A1c-Addins-kh%C3%A1c

phamduylong
24-05-10, 11:51 AM
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

ThuNghi
15-06-10, 10:58 AM
Tôi đã chỉnh lại code ở bài #58
Cám ơn duchuynh103 đã phát hiện lỗi
Thầy sửa lại giúp em
Khi em dùng docso(1000)=Một ngàn tỷ đồng
10000 thì bằng Mười ngàn tỷ đồng
Cám ơn Thầy.

dieunick
28-10-10, 09:53 AM
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

Cong Dien
29-12-10, 11:04 AM
Xin chi cho minh cach su dung voi. Minh Add - Ins roi nhung dung the nao day

NTQ_DLT
16-02-11, 11:41 AM
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

benon
06-03-11, 09:19 PM
tui cung xin đóng góp 1 hàm chuyển từ số sang chữ Bạn ơi, hàm này hay nhưng làm cách nào để nó đọc ra thêm cả chữ đồng hoặc mình muốn chữ in nghiêng. VD: Một triệu năm trăm ba mươi lăm ngàn đồng

anhphuoc
19-03-11, 12:41 PM
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

luongminhngoc
15-04-11, 04:05 PM
Đề 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

vucuc45
13-06-11, 10:38 AM
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.

thuhuyenbibi
19-07-11, 11:03 AM
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?

Hoàng Trọng Nghĩa
19-07-11, 11:05 AM
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?

Bạn thử mô tả các bước bạn thực hiện như thế nào được không?

le_dung84
29-08-11, 01:27 PM
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!

Hoàng Trọng Nghĩa
29-08-11, 01:40 PM
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.

heroes1412
26-10-11, 04:43 PM
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 :)

chandatn
22-05-12, 01:18 PM
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

siwtom
22-05-12, 11:49 PM
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


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

Nhật Phương
17-07-12, 04:00 PM
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

app
17-07-12, 05:26 PM
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ú:

HAM_DOC_SO là cái hàm gì đó được dùng để đọc số.
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.

Hong.Van
27-07-12, 09:04 AM
Bạn thử code này xem.

Tải về rồi đổi thành SoThanhChu.bas
Anh xem File giúp em, Sao em kg làm được? Nó báo Value!
Em cảm ơn!
-----------
Đã hiểu lỗi

Good-Luck
18-08-12, 08:20 PM
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

siwtom
19-08-12, 12:11 AM
nếu có gì sai, mong được gốp ý để hoàn thiện thêm thanks


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


b = Len(Trim(a))
y = (b) - 1

Tức y >= 0. Ở cuối vòng lặp DO có


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


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

Good-Luck
20-08-12, 07:33 PM
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




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
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

alpha1810
29-08-12, 03:00 PM
Đề 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

thevanhvtc
10-01-13, 05:52 PM
Làm sao để paste vào đây
tui làm unhuwg ko dc

luongthuy17122003
01-03-13, 04:32 PM
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

Hong.Van
01-03-13, 05:01 PM
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
Cái này người ta cài Addins, bạn tham khảo bài này
http://www.giaiphapexcel.com/forum/showthread.php?379-Minh-họa-cách-tạo-nạp-và-sử-dụng-Add-Ins-trong-MS-Excel/page3

ruaconpapy
21-05-13, 11:25 AM
có ai chỉ cho e chi tiết được không?em hk thực hành được/

thanhtrg
21-05-13, 04:31 PM
có ai chỉ cho e chi tiết được không?em hk thực hành được/
xem http://www.giaiphapexcel.com/forum/showthread.php?1635-Đổi-số-ra-chữ-với-Mã-phông-UniCode

daian48gt
21-05-13, 10:35 PM
xem http://www.giaiphapexcel.com/forum/showthread.php?1635-Đổi-số-ra-chữ-với-Mã-phông-UniCode


Em có cái file đổi số thành chữ này.Các bác xem và nhận xét giúp em nhé.

trích bông 11
30-05-13, 02:15 PM
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é.





sao mình download về xem thì được mà làm của mình thì báo lỗi là sao nhỉ

trích bông 11
30-05-13, 02:20 PM
có ai giuó mình sao mà download trên mạng về thì nhận được kết quả: status...: connecting
status : 0 bytes . như vậy phải làm sao để giải qyuết được. bây giờ mình muốn cài đổi số ra chữ mà không download về được . giúp mình với nhé

miah_vu
07-06-13, 10:44 AM
các bác ơi, em ko chuyên ngành tin, em làm gì với cái code kia để ra được hàm hả các bác

vanle33
07-06-13, 10:50 AM
các bác ơi, em ko chuyên ngành tin, em làm gì với cái code kia để ra được hàm hả các bác
Bạn đọc lại hướng dẫn ở bài #8.

hpbphuong
14-07-13, 05:29 PM
có ai viết hàm đổi số sang chữ bằng công thức không thì cho xin với (không dùng VBA nhé), cám ơn nhiều.

0922825456
14-07-13, 05:49 PM
có ai viết hàm đổi số sang chữ bằng công thức không thì cho xin với (không dùng VBA nhé), cám ơn nhiều.
Bạn dùng File này rồi vào addins để add vào là được

Khi cài vào excel rồi bạn muốn đổi ô nào từ số thành chữ bạn dùng

=vnd(ô sô -VD A1)

vanle33
14-07-13, 06:27 PM
Bạn dùng File này rồi vào addins để add vào là được

Khi cài vào excel rồi bạn muốn đổi ô nào từ số thành chữ bạn dùng

=vnd(ô sô -VD A1)
Cách trên là VBA save thành add in mà bạn, đâu thỏa mãn điều kiện của bài #106!

intelligent1502
06-10-13, 08:46 PM
em đọc xong những công thức anh viết trên thấy tẩu hỏa nhập ma luôn, xin anhddoch hộ em số này với.xin cảm ơn!

van_k49
12-11-13, 02:36 PM
Nhờ các anh chị giúp em chuyển số sang chữ với.
Ví dụ: 16405,3 chuyển thành chữ là: Mười sáu nghìn bốn trăm linh năm phẩy ba mét vuông

thuyHang_84
04-04-14, 09:14 AM
Tôi thấy rất hay bạn có thể hướng dẫn cách làm được không?

vanle33
04-04-14, 09:24 AM
Tôi thấy rất hay bạn có thể hướng dẫn cách làm được không?
Bạn là thành viên từ 2009 mà không biết sử dụng code sao?
Cả 100 bài viết trước bạn mà không biết bạn hỏi bài nào!??

Hoàng Trọng Nghĩa
04-04-14, 10:17 AM
Bạn là thành viên từ 2009 mà không biết sử dụng code sao?

Thâm niên đâu có nghĩa rằng phải biết code chứ bạn?

siwtom
05-04-14, 03:14 AM
Cả 100 bài viết trước bạn mà không biết bạn hỏi bài nào!??

Nhiều người trước khi lên mạng thì cất kỹ cái đầu vào trong tủ. Hoặc có mang trên cổ nhưng 0 suy nghĩ.
Nhìn qua quả cầu thủy tinh thì thấy ai đó đang nhìn về hướng Nam, mà theo hướng đó có một anh ngồi vỉa hè đang gắp đồ nhậu. Chắc là nói với anh ta. Nhưng anh ta có nhiều bài hay nên cũng chả biết người ta nói tới bài nào.