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

Liên hệ QC

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

handung107

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

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ỉ
 
Upvote 0
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é
 
Upvote 0
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
 
Upvote 0
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.
 
Upvote 0
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)
 

File đính kèm

Upvote 0
nhờ anh đọc hộ em số nay với!

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!
 

File đính kèm

Upvote 0
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
 
Upvote 0
Tôi thấy rất hay bạn có thể hướng dẫn cách làm được không?
 
Upvote 0
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.
 
Upvote 0
cho mình hỏi sau khi add code như ở #1 thì sử dụng hàm thế nào để nó ra kết quả
xin cảm ơn
 
Upvote 0
Vui thật nhiều khi những người mù công ghệ như em chẳng dám vào tiếp chuyện các bác với kiểu comt trả bài thế này. Cảm ơn sự giúp đỡ của các bác nhiệt tình- em làm cuối cùng cũng đc rồi ạ.
 
Upvote 0
[GPECODE=vb]Option Explicit
Public Function VND(sotien As Double)
Dim a, b, X, Y As Double, Dso, Ddv, So, Dv, doc As String
If sotien = 0 Then
VND = "Khoâng"
Exit Function
End If
a = Fix(Val(sotien))
b = Len((a))
X = 1
Y = b - 1
Do
So = Array("khoâng", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chín")
Dso = So(Mid(a, X, 1))
Dv = Array("", "möôi", "traêm", "nghìn,", "möôi", "traêm", "trieäu,", "möôi", "traêm", "tyû,", "möôi", "traêm", "nghìn", "möôi", "traêm")
Ddv = Dv(Y)
If Dso <> "khoâng" Then
If Ddv = "traêm" Then
doc = doc & " " & Dso & " " & Ddv
ElseIf Ddv = "möôi" Then
If Dso = "moät" Then
If X > 1 Then
doc = doc & " " & "möôøi"
Else
doc = "möôøi"
End If
Else
doc = doc & " " & Dso & " " & Ddv
End If
Else
If X > 1 Then
If Dso = "moät" And Val(Mid(a, X - 1, 1)) > 1 Then
doc = doc & " moát" & " " & Ddv
Else
doc = doc & " " & Dso & " " & Ddv
End If
Else
doc = Dso & " " & Ddv
End If
End If
Else
If Ddv = "traêm" Then
If Val(Mid(a, X, 2)) = 0 And Val(Mid(a, X, 3)) = 0 Then
doc = doc
Else
doc = doc & " " & Dso & " " & Ddv
End If
ElseIf Ddv = "möôi" Then
If Val(Mid(a, X, 2)) = 0 Then
doc = doc
Else
doc = doc & " leû"
End If
Else
If X >= 3 Then
If Val(Mid(a, X - 2, 3)) > 0 Or Y = 9 Or Y = 12 Then
doc = doc & " " & Ddv
Else
doc = doc
End If
Else
If Val(Mid(a, X - 1, 2)) > 0 Or Y = 9 Or Y = 12 Then
doc = doc & " " & Ddv
Else
doc = doc
End If
End If
End If
End If
X = X + 1
Y = Y - 1
Loop Until Y < 0
doc = Trim(doc)
If Val(Right(a, 3)) = 0 Or Val(Right(a, 6)) = 0 Or Val(Right(a, 9)) = 0 Then
doc = Left(doc, Len(doc) - 1)
Else
doc = doc
End If
doc = UCase(Left(doc, 1)) & Right(doc, Len(doc) - 1)
VND = doc
End Function



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

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




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


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

E thêm chữ "đồng" vào phần code uni của bác này mãi mà nó cứ lỗi chữ "đồng" đó là sao hic
 
Upvote 0
Chào ACE trên GPE !
Tôi đã tải hàm chuyển số thanh chữ do bạn hadung107 giới thiệu nhưng chưa biết sử dụng. Tôi đã dùng hàm NumToWordExl chuyển được số sang chữ nhưng là chữ Việt theo TCVN. Tôi muốn chuyển số sang thẳng chữ Unicode nhưng chưa biết cách. Bạn nào biết cách sử dụng hàm do handung107 giới thiệu thì giúp đỡ mình với.
Xin chân thành cảm ơn !
 
Upvote 0
mình là mem cũng từ hồi lâu lắm rồi nay mới mò vào đây
vì giờ mới phải sử dụng tới cái hàm này mà đọc chả hiểu gì lun
ai cho em hướng dẫn cực kỳ cụ thể với
 
Upvote 0
mình là mem cũng từ hồi lâu lắm rồi nay mới mò vào đây
vì giờ mới phải sử dụng tới cái hàm này mà đọc chả hiểu gì lun
ai cho em hướng dẫn cực kỳ cụ thể với
Bạn muốn hiểu bài nào trong 120 bài viết trước bạn? Bạn trích dẫn bài đó lên đây?
Cách "chèn code, sử dụng code" thì đều giống nhau ở các phiên bản Excel, ở mọi nơi trên trái đất này. Rất là đơn giản thôi mà.
Tôi đã gợi ý cho bạn con đường để có được 'hướng dẫn' bằng nội dung trong dấu nháy kép ở trên rồi do.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn muốn hiểu bài nào trong 12o bài viết trước bạn? Bạn trích dẫn bài đó lên đây?
Cách "chèn code, sử dụng code" thì đều giống nhau ở các phiên bản Excel, ở mọi nơi trên trái đất này. Rất là đơn giản thôi mà.
Tôi đã gợi ý cho bạn con đường để có được 'hướng dẫn' bằng nội dung trong dấu nháy kép ở trên rồi do.


đây anh
xem file đính kèm
cụ thể ô số tiền là C1 là 50 ngàn
em muốn ô C2 là số tiền viết bằng chữ nó tự động nhảy là " năm mươi ngàn đồng" thì hàm ở ô C2 em phải chèn là hàm gì ý ạ?
 

File đính kèm

Upvote 0
đây anh
xem file đính kèm
cụ thể ô số tiền là C1 là 50 ngàn
em muốn ô C2 là số tiền viết bằng chữ nó tự động nhảy là " năm mươi ngàn đồng" thì hàm ở ô C2 em phải chèn là hàm gì ý ạ?
Tôi thì không dùng code nào trong các bài trên cả mà dùng add in của a Nguyenduytuan với cú pháp như hình dưới.
Để sử dụng được code trong các bài trên thì bạn đọc lại bài #122.
 

File đính kèm

  • f.JPG
    f.JPG
    45.4 KB · Đọc: 37
Upvote 0
Em cần sửa VBA để ra kết quả như sau "Một tỷ, một trăm triệu, không trăm mười một nghìn," thành "Một tỷ, một trăm triệu, không trăm mười một nghìn đồng." các bác giúp em với!
 

File đính kèm

Upvote 0
Em cần sửa VBA để ra kết quả như sau "Một tỷ, một trăm triệu, không trăm mười một nghìn," thành "Một tỷ, một trăm triệu, không trăm mười một nghìn đồng." các bác giúp em với!
Bạn đọc ngay bài #124 của tôi ngay ở trên (kích vào hình để xem cụ thể hơn).
 
Upvote 0
Em cần sửa VBA để ra kết quả như sau "Một tỷ, một trăm triệu, không trăm mười một nghìn," thành "Một tỷ, một trăm triệu, không trăm mười một nghìn đồng." các bác giúp em với!
Bạn thử độ thêm cái đoạn này vào trước dòng End Function xem sao
Mã:
If Right(DocSoUni, 1) = "," Then
    DocSoUni = Mid(DocSoUni, 1, Len(DocSoUni) - 1) & " " & ChrW$(273) & ChrW$(7891) & "ng."
Else
    DocSoUni = DocSoUni & " " & ChrW$(273) & ChrW$(7891) & "ng."
End If
Bạn thử xem sản phẩm của anh "thợ mộc" sang làm "nhôm kính" như thế này có được không
PHP:
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
'------------------------------------------------------
If Right(DocSoUni, 1) = "," Then
    DocSoUni = Mid(DocSoUni, 1, Len(DocSoUni) - 1) & " " & ChrW$(273) & ChrW$(7891) & "ng."
Else
    DocSoUni = DocSoUni & " " & ChrW$(273) & ChrW$(7891) & "ng."
End If
End Function
 
Upvote 0
Bạn thử độ thêm cái đoạn này vào trước dòng End Function xem sao
Mã:
If Right(DocSoUni, 1) = "," Then
    DocSoUni = Mid(DocSoUni, 1, Len(DocSoUni) - 1) & " " & ChrW$(273) & ChrW$(7891) & "ng."
Else
    DocSoUni = DocSoUni & " " & ChrW$(273) & ChrW$(7891) & "ng."
End If
Bạn thử xem sản phẩm của anh "thợ mộc" sang làm "nhôm kính" như thế này có được không
PHP:
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
'------------------------------------------------------
If Right(DocSoUni, 1) = "," Then
    DocSoUni = Mid(DocSoUni, 1, Len(DocSoUni) - 1) & " " & ChrW$(273) & ChrW$(7891) & "ng."
Else
    DocSoUni = DocSoUni & " " & ChrW$(273) & ChrW$(7891) & "ng."
End If
End Function
Cảm ơn bác nhé!
 
Upvote 0
Bạn thử độ thêm cái đoạn này vào trước dòng End Function xem sao
Mã:
If Right(DocSoUni, 1) = "," Then
    DocSoUni = Mid(DocSoUni, 1, Len(DocSoUni) - 1) & " " & ChrW$(273) & ChrW$(7891) & "ng."
Else
    DocSoUni = DocSoUni & " " & ChrW$(273) & ChrW$(7891) & "ng."
End If
Bạn thử xem sản phẩm của anh "thợ mộc" sang làm "nhôm kính" như thế này có được không
PHP:
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
'------------------------------------------------------
If Right(DocSoUni, 1) = "," Then
    DocSoUni = Mid(DocSoUni, 1, Len(DocSoUni) - 1) & " " & ChrW$(273) & ChrW$(7891) & "ng."
Else
    DocSoUni = DocSoUni & " " & ChrW$(273) & ChrW$(7891) & "ng."
End If
End Function
Hihi, "nhôm kính" bác làm cẩn thận thế này chắc lại chuyển qua làm "kim hoàn" là vừa bác ạ.
 
Upvote 0

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

Back
Top Bottom