

Em sử dụng hàm đọc số thành chữ được lấy từ GPE và thường xuyên sử dụng hàm này. Nhưng nếu là số dương thì không sao, còn số âm thì hiện giá trị #VALUE!. Các AC GPE giúp em sửa lỗi này với! Em xin cám ơn nhiều!
Em gửi file đính kèm
Public Function VND(BaoNhieu)
Dim KetQua, SoTien, Nhom, Chu, Dich, S1, S2, S3 As String
Dim l, 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 ' 1E+15 töùc 1.000.000.000.000.000 töùc 1 trieäu tyû
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") '18 digits with 2 decimal
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", "y")
Dem = Array("None", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chín")
For l = 1 To 6
Nhom = Mid(SoTien, l * 3 - 2, 3)
If Nhom <> Space(3) Then
Select Case Nhom
Case "000"
If l = 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(l)
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) ' Kyù töï en lô
Case 2 And S = 0 And S3 <> "0"
If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And l = 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 l
End If
End If
VND = UCase(Left(KetQua, 1)) & Mid(KetQua, 2)
End Function
bạn thử dùng hàm VND đổi số sang chữ (mình sưu tầm được) xem?
tải file đính kèm + cho chạy Macro
Mã:Public Function VND(BaoNhieu) Dim KetQua, SoTien, Nhom, Chu, Dich, S1, S2, S3 As String Dim l, 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 ' 1E+15 töùc 1.000.000.000.000.000 töùc 1 trieäu tyû 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") '18 digits with 2 decimal 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", "y") Dem = Array("None", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chín") For l = 1 To 6 Nhom = Mid(SoTien, l * 3 - 2, 3) If Nhom <> Space(3) Then Select Case Nhom Case "000" If l = 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(l) 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) ' Kyù töï en lô Case 2 And S = 0 And S3 <> "0" If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And l = 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 l End If End If VND = UCase(Left(KetQua, 1)) & Mid(KetQua, 2) End Function


Có cách nào mà không phải dùng Macro không ạ?





Bạn chịu khó tìm kiếm trên diễn đàn.Có cách nào mà không phải dùng Macro không ạ?
Bạn chịu khó tìm kiếm trên diễn đàn.
Mình gợi ý cho bạn tìm kiếm chủ để của bạn hoangdanh282vn hoặc bạn hieuxd.




OK, giúp bạn đây. Không hiểu bạn tìm thế nào chứ mình thấy topic này ở ngay trang 1Bạn giúp mình đi - Mình đã tìm các bài viết của bạn hoangdanh282vn nhìn thấy từ trang 1 đến 88 mà nản quá
OK, giúp bạn đây. Không hiểu bạn tìm thế nào chứ mình thấy topic này ở ngay trang 1
http://www.giaiphapexcel.com/forum/showthread.php?10557-Đọc-số-bằng-chữ-dùng-Name
Hình như sửa lại tý tẹo ở [F1] & [B6] là được thôi màMình đã xem, nhưng thấy phức tạp quá, (....Cái này thì bạn vào Insert\Name\Define.. bạn sẽ thấy một rừng name chứa đựng các công thức, bạn từ từ tìm hiểu nha....) (Mình không được học về excel chỉ học mót công thức trong diễn đàn để phục vụ cho công việc của mình nó thuận tiện chút thôi) mình thích hàm đọc số thành chữ trong file mình gửi hơn, chỉ có điều nó hiện giá trị #VALUE! khi là số âm thôi. Bạn và mọi người sửa lỗi đó trong file mình gửi giúp mình với! Cám ơn các bạn nhiều!




Có đâu nnhiều name lắm đâu mà bạn đã "hãi" vậy.Mình đã xem, nhưng thấy phức tạp quá, (....Cái này thì bạn vào Insert\Name\Define.. bạn sẽ thấy một rừng name chứa đựng các công thức, bạn từ từ tìm hiểu nha....) (Mình không được học về excel chỉ học mót công thức trong diễn đàn để phục vụ cho công việc của mình nó thuận tiện chút thôi) mình thích hàm đọc số thành chữ trong file mình gửi hơn, chỉ có điều nó hiện giá trị #VALUE! khi là số âm thôi. Bạn và mọi người sửa lỗi đó trong file mình gửi giúp mình với! Cám ơn các bạn nhiều!
Hình như sửa lại tý tẹo ở [F1] & [B6] là được thôi mà
Thân

mình thích hàm đọc số thành chữ trong file mình gửi hơn, chỉ có điều nó hiện giá trị #VALUE! khi là số âm thôi. Bạn và mọi người sửa lỗi đó trong file mình gửi giúp mình với! Cám ơn các bạn nhiều!
Có đâu nnhiều name lắm đâu mà bạn đã "hãi" vậy.![]()
Làm gì đến 1 rừng name
Bạn chỉ cần đọc kỹ tất cả các bài ở topic đó là biết sử dụng thôi.
Biết sử dụng thành thạo đã là OK.
Ưu điểm của dùng name là bạn có thể gửi file đó cho tất cả mọi người dùng excel 2003 trở lên !!! thì không bị lỗi #VALUE ở máy khác do máy khác không có code hoặc add in.
Bạn có thể tham khảo add in của anh Nguyễn Duy Tuân. Đọc số âm 1 cách ngon lành.
Bạn không nói đùa đấy chứ?
Nhìn vào những công thức kiểu đó thì mắt đã hoa lên, chân tay bủn rủn thì chả có ai rà soát và sửa cho bạn đâu
Người ta cho bạn hàm VND rồi bạn chỉ phải gõ vào B6 công thức =VND(B1) mà bạn còn chê???
Tất nhiên hàm VND tôi chưa biết đúng sai thế nào, chỉ riêng nhìn vào phông chữ đã thấy ớn
Nhưng mình vẫn thích nó vì mình chỉ việc copy rồi cố định nó vào Sheet - hơn nữa nó dễ dàng thay đổi khi nó là ngoại tệ (Chỉ cần thay đổi ở S4)



Test thử số thầy Siwtom đưa nó đọc kết quả sai bét.Bạn thử nhập vào B1: 1234567891234 đi
Ngoài ra nếu trong cùng sheet bạn có chỗ đọc ĐỒNG và chỗ đọc DOLAR thì bạn định sửa S mấy???



Sửa lại 1 chút thì nó lại đọc đúng thầy ạ!Bạn thử nhập vào B1: 1234567891234 đi
Test thử số thầy Siwtom đưa nó đọc kết quả sai bét.
Sửa lại 1 chút thì nó lại đọc đúng thầy ạ!



Nếu dữ liệu chỉ như File đính kèm thì chỉ cần đơn giản như sau:Mình thấy nó đọc vẫn bình thường mà
Nhân tiện nhờ bạn chuot0106 giúp mình file về hàm VLOOKUP này với nhé. Thank bạn nhiều!
Nếu dữ liệu chỉ như File đính kèm thì chỉ cần đơn giản như sau:



Bạn xem thử File đính kèm!Mình chuyển B2 thành Nguyễn Văn 1 thì không được bạn à? (Mũi tên quay xuống bạn nhé!)
Công thức này mình làm dựa theo dữ liệu bạn đưa lên thôi, nếu có thêm nhiều dữ liệu thì công thức không đúng nữa đâu. Bạn đưa dữ liệu thật lên đi tôi làm giúp cho.Bạn xem thử File đính kèm!



Hôm nọ bảo giúp bạn mà mình bận quá! Bạn xem thử, có gì hồi âm lại ngay nhé!Bạn chuot0106 và các bạn giúp mình với!
thử công thức này xem saoMẫu của mình cũng tương tự như file mình gửi nhưng Sheet2 số lượng người nhiều hơn (cũng như file trên thôi, mình đã bổ xung thêm nhiều dữ liệu hơn), mình gửi lại file bạn làm giúp mình nhé. Cám ơn rất nhiều!
=IF($B3=0,0,IF(OR(OFFSET(Sheet2!$B$1,MATCH($B$2,Sheet2!$A$2:$A$500,0)+ROW(1:1)-1,-1,,)=0,OFFSET(Sheet2!$B$1,MATCH($B$2,Sheet2!$A$2:$A$500,0)+ROW(1:1)-1,-1,,)=$B$2),OFFSET(Sheet2!$B$1,MATCH($B$2,Sheet2!$A$2:$A$500,0)+ROW(1:1)-1,,,),0))
thử công thức này xem sao
Mã:=IF($B3=0,0,IF(OR(OFFSET(Sheet2!$B$1,MATCH($B$2,Sheet2!$A$2:$A$500,0)+ROW(1:1)-1,-1,,)=0,OFFSET(Sheet2!$B$1,MATCH($B$2,Sheet2!$A$2:$A$500,0)+ROW(1:1)-1,-1,,)=$B$2),OFFSET(Sheet2!$B$1,MATCH($B$2,Sheet2!$A$2:$A$500,0)+ROW(1:1)-1,,,),0))
- Mình không được học hành gì cả, chỉ học lỏm trên các diễn đàn thôi, nhưng cũng thấy khá hữu ích cho công việc) Hôm nọ bảo giúp bạn mà mình bận quá! Bạn xem thử, có gì hồi âm lại ngay nhé!
Bạn xem thử file này:Xin lỗi vì hôm qua mình bận việc không hồi âm ngay cho bạn được - Bạn có công thức nào mà không cần phải thêm các cột ẩn không? Mình gửi lại file thực bạn làm giúp mình nhé! Thân!
Bạn xem thử file này:
