Đọc số ra chữ

Liên hệ QC

laohiep

Thành viên chính thức
Tham gia
29/11/08
Bài viết
58
Được thích
12
Mình đang cần đoạn code đọc số ra chữ, (chỉ đọc số ra chữ thôi không phải ra tiền VND hoặc USD đâu), mình cần cả tiếng Việt và tiếng Anh.
Anh chị nào có sẵn cho mình xin nhá.
Xin cảm ơn nhiều!
 
Mình đang cần đoạn code đọc số ra chữ, (chỉ đọc số ra chữ thôi không phải ra tiền VND hoặc USD đâu), mình cần cả tiếng Việt và tiếng Anh.
Anh chị nào có sẵn cho mình xin nhá.
Xin cảm ơn nhiều!
Bạn vào Tìm kiếm > Tìm với Google với từ đọc số
 
Upvote 0
Bạn làm thử cái này xem

Nhập đoạn mã lệnh sau:
Public Function phi(baonhieu)
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 baonhieu = 0 Then
ketqua = "khoâng ñoàng"
Else
If Abs(baonhieu) >= 1E+15 Then
ketqua = "soá quaù lôùn"
Else
If baonhieu < 0 Then
ketqua = "tröø" & Space(1)
Else
ketqua = Space(0)
End If
sotien = Format(Abs(baonhieu), "##############0.00")
sotien = Right(Space(15) & sotien, 18)
hang = Array("none", "traêm", "möôi", "gì ñoù")
doc = Array("none", "ngaøn tyû", "tyû", "trieäu", "ngaøn", "ñoàng", "chaün")
dem = Array("none", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chí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 = "ñoàng" & Space(1)
Else
chu = Space(0)
End If
Case ".00"
chu = "chaü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öôi moät", 1)
If vitri > 0 Then Mid(chu, vitri, 9) = "möôi moát"
ketqua = ketqua & chu
End If
Next i
End If
End If
Phi = UCase(Left(ketqua, 1)) & Mid(ketqua, 2)
End Function

Public Function usd(baonhieu)
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 baonhieu = 0 Then
ketqua = "khoâng dollars"
Else
If Abs(baonhieu) >= 1E+15 Then
ketqua = "soá quaù lôùn"
Else
If baonhieu < 0 Then
ketqua = "tröø" & Space(1)
Else
ketqua = Space(0)
End If
sotien = Format(Abs(baonhieu), "##############0.00")
sotien = Right(Space(15) & sotien, 18)
hang = Array("none", "traêm", "möôi", "gì ñoù")
doc = Array("none", "ngaøn tyû", "tyû", "trieäu", "ngaøn", "dollars", "cents")
dem = Array("none", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chí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 = "dollars" & Space(1)
Else
chu = Space(0)
End If
Case ".00"
chu = "chaü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öôi moät", 1)
If vitri > 0 Then Mid(chu, vitri, 9) = "möôi moát"
ketqua = ketqua & chu
End If
Next i
End If
End If
usd = UCase(Left(ketqua, 1)) & Mid(ketqua, 2)
End Function
 

File đính kèm

  • doi chu ra so - dollar.rar
    10.2 KB · Đọc: 451
Lần chỉnh sửa cuối:
Upvote 0
Gởi bạn ct đọc số ra chữ.
 

File đính kèm

  • Ufunctions.rar
    76.8 KB · Đọc: 478
Lần chỉnh sửa cuối:
Upvote 0
nhưng mà câu lệnh đó thế nào?? hàm đặt thế nào??? cho macro đó
 
Upvote 0
Mình đang cần đoạn code đọc số ra chữ, (chỉ đọc số ra chữ thôi không phải ra tiền VND hoặc USD đâu), mình cần cả tiếng Việt và tiếng Anh.
Anh chị nào có sẵn cho mình xin nhá.
Xin cảm ơn nhiều!
Nếu dùng Excel để lập phiếu thu tiền cho khách hàng, bạn sẽ cần ghi số tiền bằng chữ. Để khỏi mất công ghi “bằng tay”, ta hãy tạo một hàm trong Excel “chuyên trị” việc này. Cách làm như sau:


1. Khởi động Excel, tạo một workbook mới (hoặc dùng Book1 như mặc định). Chọn Tools Macro Visual Basic Editor để mở cửa sổ soạn thảo VBA. Trong cửa sổ Project Explorer (nếu không thấy thì chọn View Project Explorer để mở nó), chọn VBAProject (Book1). Chọn Insert Module để thêm một module vào workbook.
2. Gõ nội dung hàm đổi số ra chữ SoRaChu(N) như đoạn mã 1 vào module mới tạo.
Đoạn mã 1
PHP:
Function SoRaChu(ByVal NumCurrency As Currency) As String
If NumCurrency = 0 Then
SoRaChu = "Không đồng"
Exit Function
End If
If NumCurrency > 922337203685477# Then ' Số lớn nhất của loại CURRENCY
SoRaChu = "Không đổi được số lớn hơn 922,337,203,685,477"
Exit Function
End If
Static CharVND(9) As String, BangChu As String, I As Integer
Dim SoLe, SoDoi As Integer, PhanChan, Ten As String
Dim DonViTien As String, DonViLe As String
Dim NganTy As Integer, Ty As Integer, Trieu As Integer, Ngan As Integer
Dim Dong As Integer, Tram As Integer, Muoi As Integer, DonVi As Integer

DonViTien = "đồng" ‘ Bạn có thể thay đơn vị tiền tệ khác ở đây
DonViLe = "xu"

CharVND(1) = "một"
CharVND(2) = "hai"
CharVND(3) = "ba"
CharVND(4) = "bốn"
CharVND(5) = "năm"
CharVND(6) = "sáu"
CharVND(7) = "bảy"
CharVND(8) = "tám"
CharVND(9) = "chín"

SoLe = Int((NumCurrency - Int(NumCurrency)) * 100) '2 kí số lẻ
PhanChan = Trim$(Str$(Int(NumCurrency)))
PhanChan = Space(15 - Len(PhanChan)) + PhanChan

NganTy = Val(Left(PhanChan, 3))
Ty = Val(Mid$(PhanChan, 4, 3))
Trieu = Val(Mid$(PhanChan, 7, 3))
Ngan = Val(Mid$(PhanChan, 10, 3))
Dong = Val(Mid$(PhanChan, 13, 3))
If NganTy = 0 And Ty = 0 And Trieu = 0 And Ngan = 0 And Dong = 0 Then
BangChu = "không " + DonViTien + " "
I = 5
Else
BangChu = ""
I = 0
End If
While I <= 5
Select Case I
Case 0
SoDoi = NganTy
Ten = "ngàn tỷ"
Case 1
SoDoi = Ty
Ten = "tỷ"
Case 2
SoDoi = Trieu
Ten = "triệu"
Case 3
SoDoi = Ngan
Ten = "ngàn"
Case 4
SoDoi = Dong
Ten = DonViTien
Case 5
SoDoi = SoLe
Ten = DonViLe
End Select
If SoDoi <> 0 Then
Tram = Int(SoDoi / 100)
Muoi = Int((SoDoi - Tram * 100) / 10)
DonVi = (SoDoi - Tram * 100) - Muoi * 10
BangChu = Trim(BangChu) + IIf(Len(BangChu) = 0, "", ", ") + _
IIf(Tram <> 0, Trim(CharVND(Tram)) + " trăm ", "")
If Muoi = 0 And Tram <> 0 And DonVi <> 0 Then
BangChu = BangChu + "lẻ "
Else
If Muoi <> 0 Then
BangChu = BangChu + IIf(Muoi <> 0 And Muoi <> 1, _
Trim(CharVND(Muoi)) + " mươi ", "mười ")
End If
End If

If Muoi <> 0 And DonVi = 5 Then
BangChu = BangChu + "lăm " + Ten + " "
Else
If Muoi > 1 And DonVi = 1 Then
BangChu = BangChu + "mốt " + Ten + " "
Else
BangChu = BangChu+IIf(DonVi <> 0,Trim(CharVND(DonVi))+" "+Ten+" ", Ten + " ")
End If
End If
Else
BangChu = BangChu + IIf(I = 4, DonViTien + " ", "")
End If
I = I + 1
Wend
If SoLe = 0 Then
BangChu = BangChu + "chẵn"
End If
Mid$(BangChu, 1, 1) = UCase$(Mid$(BangChu, 1, 1))
SoRaChu = BangChu
End Function
Bạn để ý, hàm SoRaChu có phân biệt cách đọc số 1 (một hay mốt), 5 (năm hay lăm), mươi hay mười và chỉ đổi số có trị lớn nhất là 922,337, 203, 685, 477. Các chữ Việt có dấu trong đoạn mã 1 có mã Unicode.
3. Chuyển sang cửa sổ Excel để kiểm tra hàm bằng cách thử gõ vào ô bất kỳ, ví dụ: =SoRaChu(922337203,34). Nếu êm xuôi thì chuyển sang bước kế tiếp.
4. Mô tả hàm để chọn chính xác tên hàm khi bạn sử dụng công cụ Past Function. Trong cửa sổ Excel, chọn menu Tools Macro Macros để hiển thị hộp thoại Macro. Gõ tên hàm SoRaChu vào ô Macro name, rồi bấm Options để mở tiếp hộp thoại Macro Options, gõ nội dung mô tả hàm vào ô Description, bấm OK để đóng hộp thoại Macro Options, cuối cùng bấm Cancel để đóng hộp thoại Macro.
5. Ghi workbook lên đĩa thành tập tin TienBac.XLA (ví dụ). Bạn phải đặt tập tin này đúng chỗ để mỗi lần Excel khởi động sẽ nạp nó tự động.
Đối với Excel XP trên Windows XP:
C:Documents and SettingsUserNameApplication DataMicrosoftAddIns
Đối với Excel 2000 trên Windows 98:
C:WindowsApplication DataMicrosoftAddIns
Đối với Excel 97 trên Windows 98:
C:program FilesMicrosoft OfficeOfficeLibrary
Đóng Excel mà không cần ghi lại các thay đổi trên Book1.
6. Dùng Windows Explorer để thêm mô tả cho add-in bằng cách bấm chuột phải trên tên tập tin TienBac.XLA, chọn mục Properties để mở hộp thoại Properties, chọn thẻ Summary để gõ mô tả vào ô Comments, gõ tên của add-in vào ô Title. Chọn nút OK để chấp nhận các thông tin vừa nêu.
7. Khởi động lại Excel, cài đặt add-in vừa tạo cho Excel bằng cách chọn trình đơn Tools Add-Ins để mở hộp thoại Add-Ins, chọn tên add-in của ta trong danh sách Add-Ins available, rồi bấm OK.
Từ đây trở về sau, mỗi lần mở Excel, bạn đương nhiên dùng được hàm SoRaChu trong add-in TienBac.XLA.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Có mem nào có add-in đọc số ra chữ, chữ tiếng Anh nhưng đọc cho loại tiền Việt (VD: 123=one hundred and twenty three VND only) upload lên cho xin với. Xin cảm ơn nhiều.
 
Upvote 0
Hôm trước mình có copy đoạn mã của bạn vào VBA nhưng những chữ liên quan đến tiếng Việt thì không hiển thị được. Bạn có cách nào để gõ được tiếng Việt vào VBA nhưng không cần dùng hàm ChrW không? Mặt khác, sau khi mình đã sửa các chữ tiếng Việt bằng hàm ChrW thì thấy những số tròn như 1.000, 10.000 ... đều bị viết sai. Ví dụ: 1.000 thì được đọc là "một trăm ngàn đồng chẵn"; hay 10.000 thì được đọc là "một trăm triệu đồng chẵn"... Điều đáng nói là nếu những số không tròn như 12.345 thì lại không bị đọc sai. Do đó mình nghĩ trong đoạn mã code của bạn đã bỏ sót lệnh if nào đó liên quan đến trường hợp này (hoặc trong lúc sửa hàm ChrW mình đã xóa mất đoạn code nào đó). Mình không biết viết mã code nên không thể bổ sung lại đoạn code trên được. Vì vậy, nhờ bạn, các bạn nào biết thì sửa giùm mình với. Mình làm kế toán nên rất hay phải dùng hàm này. Mong được mọi người giúp đỡ. Mình gửi kèm theo đoạn code mình đã sửa lại, ai biết thì bổ sung giùm mình với nhé.
Function SoRaChu(ByVal NumCurrency As Currency) As String
If NumCurrency = 0 Then
SoRaChu = "Không " & ChrW$(273) & ChrW$(7891) & "ng"
Exit Function
End If
If NumCurrency > 922337203685477# Then ' So lon nhat cua loai CURRENCY
SoRaChu = "Khong doi duoc so lon hon 922,337,203,685,477"
Exit Function
End If
'-------------------------------------------------
Static CharVND(9) As String, BangChu As String, I As Integer
Dim SoLe, SoDoi As Integer, PhanChan, Ten As String
CharVND(1) = "m" & ChrW$(7897) & "t"
CharVND(2) = "hai"
CharVND(3) = "ba"
CharVND(4) = "b" & ChrW$(7889) & "n"
CharVND(5) = "n" & ChrW$(259) & "m"
CharVND(6) = "sáu"
CharVND(7) = "b" & ChrW$(7843) & "y"
CharVND(8) = "tám"
CharVND(9) = "chín"
'-------------------------------------------------
SoLe = Int((NumCurrency - Int(NumCurrency)) * 100) '2 kí s? l?
I = 1
PhanChan = Trim$(Str$(Int(NumCurrency)))
While Len(PhanChan) > 0
Select Case I
Case 1 'Dong
Dong = Val(Right$(PhanChan, 3))
PhanChan = Left$(PhanChan, Len(PhanChan) - Len(Trim$(Str$(Dong))))
Case 2 'Ngan
Ngan = Val(Right$(PhanChan, 3))
PhanChan = Left$(PhanChan, Len(PhanChan) - Len(Trim$(Str$(Ngan))))
Case 3 'Trieu
Trieu = Val(Right$(PhanChan, 3))
PhanChan = Left$(PhanChan, Len(PhanChan) - Len(Trim$(Str$(Trieu))))
Case 4 'Ty
Ty = Val(Right$(PhanChan, 3))
PhanChan = Left$(PhanChan, Len(PhanChan) - Len(Trim$(Str$(Ty))))
Case 5 'Ngan Ty
NganTy = Val(Right$(PhanChan, 3))
PhanChan = Left$(PhanChan, Len(PhanChan) - Len(Trim$(Str$(NganTy))))
End Select
I = I + 1
Wend
If NganTy = 0 And Ty = 0 And Trieu = 0 And Ngan = 0 And Dong = 0 Then
BangChu = "không " & ChrW$(273) & ChrW$(7891) & "ng"
I = 5
Else
BangChu = ""
I = 0
End If
While I <= 5 ' Bat dau doi
Select Case I
Case 0
SoDoi = NganTy
Ten = "ngàn t" & ChrW$(7927)
Case 1
SoDoi = Ty
Ten = "t" & ChrW$(7927)
Case 2
SoDoi = Trieu
Ten = "tri" & ChrW$(7879) & "u"
Case 3
SoDoi = Ngan
Ten = "ngàn"
Case 4
SoDoi = Dong
Ten = ChrW$(273) & ChrW$(7891) & "ng"
Case 5
SoDoi = SoLe
Ten = "xu"
End Select
If SoDoi <> 0 Then
Tram = Int(SoDoi / 100)
Muoi = Int((SoDoi - Tram * 100) / 10)
DonVi = (SoDoi - Tram * 100) - Muoi * 10
BangChu = BangChu + IIf(Tram <> 0, CharVND(Tram) + " tr" & ChrW$(259) & "m ", "")
If Muoi = 0 And Tram <> 0 And DonVi <> 0 Then
BangChu = BangChu + "l" & ChrW$(7867) & " "
Else
If Muoi <> 0 Then
BangChu = BangChu + IIf(Muoi <> 0 And Muoi <> 1, CharVND(Muoi) + " m" & ChrW$(432) & ChrW$(417) & "i ", "m" & ChrW$(432) & ChrW$(7901) & "i ")
End If
End If
If Muoi <> 0 And DonVi = 5 Then
BangChu = BangChu + "l" & ChrW$(259) & "m " + Ten + " "
Else
If Muoi <> 0 And Muoi <> 1 And DonVi = 1 Then
BangChu = BangChu + "m" & ChrW$(7889) & "t " + Ten + " "
Else
BangChu = BangChu + IIf(DonVi <> 0, CharVND(DonVi) + " " + Ten + " ", Ten + " ")
End If
End If
Else
BangChu = BangChu + IIf(I = 4, ChrW$(273) & ChrW$(7891) & "ng", "")
End If
I = I + 1
Wend
If SoLe = 0 Then
BangChu = BangChu + "ch" & ChrW$(7861) & "n "
End If
Mid$(BangChu, 1, 1) = UCase$(Mid$(BangChu, 1, 1))
SoRaChu = BangChu
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là đoạn code chuyển ra tiếng anh nhưng là tiền việt

