Đổi số thành chử

  • Thread starter Thread starter lamho27
  • Ngày gửi Ngày gửi
Liên hệ QC

lamho27

Thành viên chính thức
Tham gia
25/11/07
Bài viết
96
Được thích
10
Chúc mừng năm mới tất cả các bạn trong diển đàn !
Em nhờ các bạn trong diển đàn hướng dẩn giùm : dùng hàm nào trong excel để chuyển số thành chử ;
thí dụ : 123.45€ thành cent vingt-trois euros et quarante-cinq centimes
cent vingt-trois euros et quarante-cinq centimes
 
lamho27 đã viết:
Chúc mừng năm mới tất cả các bạn trong diển đàn !
Em nhờ các bạn trong diển đàn hướng dẩn giùm : dùng hàm nào trong excel để chuyển số thành chử ;
thí dụ : 123.45€ thành cent vingt-trois euros et quarante-cinq centimes
cent vingt-trois euros et quarante-cinq centimes
Chắc bạn phải tự làm vậy, có hàm đổi tiếng việt, English nhưng tiếng pháp thì không.
Bạn xem các hàm sau và dịch phần chữ tiếng việt (hoặc tiếng anh) ra tương ứng tiếng Pháp của bạn - cái này chắc không khó đối với bạn

Tiếng việt:
PHP:
Public Function DocSoraChu(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ỷ,")
If Trim(conso) = "" Then
DocSoraChu= ""
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
  DocSoraChu= "không" 'Else DocSoraChu= dau & Trim(docso)
Else: docso = Trim(docso): DocSoraChu= dau & UCase(Left(docso, 1)) + Right(docso, Len(docso) - 1): End If
Else
DocSoraChu= conso
End If
End Function

Tiếng Anh (English):

PHP:
Public 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
Các hàm trên được copy (có hiệu đính hàm tiếng việt - chú ý là đổi sang unicde để hiện được trên diễn đàn - và bạn lamho có thể thay - còn bạn nào dùng tiếng việt hay theo link mà chép đừng chép ở đây) từ topic (tại các post 25, 27, 29) sau:
http://www.giaiphapexcel.com/forum/showthread.php?p=48670

+ Để sd hàm trên ở file Excel bạn bấm Alt+F11 vào VBE rồi chọn Insert \ Module -> rồi copy vào là được hàm này rồi. Giờ trở lại Excel tại ô muốn đặt giá trị đọc -> bấm Fx -> chọn tên hàm vừa tạo -> nhập các thông số


+ lamho27 chắc bạn dùng hàm SayE cho dễ chuyển

thế nhé có gì hỏi tiếp trên diễn đàn, chắc là có thành viên biết tiếng pháp sẽ giúp bạn. Hoặc ko bạn dịch các từ tiếng anh trên tôi sẽ cố gắng giúp cho

Chúc thành công
 
Lần chỉnh sửa cuối:
Vừa phát hiện ra bài này nữa cũng tiện cho bạn, đó là đổi số ra chữ dùng toàn công thức thôi, chắc là dễ đổi cho bạn hơn (vì nếu đổi hàm trên thì không biết VBA có bị PHÁP hóa không nữa - nếu có thì cực lắm), bạn xem ởngayy post#1 nhé, theo link sau

http://www.giaiphapexcel.com/forum/showthread.php?t=810


hình như dùng chỉ hàm IF thôi và toán tử & - nhớ bấm kéo scroll đứng lên trên nhé,
 
Em đả đổi thành tiếng pháp :
Public Function SayE(number, unit, dec) As String
bangchu(0, 0) = "Zero cent "
bangchu(1, 0) = "Un cent "
bangchu(2, 0) = "Deux cent "
bangchu(3, 0) = "Trois cent "
bangchu(4, 0) = "Quatre cent "
bangchu(5, 0) = "Cinq cent "
bangchu(6, 0) = "Six cent "
bangchu(7, 0) = "Sept cent "
bangchu(8, 0) = "Huit cent "
bangchu(9, 0) = "Neuf cent "
bangchu(0, 1) = IIf(Int(Abs(number)) = 0, "Zero ", " ")
bangchu(1, 1) = "Un "
bangchu(2, 1) = "Deux "
bangchu(3, 1) = "Trois "
bangchu(4, 1) = "Quatre "
bangchu(5, 1) = "Cinq "
bangchu(6, 1) = "Six "
bangchu(7, 1) = "Sept "
bangchu(8, 1) = "Huit "
bangchu(9, 1) = "Neuf "
bangchu(0, 2) = "et "
bangchu(1, 2) = "Dix "
bangchu(2, 2) = "Vingt "
bangchu(3, 2) = "Trente "
bangchu(4, 2) = "Quarante "
bangchu(5, 2) = "Cinquante "
bangchu(6, 2) = "Soixante "
bangchu(7, 2) = "Soixante-dix "
bangchu(8, 2) = "Quatre-vingt "
bangchu(9, 2) = "Quatre-vingt-dix "
banghang(0) = " "
banghang(1) = " "
banghang(2) = "mille, "
banghang(3) = "million "
banghang(4) = "milliard, "
banghang(5) = "thousand milliard, "
bangvaloi(1, 1) = "Dix un"
bangvaloi(1, 2) = "Onze"
bangvaloi(2, 1) = "Dix deux"
bangvaloi(2, 2) = "douze"
bangvaloi(3, 1) = "Dix trois"
bangvaloi(3, 2) = "Treize"
bangvaloi(4, 1) = "Dix quatre"
bangvaloi(4, 2) = "Quatoze"
bangvaloi(5, 1) = "Dix cinq"
bangvaloi(5, 2) = "Quinze"
bangvaloi(6, 1) = "Dix six"
bangvaloi(6, 2) = "Seize"
bangvaloi(7, 1) = "Dix sept"
bangvaloi(7, 2) = "Dix-sept"
bangvaloi(8, 1) = "Dix huit"
bangvaloi(8, 2) = "Dix-huit"
bangvaloi(9, 1) = "Dix neuf"
bangvaloi(9, 2) = "Dix-neuf"
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
nhưng không ra , nó ghi là bị lổi không thể thực hiện
 
PHP:
Public dvt As String
Public chu As String
Public bangchu(0 To 9, 0 To 2) As String
Public banghang(0 To 5) As String
Public bangvaloi(1 To 9, 1 To 2) As String
Public i As Integer
Public sole As Single
Public l As Integer
Public so As Integer
Public so1 As Integer
Public so2 As Integer
Public so3 As Integer
Public so4 As Integer
Public nhom As Integer
Public du As Integer




Function SayF(number, unit, dec) As String
bangchu(0, 0) = "Zero cent "
bangchu(1, 0) = "Un cent "
bangchu(2, 0) = "Deux cent "
bangchu(3, 0) = "Trois cent "
bangchu(4, 0) = "Quatre cent "
bangchu(5, 0) = "Cinq cent "
bangchu(6, 0) = "Six cent "
bangchu(7, 0) = "Sept cent "
bangchu(8, 0) = "Huit cent "
bangchu(9, 0) = "Neuf cent "
bangchu(0, 1) = IIf(Int(Abs(number)) = 0, "Zero ", " ")
bangchu(1, 1) = "Un "
bangchu(2, 1) = "Deux "
bangchu(3, 1) = "Trois "
bangchu(4, 1) = "Quatre "
bangchu(5, 1) = "Cinq "
bangchu(6, 1) = "Six "
bangchu(7, 1) = "Sept "
bangchu(8, 1) = "Huit "
bangchu(9, 1) = "Neuf "
bangchu(0, 2) = "et "
bangchu(1, 2) = "Dix "
bangchu(2, 2) = "Vingt "
bangchu(3, 2) = "Trente "
bangchu(4, 2) = "Quarante "
bangchu(5, 2) = "Cinquante "
bangchu(6, 2) = "Soixante "
bangchu(7, 2) = "Soixante-dix "
bangchu(8, 2) = "Quatre-vingt "
bangchu(9, 2) = "Quatre-vingt-dix "
banghang(0) = " "
banghang(1) = " "
banghang(2) = "mille, "
banghang(3) = "million "
banghang(4) = "milliard, "
banghang(5) = "thousand milliard, "
bangvaloi(1, 1) = "Dix un"
bangvaloi(1, 2) = "Onze"
bangvaloi(2, 1) = "Dix deux"
bangvaloi(2, 2) = "douze"
bangvaloi(3, 1) = "Dix trois"
bangvaloi(3, 2) = "Treize"
bangvaloi(4, 1) = "Dix quatre"
bangvaloi(4, 2) = "Quatoze"
bangvaloi(5, 1) = "Dix cinq"
bangvaloi(5, 2) = "Quinze"
bangvaloi(6, 1) = "Dix six"
bangvaloi(6, 2) = "Seize"
bangvaloi(7, 1) = "Dix sept"
bangvaloi(7, 2) = "Dix-sept"
bangvaloi(8, 1) = "Dix huit"
bangvaloi(8, 2) = "Dix-huit"
bangvaloi(9, 1) = "Dix neuf"
bangvaloi(9, 2) = "Dix-neuf"

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
SayF = chu
Else
SayF = SayF & LCase(chu)
End If
End If
Next i

For x = 1 To 9
SayF = Replace(SayF, bangvaloi(x, 1), bangvaloi(x, 2))
SayF = Replace(SayF, 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
SayF = " "
Case Is > 0
SayF = Trim(SayF & dvt)
Case Else
SayF = "Minus " & LCase(SayF)
SayF = Trim(SayF & dvt)
End Select
If sole > 0 Then
SayF = Trim(SayF) & IIf(dec = 0, " point ", " and ")
SayF = SayF & IIf(Round(sole * 100, 0) < 10 And dec = 0, "zero ", "")
SayF = SayF & LCase(SayF(Round(sole * 100, 0), 0, dec))

Else
SayF = SayF & "."
End If

'Exceptions:
SayF = Replace(SayF, "pennys", "pence")
SayF = Replace(SayF, "mouses", "mice")
SayF = Replace(SayF, "foots", "feet")
End Function

Bạn download về xem trong đó tôi để hàm là sayF (French) và sayE (english)

tôi nghĩ bạn cần chuyển đổi 1 số từ nữa để làm điều đó bạn xem thêm thông tin này của ptm0412 sau:
ptm0412 đã viết:
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.
 

File đính kèm

Trong file tôi nhầm - nhập sai phần dec là 2 chính xác chắc là:
PHP:
=Sayf(D6;3;"centime")
ô D6 là ô chứa số cần đổi
Ví dụ ô D6 =123.45
thì kQ là:
Un cent vingt trois Euros and quarante cinq centimes.


không biết thế đã đúng ý bạn chưa?

Ah, viết thêm:


Bạn phải sửa lại chữ "only" nghĩa là khi số là tròn, ở trong đoạn này cho hợp với tiếng French
PHP:
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
Và đoạn này nữa, Bạn phải sửa lại các từ cho hợp với tiếng French, Nhưng chắc đoạn này ko cần lắm - chỉ áp dụng với đơn vị khác ko phải tiền tệ
PHP:
Exceptions:
SayF = Replace(SayF, "pennys", "pence")
SayF = Replace(SayF, "mouses", "mice")
SayF = Replace(SayF, "foots", "feet")

Chắc là bạn hỉu ý???

 
Lần chỉnh sửa cuối:
Còn chữ only (chẵn), chữ Point (chấm, tiếng Pháp là phẩy), số nhiều tiếng Pháp chắc không thêm s, các từ trong exceiption, chữ and (và),
Còn các hàm Int(), Replace(), Lcase() . . .
E rằng bản tiếng Pháp không hiểu. Lam ho thử rồi tra thêm các hàm VBA tương đương của tiếng Pháp nữa
Hàm if(), hàm mid(), các từ logic expression: and, or, hàm Mod(), ABS(), . . .
Các hàm này tra trong Object Browser của cửa sổ code
 
Lần chỉnh sửa cuối:
ptm0412 đã viết:
(và),
Còn các hàm Int(), Replace(), Lcase() . . .
E rằng bản tiếng Pháp không hiểu. Lam ho thử rồi tra thêm các hàm VBA tương đương của tiếng Pháp nữa

Chắc là hàm và lệnh trong VBA như nhau chưa bị PHÁP hóa, hy vọng thế???
có phải ko lamho27????
 
Đã tìm được rồi

Em có lên google tìm , xài được ok , nhưng em không biết mở cái code này , nên không biết nó viết cái gì ở trong đó , không biết nó viết có giống các anh chị viết hay không ?
 

File đính kèm

lamho27 đã viết:
Em có lên google tìm , xài được ok , nhưng em không biết mở cái code này , nên không biết nó viết cái gì ở trong đó , không biết nó viết có giống các anh chị viết hay không ?

Thế thì tốt rùi, Google luôn là number one!!!!

Muốn xem thì sau khi add (hoặc mở file xla) rồi thì bấm Alt+F11 rồi nhìn sang bên trái chọn Nombres... là xem được -> xem các module của nó

Xem rùi, thấy các hàm các lệnh VBA không bị PHÁP hóa - hic iiii -> bạn có thể dùng file trên ở post#6

Để đạt KQ có nhiều cách tiếp cận khác nhau, nhưng xem thấy cơ bản là không khác về thuật toán - mà chỉ khác về cách bố trí - chia tách vấn đề thành lệnh hic hic iiii . Chắc xem qua thì đoán vậy vì trông vào các tên định danh biến là tiếng PHÁP hoa hết cả mắt rùi
 
Hàm của Lamho đưa lên có 1 cách thể hiện số thập phân như sau:
255,1 = deux cent cinquante-cinq virgule dix (mình cho là đúng)
255,01 = deux cent cinquante-cinq virgule un : mình thắc mắc không biết đúng không, hay là nên deux cent cinquante-cinq virgule zero un ???
Nếu bạn còn hứng thú với SayF(), mình đã sửa rồi, mình sẽ post lên?
 
ptm0412 đã viết:
Hàm của Lamho đưa lên có 1 cách thể hiện số thập phân như sau:
255,1 = deux cent cinquante-cinq virgule dix (mình cho là đúng)
255,01 = deux cent cinquante-cinq virgule un : mình thắc mắc không biết đúng không, hay là nên deux cent cinquante-cinq virgule zero un ???
Nếu bạn còn hứng thú với SayF(), mình đã sửa rồi, mình sẽ post lên?

Oh, post nên để mọi TV học tập ptm0412,
và bổ sung cho thư viên phong phú
 
PHP:
Function SayF(number, unit, dec) As String
bangchu(0, 0) = "Zero cent "
bangchu(1, 0) = "Un cent "
bangchu(2, 0) = "Deux cent "
bangchu(3, 0) = "Trois cent "
bangchu(4, 0) = "Quatre cent "
bangchu(5, 0) = "Cinq cent "
bangchu(6, 0) = "Six cent "
bangchu(7, 0) = "Sept cent "
bangchu(8, 0) = "Huit cent "
bangchu(9, 0) = "Neuf cent "
bangchu(0, 1) = IIf(Int(Abs(number)) = 0, "Zéro ", " ")
bangchu(1, 1) = "Un "
bangchu(2, 1) = "Deux "
bangchu(3, 1) = "Trois "
bangchu(4, 1) = "Quatre "
bangchu(5, 1) = "Cinq "
bangchu(6, 1) = "Six "
bangchu(7, 1) = "Sept "
bangchu(8, 1) = "Huit "
bangchu(9, 1) = "Neuf "
bangchu(0, 2) = "et "
bangchu(1, 2) = "Dix "
bangchu(2, 2) = "Vingt "
bangchu(3, 2) = "Trente "
bangchu(4, 2) = "Quarante "
bangchu(5, 2) = "Cinquante "
bangchu(6, 2) = "Soixante "
bangchu(7, 2) = "Soixante-dix "
bangchu(8, 2) = "Quatre-vingt "
bangchu(9, 2) = "Quatre-vingt-dix "
banghang(0) = ""
banghang(1) = ""
banghang(2) = "mille "
banghang(3) = "million "
banghang(4) = "milliard, "
banghang(5) = "thousand milliard, "
bangvaloi(1, 1) = "Dix un"
bangvaloi(1, 2) = "Onze"
bangvaloi(2, 1) = "Dix deux"
bangvaloi(2, 2) = "douze"
bangvaloi(3, 1) = "Dix trois"
bangvaloi(3, 2) = "Treize"
bangvaloi(4, 1) = "Dix quatre"
bangvaloi(4, 2) = "Quatoze"
bangvaloi(5, 1) = "Dix cinq"
bangvaloi(5, 2) = "Quinze"
bangvaloi(6, 1) = "Dix six"
bangvaloi(6, 2) = "Seize"
bangvaloi(7, 1) = "Dix sept"
bangvaloi(7, 2) = "Dix-sept"
bangvaloi(8, 1) = "Dix huit"
bangvaloi(8, 2) = "Dix-huit"
bangvaloi(9, 1) = "Dix neuf"
bangvaloi(9, 2) = "Dix-neuf"
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
SayF = chu
Else
SayF = SayF & LCase(chu)
End If
End If
Next i
For x = 1 To 9
SayF = Replace(SayF, bangvaloi(x, 1), bangvaloi(x, 2))
SayF = Replace(SayF, 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, "France", "Frances")
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
Select Case dec
Case 1, 3
dvt = IIf(tam < 2, "centime", "centimes")
Case 2
dvt = IIf(tam < 2, "cent", "cents")
Case 0
dvt = ""
Case Else
dvt = IIf(tam < 2, dec, dec & "s")
End Select
Case 1
dvt = IIf(tam < 2, "France", "Frances")
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
End If
Select Case number
Case 0
SayF = " "
Case Is > 0
SayF = Trim(SayF & dvt)
Case Else
SayF = "Moins " & LCase(SayF)
SayF = Trim(SayF & dvt)
End Select
If sole > 0 Then
SayF = Trim(SayF) & IIf(dec = 0, " virgule ", " et ")
SayF = SayF & IIf(Round(sole * 100, 0) < 10 And dec = 0, "zéro ", "")
SayF = SayF & LCase(SayF(Round(sole * 100, 0), 0, dec))
Else
SayF = SayF & "."
End If
Exceptions:
SayF = Replace(SayF, "pennys", "pence")
SayF = Replace(SayF, "mouses", "mice")
SayF = Replace(SayF, "foots", "feet")
End Function

Unit ưu tiên 1 là France, 2 là USD, 3 là Euro, 0 là không dùng, đơn vị khác thì gõ vào
Dec = 1 cho France và EUR tự động là centime(s), cho USD là cent(s), 0 là không dùng, tên khác thì gõ vào
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom