[Nhờ giúp đỡ] Viết hoa ký tự đầu tiên của chuỗi chữ. (1 người xem)

  • Thread starter Thread starter M@trixs
  • Ngày gửi Ngày gửi
Liên hệ QC

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

M@trixs

Thành viên thường trực
Tham gia
3/3/11
Bài viết
257
Được thích
336
Hiện tại Matrixs có sưu tầm được một đoạn code VBA chuyển số thành chữ (Nếu tác giả biết được thì cho mình xin cảm ơn nhé !). Nhưng kết quả trả về không viết hoa chữ cái đầu dòng. Vì kiến thức có hạn nên mong mọi người giúp giùm một tay.
VD: Ta có số tiền: 1.500.000
Kết quả trả về: một triệu năm trăm ngàn.
Mong muốn được trả về kết quả: Một triệu năm trăm ngàn

Nội dung đoạn code VBA như sau:

[GPECODE=vbnet]Function DocSoUni(conso) As Strings09 = 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[/GPECODE]


Xin cảm ơn mọi người thật nhiều !
 
Lần chỉnh sửa cuối:
Hiện tại Matrixs có sưu tầm được một đoạn code VBA chuyển số thành chữ (Nếu tác giả biết được thì cho mình xin cảm ơn nhé !). Nhưng kết quả trả về không viết hoa chữ cái đầu dòng. Vì kiến thức có hạn nên mong mọi người giúp giùm một tay.
VD: Ta có số tiền: 1.500.000
Kết quả trả về: một triệu năm trăm ngàn.
Mong muốn được trả về kết quả: Một triệu năm trăm ngàn

!
+) code chuyển số thành chữ mà bạn lại muốn kết quả là viết hoa 1 chữ cái đầu dòng? Như vậy điều chủ đạo mà bạn muốn là đổi số thành chữ phải không?
+) Sao bạn không dùng add in như này http://www.giaiphapexcel.com/forum/...nh-hơn-80-các-Addins-khác&p=650021#post650021
 
Upvote 0
Cái này Matrixs chỉ cần thêm &" đồng" cùng với các bạn giúp viết hoa ký tự đầu là ra ngay rồi. Không cần cài Add In này nọ, định nghĩa lu bu. Đơn giản nhưng hiệu quả }}}}}
 
Upvote 0
Hiện tại Matrixs có sưu tầm được một đoạn code VBA chuyển số thành chữ (Nếu tác giả biết được thì cho mình xin cảm ơn nhé !). Nhưng kết quả trả về không viết hoa chữ cái đầu dòng. Vì kiến thức có hạn nên mong mọi người giúp giùm một tay.
VD: Ta có số tiền: 1.500.000
Kết quả trả về: một triệu năm trăm ngàn.
Mong muốn được trả về kết quả: Một triệu năm trăm ngàn



Xin cảm ơn mọi người thật nhiều !

Nếu là tôi thì tôi sẽ để nguyên hàm DoSoUni đồng thời viết thêm 1 hàm nữa thế này:
Mã:
Function DSUni(ByVal conso) As String
  Dim tmp As String
  DSUni = DocSoUni(conso)
  Mid(DSUni, 1, 1) = UCase(Mid(DSUni, 1, 1)) ''<--- Viết hoa ký tự đầu
End Function
Nếu muốn thêm chữ "đồng" vào cuối chuỗi, ta làm luôn trong hàm DSUni:
Mã:
Function DSUni(ByVal conso) As String
  Dim tmp As String
  DSUni = DocSoUni(conso)
  Mid(DSUni, 1, 1) = UCase(Mid(DSUni, 1, 1)) ''<--- Viết hoa ký tự đầu
  DSUni = DSUni & " " & ChrW(273) & ChrW(7891) & "ng" ''<--- Thêm chữ "đồng" vào cuối chuỗi
End Function
Áp dụng trên bảng tính ta dùng DSUni(Con số) thay vì dùng hàm cũ
Khỏi suy nghĩ chuyện sửa code kia chi cho mệt
 
Upvote 0
Nếu là tôi thì tôi sẽ để nguyên hàm DoSoUni đồng thời viết thêm 1 hàm nữa thế này:
Mã:
Function DSUni(ByVal conso) As String
  Dim tmp As String
  DSUni = DocSoUni(conso)
  Mid(DSUni, 1, 1) = UCase(Mid(DSUni, 1, 1)) ''<--- Viết hoa ký tự đầu
End Function
Nếu muốn thêm chữ "đồng" vào cuối chuỗi, ta làm luôn trong hàm DSUni:
Mã:
Function DSUni(ByVal conso) As String
  Dim tmp As String
  DSUni = DocSoUni(conso)
  Mid(DSUni, 1, 1) = UCase(Mid(DSUni, 1, 1)) ''<--- Viết hoa ký tự đầu
  DSUni = DSUni & " " & ChrW(273) & ChrW(7891) & "ng" ''<--- Thêm chữ "đồng" vào cuối chuỗi
End Function
Áp dụng trên bảng tính ta dùng DSUni(Con số) thay vì dùng hàm cũ
Khỏi suy nghĩ chuyện sửa code kia chi cho mệt

Chỉ cần giải quyết nhiêu dây là thấy đã lắm rồi. Xin cảm ơn nhiều nhiều
 
Upvote 0
Cái này Matrixs chỉ cần thêm &" đồng" cùng với các bạn giúp viết hoa ký tự đầu là ra ngay rồi. Không cần cài Add In này nọ, định nghĩa lu bu. Đơn giản nhưng hiệu quả }}}}}
Đấy là tùy bạn thích dùng code nào cũng tùy ||||| . Còn dùng add in thì trên bất kỳ file excel nào cũng đều sử dụng được. Còn dùng code thì muốn sử dụng trên file khác thì bạn phải copy code sang file khác mới chạy được.
 
Upvote 0
Nhưng đa số code VBA mà Matrixs cần thì nó chỉ đáp ứng đủ cho file đó thôi. Còn nếu cái gì cũng cài AddIn vào thì khi Excell nó load lên cũng mất thời gian và bộ nhớ lắm :-=
 
Upvote 0

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

Back
Top Bottom