Function tienUSD(Tien)
If Tien = 0 Then
Toread = "None"
Else
sp = Space(1)
RR = Space(0)
Donvi = RR: Hchuc = RR: Khung = RR
Donvi = Donvi + "one two three four "
Donvi = Donvi + "five six seven eight "
Donvi = Donvi + "nine ten eleven twelve "
Donvi = Donvi + "thirteen fourteen fifteen sixteen "
Donvi = Donvi + "seventeeneighteen nineteen "
Hchuc = Hchuc + "twenty thirty forty fifty "
Hchuc = Hchuc + "sixty seventy eighty ninety "
Khung = Khung + "billion milion thousand dollars cents "
If Tien < 0 Then
Toread = "Minus "
Else
Toread = RR
End If
Chuoi = Format(Abs(Tien), "############.00")
Chuoi = Right(Space(12) + Chuoi, 15)
For i = 1 To 5
NHOM = Mid(Chuoi, i * 3 - 2, 3)
If NHOM <> Space(3) Then
Select Case NHOM
Case "000"
If i = 4 And Abs(Tien) > 1 Then
Word = "dong "
Else
Word = RR
End If
Case ".00"
Word = "only"
Case Else
x = Val(Left(NHOM, 1))
y = Val(Mid(NHOM, 2, 1))
z = Val(Right(NHOM, 1))
W = Val(Right(NHOM, 2))
If x = 0 Then
Word = RR
Else
Word = Trim(Mid(Donvi, x * 9 - 8, 9)) + " hundred "
If W > 0 And W < 21 Then
Word = Word + "and "
End If
End If
If i = 5 And Abs(Tien) > 1 Then
Word = "and " + Word
End If
If W < 20 And W > 0 Then
Word = Word + Trim(Mid(Donvi, W * 9 - 8, 9)) + sp
Else
If W >= 20 Then
Word = Word + Trim(Mid(Hchuc, (y - 1) * 9 - 8, 9)) + sp
If z > 0 Then
Word = Word + Trim(Mid(Donvi, z * 9 - 8, 9)) + sp
End If
End If
End If
Word = Word + Trim(Mid(Khung, i * 9 - 8, 9)) + sp
End Select
Toread = Toread + Word
End If
Next i
End If
tienUSD = UCase(Left(Toread, 1)) + Mid(Toread, 2) & "."
End Function
 
Upvote 0
Hàm số ra chữ

Nếu dùng Excel để lập phiếu thu tiền cho khách hàng, bạn sẽ cần ghi số tiền bằng chữ. Để khỏi mất công ghi “bằng tay”, ta hãy tạo một hàm trong Excel “chuyên trị” việc này. Cách làm như sau:
....

Mình cũng đang sử dụng hàm đổi số ra chữ này, nhưng hàm này khi sử dụng không đọc được chữ "Không trăm". VD: 1.001 đọc là: Một nghìn, một đồng chẵn. Khi sửa được chữ "không trăm" thì lại sảy ra trường hợp này: VD: 1.001 đọc là: Một nghìn, không trăm một nghìn đồng chẵn. không đọc chữ "linh" hoặc "lẻ"Bạn nào biết sửa giúp được không, mình xin cảm ơn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Chào các bạn.
Mình đã cài xong đoạn code SoRaChu, nó chạy rất tốt. Nhưng cho mình hỏi làm thế nào để sử dụng được phím tắt, ví dụ: (12345) ta chỉ thao tác: = + Ctrl+t(). thì ko phải đánh chữ: =sorachu(12345).
Cho mình cảm ơn trước nhé
 
Upvote 0
Có bác nào có cách để đổi điểm từ số ra chữ không?
Ví dụ: 8 thành "Tám" hoặc 9,5 thành "Chín phẩy năm".
Cảm ơn các bác trước
 
Upvote 0
Mình cũng đang sử dụng hàm đổi số ra chữ này, nhưng hàm này khi sử dụng không đọc được chữ "Không trăm". VD: 1.001 đọc là: Một nghìn, một đồng chẵn. Khi sửa được chữ "không trăm" thì lại sảy ra trường hợp này: VD: 1.001 đọc là: Một nghìn, không trăm một nghìn đồng chẵn. không đọc chữ "linh" hoặc "lẻ"Bạn nào biết sửa giúp được không, mình xin cảm ơn.
Với cách đọc trên, bạn tham khảo tại http://www.giaiphapexcel.com/forum/showthread.php?t=21768
 
Upvote 0
. "Mô tả hàm để chọn chính xác tên hàm khi bạn sử dụng công cụ Past Function. Trong cửa sổ Excel, chọn menu Tools Macro Macros để hiển thị hộp thoại Macro. Gõ tên hàm SoRaChu vào ô Macro name, rồi bấm Options để mở tiếp hộp thoại Macro Options, gõ nội dung mô tả hàm vào ô Description, bấm OK để đóng hộp thoại Macro Options, cuối cùng bấm Cancel để đóng hộp thoại Macro".!!!!!!
Tôi ko làm được phím tắt này. Mong các bạn chỉ giup. Cảm ơn
 
Upvote 0
Web KT
Back
Top Bottom