Chuyển đổi ngày tháng sang chữ (1 người xem)

Liên hệ QC

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

nam739478

Thành viên mới
Tham gia
26/9/09
Bài viết
38
Được thích
2
tôi muốn đổi dạng ngày tháng sang chữ thì làm như thế nào?
VD tại A1 có dang 23/11/2012 sang A3 đổi thành "ngày hai mươi ba tháng mười một năm hai nghìn mười hai"
mong các Pro giup đỡ
mong sớm nhận được câu trả lời
 
tôi muốn đổi dạng ngày tháng sang chữ thì làm như thế nào?
VD tại A1 có dang 23/11/2012 sang A3 đổi thành "ngày hai mươi ba tháng mười một năm hai nghìn mười hai"
mong các Pro giup đỡ
mong sớm nhận được câu trả lời

Em chỉ chuyển được ra dạng là ngày 23 tháng 11 năm 2012 thôi, chứ ra chữ xin nhờ các Thầy chỉ giúp em huhu.file em làm đây ạ.+-+-+-+
 

File đính kèm

Upvote 0
Em chỉ chuyển được ra dạng là ngày 23 tháng 11 năm 2012 thôi, chứ ra chữ xin nhờ các Thầy chỉ giúp em huhu.file em làm đây ạ.+-+-+-+
1/ Cái này chỉ lập trình thôi bạn, giống như đọc số thành chữ
2/ Muốn làm bằng công thức thì fài lập rất nhiều Name
 
Upvote 0
Hàm này hơi dài nhưng cũng dùng được:
Attribute VB_Name = "HTNgay_Function"
'Option Explicit
Function HTNgay(ByVal Vdate As Date) As String
On Error Resume Next
Vdate = Format(Vdate, "dd/mm/yyyy")
If IsDate(Vdate) = False Then HTNgay = "B" & ChrW$(7841) & "n ph" & ChrW$(7843) & "i ch" & ChrW$(7885) & "n l" & ChrW$(224) & " ngày! -By: Htrung.aof@gmail.com": Exit Function
Hang = Array("None", "ng" & ChrW$(224) & "n", "tr" & ChrW$(259) & "m", "m" & ChrW$(432) & ChrW$(417) & "i", Space(0))
Dem = Array("khô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")
'Doc so ngày
VNgay = Left(Vdate, 2)
If Val(VNgay) < 10 Then
DNgay = "Ngày" & Space(1) & "m" & ChrW$(7891) & "ng" & Space(1) & Dem(Val(VNgay))
ElseIf Val(VNgay) = 10 Then
DNgay = "Ngày" & Space(1) & "m" & ChrW$(7891) & "ng" & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i"
ElseIf Val(VNgay) > 10 And Val(VNgay) < 20 And Val(VNgay) <> 15 Then
DNgay = "Ngày" & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i" & Space(1) & Dem(Val(Right(VNgay, 1)))
ElseIf Val(VNgay) > 10 And Val(VNgay) < 20 And Val(VNgay) = 15 Then
DNgay = "Ngày" & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i" & Space(1) & "l" & ChrW$(259) & "m"
ElseIf Val(VNgay) >= 20 And Val(Right(VNgay, 1)) = 0 Then
DNgay = "Ngày" & Space(1) & Dem(Val(Left(VNgay, 1))) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i"
ElseIf Val(VNgay) >= 20 And Val(Right(VNgay, 1)) = 1 Then
DNgay = "Ngày" & Space(1) & Dem(Val(Left(VNgay, 1))) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i" & Space(1) & "m" & ChrW$(7889) & "t"
ElseIf Val(VNgay) >= 20 And Val(Right(VNgay, 1)) <> 0 And Val(Right(VNgay, 1)) <> 1 And Val(Right(VNgay, 1)) <> 5 Then
DNgay = "Ngày" & Space(1) & Dem(Val(Left(VNgay, 1))) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i" & Space(1) & Dem(Val(Right(VNgay, 1)))
ElseIf Val(VNgay) = 25 Then
DNgay = "Ngày" & Space(1) & "hai" & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i" & Space(1) & "l" & ChrW$(259) & "m"
End If
'Doc so cua tháng
vthang = Val(Mid(Vdate, 4, 2))
If vthang = 12 Then
Dthang = "tháng" & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i" & Space(1) & "hai"
ElseIf vthang = 11 Then
Dthang = "tháng" & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i" & Space(1) & "m" & ChrW$(7897) & "t"
ElseIf vthang = 10 Then
Dthang = "tháng" & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i"
Else
Dthang = "tháng" & Space(1) & Dem(vthang)
End If
'Doc so cua nam
Vnam = Right(Vdate, 4)
N1 = Val(Mid(Vnam, 1, 1))
N2 = Mid(Vnam, 2, 3)
DNgan = Dem(N1) & Space(1) & "ngàn"
If Val(N2) = 0 Then
Dtram = Space(0)
Else
N11 = Mid(N2, 1, 1)
N22 = Mid(N2, 2, 1)
N33 = Mid(N2, 3, 1)
For i = 2 To 3
Nhom = Val(Mid(N2, i, 1))
Dtram = Dem(N11) & Space(0)
Select Case i
Case 2 And N22 = 0 And N33 = 0
le = Hang(2)
Case 2 And N22 = 0
le = Hang(2) & Space(1) & "l" & ChrW$(7867) & Space(1) & Dem(N33)
Case 2 And N22 = 1 And N33 = 0
le = Hang(2) & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i"
Case 2 And N22 = 1 And N33 = 5
le = Hang(2) & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i" & Space(1) & "l" & ChrW$(259) & "m"
Case 2 And N22 = 1 And N33 <> 0 And N33 <> 5
le = Hang(2) & Space(1) & "m" & ChrW$(432) & ChrW$(7901) & "i" & Space(1) & Dem(N33)
Case 2 And N22 >= 2 And N33 = 0
le = Hang(2) & Space(1) & Dem(N22) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i"
Case 2 And N22 >= 2 And N33 = 1
le = Hang(2) & Space(1) & Dem(N22) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i" & Space(1) & "m" & ChrW$(7889) & "t"
Case 2 And N22 >= 2 And N33 = 5
le = Hang(2) & Space(1) & Dem(N22) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i" & Space(1) & "l" & ChrW$(259) & "m"
Case 2 And N22 >= 2 And N33 <> 0 And N33 <> 1 And N33 <> 5
le = Hang(2) & Space(1) & Dem(N22) & Space(1) & "m" & ChrW$(432) & ChrW$(417) & "i" & Space(1) & Dem(N33)
End Select
Next
End If
KetQua = KetQua & Space(1) & DNgay & "," & Space(1) & Dthang & "," & Space(1) & "n" & ChrW$(259) & "m" & Space(1) & DNgan & Space(1) & Dtram & Space(1) & le & " '/."
HTNgay = UCase(Left(Trim(KetQua), 1)) & Mid(Trim(KetQua), 2)
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
trời, vba à Anh??? có thể dùng hàm được không Anh nhỉ?+-+-+-+, mà em có đọc qua một số bài trên diễn đàn có thể dùng định dạng, nhưng không tài nào làm được như yêu cầu của đề bài, ra toàn dạng text thôi à huhu
 
Upvote 0
trời, vba à Anh??? có thể dùng hàm được không Anh nhỉ?+-+-+-+, mà em có đọc qua một số bài trên diễn đàn có thể dùng định dạng, nhưng không tài nào làm được như yêu cầu của đề bài, ra toàn dạng text thôi à huhu

Hướng dẫn:
- Bấm Start\Run, gõ lệnh Notepad vào rồi Enter (để mở chương trình Notepad)
- Copy nguyên "đám rừng" trên cho vào cừa số Notepad
- Save file thành tên tùy ý
- Khởi động Excel
- Bấm Alt + F11 vào cửa sổ lập trình
- Vào menu File, chọn lệnh Import file...
- Trong cửa sổ Import file, khung Type of file chọn All Files (*.*)
- Duyệt đến file text đã lưu khi nãy rồi bấm Open ---> Sẽ thấy 1 module xuất hiện với code là "đám rừng" kia
- Bấm Alt + Q để trở về bảng tính
- Gõ ngày tháng gì đó vào A1
- Cell B1, gõ công thức =HTNgay(A1)
Xong!
Tuy nhiên, với ngày tháng có vài số đọc không giống như đọc số. Ví dụ:
4/4/2010 thì phải đọc là ngày bốn tháng tư năm hai ngàn không trăm mười chứ không phải là ngày bốn tháng bốn năm hai ngàn không trăm mười đâu
 
Upvote 0
Hướng dẫn:
- Bấm Start\Run, gõ lệnh Notepad vào rồi Enter (để mở chương trình Notepad)
- Copy nguyên "đám rừng" trên cho vào cừa số Notepad
- Save file thành tên tùy ý
- Khởi động Excel
- Bấm Alt + F11 vào cửa sổ lập trình
- Vào menu File, chọn lệnh Import file...
- Trong cửa sổ Import file, khung Type of file chọn All Files (*.*)
- Duyệt đến file text đã lưu khi nãy rồi bấm Open ---> Sẽ thấy 1 module xuất hiện với code là "đám rừng" kia
- Bấm Alt + Q để trở về bảng tính
- Gõ ngày tháng gì đó vào A1
- Cell B1, gõ công thức =HTNgay(A1)
Xong!
Tuy nhiên, với ngày tháng có vài số đọc không giống như đọc số. Ví dụ:
4/4/2010 thì phải đọc là ngày bốn tháng tư năm hai ngàn không trăm mười chứ không phải là ngày bốn tháng bốn năm hai ngàn không trăm mười đâu

Thưa Thầy!em đã làm cho nó chạy thôi, nhưng em xin phép hỏi thêm tí nữa dòng chữ ra thế này ạ (Ngày mười một, , năm hai ngàn không trăm mười hai '/.)em không hiểu gì nhưng làm theo hướng dẫn thôi.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0

File đính kèm

Upvote 0
Thưa Thầy!em đã làm cho nó chạy thôi, nhưng em xin phép hỏi thêm tí nữa dòng chữ ra thế này ạ (Ngày mười một, , năm hai ngàn không trăm mười hai '/.)em không hiểu gì nhưng làm theo hướng dẫn thôi.
Cô xem file ví dụ ngày tháng năm trong đó chưa
Làm gì có "Ngày mười một, ," không có khoảng trắng giữa hai dấu , đâuChú ý ngày tháng định dạng dd/mm/yyyy
 
Upvote 0
To Vanle, em đã hiểu lý do sao em sai vì do em định dạng trong control panel!
To Anh "dongducnhiem", em làm cũng ra như trong file đây ạ.em không hiểu code viết gì, lệnh ra sao , em chỉ làm theo hướng dẫn của Thầy ndu thấy nó ra kết quả đúng...
 

File đính kèm

Upvote 0
To Vanle, em đã hiểu lý do sao em sai vì do em định dạng trong control panel!
To Anh "dongducnhiem", em làm cũng ra như trong file đây ạ.em không hiểu code viết gì, lệnh ra sao , em chỉ làm theo hướng dẫn của Thầy ndu thấy nó ra kết quả đúng...

Cái này tôi cũng nghĩ nó liên quan đến Control Panel
Trong mục Shot date format của tôi là :dd/MM/yy
 
Upvote 0
Cái này tôi cũng nghĩ nó liên quan đến Control Panel
Trong mục Shot date format của tôi là :dd/MM/yy
Vậy thì bạn thử chỉnh lại Short date là dd/mm/yyyy rồi tắt Excel và mở lại file của mình, đánh lại ngày và công thức/Enter xem ra kết quả như thế nào?
Máy tính của mình bất cứ lúc nào Ghost Win xong thì đều chỉnh luôn Short date như trên. Nên chắc không bị lỗi như bạn
 
Upvote 0
Vậy thì bạn thử chỉnh lại Short date là dd/mm/yyyy rồi tắt Excel và mở lại file của mình, đánh lại ngày và công thức/Enter xem ra kết quả như thế nào?
Máy tính của mình bất cứ lúc nào Ghost Win xong thì đều chỉnh luôn Short date như trên. Nên chắc không bị lỗi như bạn
Cái này chỉ hỏi lý do vì sao thôi, chứ tôi kg sử dụng addins này!
 
Upvote 0
Cũng thử vọc vạch tí, cái này cũng tùy biến từ hàm đọc số trên GPE, tùy biến 1 chút, fix tháng 4 (mới tập VBA nên code củ chuối)
=docngay()
 

File đính kèm

Upvote 0
tôi làm như thế này
ví dụ A1 = 26/11/2012
tại B1 ="Ngay "&vnd(DAY(A1))&" thang "&vnd(MONTH(A1))&" nam "&vnd(YEAR(A1))
kết quả cho: (ngày Hai mươi sáu tháng Mười một năm Hai ngàn, không trăm mười hai)
vậy làm sao tôi bỏ được dấu phẩy (,) ở chỗ năm hai ngàn không trăm mười hai vậy các Pro ơi
mong câu trả lời
 
Upvote 0
tôi làm như thế này
ví dụ A1 = 26/11/2012
tại B1 ="Ngay "&vnd(DAY(A1))&" thang "&vnd(MONTH(A1))&" nam "&vnd(YEAR(A1))
kết quả cho: (ngày Hai mươi sáu tháng Mười một năm Hai ngàn, không trăm mười hai)
vậy làm sao tôi bỏ được dấu phẩy (,) ở chỗ năm hai ngàn không trăm mười hai vậy các Pro ơi
mong câu trả lời
Bạn phải gửi kèm cái add in của hàm vnd() lên kèm thì các anh, em mới biết cách sửa cho bạn chứ!
 
Upvote 0
add in là gì? tui ko biet
chỉ biết là đang dùng VNtools bản 1.1.4
 
Upvote 0
khi ấn Alt + F11 chỉ hiện lên 1 cửa sổ trắng tinh không có chữ gì cả
 
Upvote 0
To Vanle, em đã hiểu lý do sao em sai vì do em định dạng trong control panel!
To Anh "dongducnhiem", em làm cũng ra như trong file đây ạ.em không hiểu code viết gì, lệnh ra sao , em chỉ làm theo hướng dẫn của Thầy ndu thấy nó ra kết quả đúng...

Đây chính là cái sai nghiêm trọng của code (không phải bạn sai)
Đúng ra đã là code thì sẽ không vì setting trong Control Panel mà lại cho kết quả sai được
Nếu là tôi thì tôi làm như sau:
1> Lượm đại 1 code đọc số nào đó cảm thấy vừa ý cho vào code
2> Viết thêm 1 code đọc ngày tháng (dựa vào code đọc số đã có)
Ví dụ:
1> Tôi có code đọc số (lượm của bạn huuthang_bd) với cú pháp =DocSo(Number)
2> Giờ tôi viết thêm code đọc ngày tháng như sau:
Mã:
Function SpeakVIEDate(ByVal lDate As Long) As String
  Dim slb1 As String, slb2 As String, slb3 As String
  Dim sDay As String, sMonth As String, sYear As String
  Dim lDay As Long, lMonth As Long, lYear As Long
  
  slb1 = "Ngày "
  slb2 = "Tháng "
  slb3 = "N" & ChrW(259) & "m "
  
  lDay = Day(lDate)
  lMonth = Month(lDate)
  lYear = Year(lDate)
  
  sDay = DocSo(lDay)
  If lMonth = 1 Then
    sMonth = "giêng"
  ElseIf lMonth = 4 Then
    sMonth = "t" & ChrW(432)
  Else
    sMonth = DocSo(lMonth)
  End If
  sYear = DocSo(Year(lDate))
  SpeakVIEDate = slb1 & sDay & ", " & slb2 & sMonth & ", " & slb3 & sYear
End Function
Cú pháp đọc ngày tháng =SpeakVIEDate(A1) với A1 là ngày tháng nào đó
Code này không bị ảnh hưởng bởi setting trong control panel
Các bạn kiểm tra thử nhé (viết đại, chưa kiểm tra hết các trường hợp)
 

File đính kèm

Upvote 0
Đây chính là cái sai nghiêm trọng của code (không phải bạn sai)
Đúng ra đã là code thì sẽ không vì setting trong Control Panel mà lại cho kết quả sai được
Nếu là tôi thì tôi làm như sau:
1> Lượm đại 1 code đọc số nào đó cảm thấy vừa ý cho vào code
2> Viết thêm 1 code đọc ngày tháng (dựa vào code đọc số đã có)
Ví dụ:
1> Tôi có code đọc số (lượm của bạn huuthang_bd) với cú pháp =DocSo(Number)
2> Giờ tôi viết thêm code đọc ngày tháng như sau:
Mã:
Function SpeakVIEDate(ByVal lDate As Long) As String
  Dim slb1 As String, slb2 As String, slb3 As String
  Dim sDay As String, sMonth As String, sYear As String
  Dim lDay As Long, lMonth As Long, lYear As Long
  
  slb1 = "Ngày "
  slb2 = "Tháng "
  slb3 = "N" & ChrW(259) & "m "
  
  lDay = Day(lDate)
  lMonth = Month(lDate)
  lYear = Year(lDate)
  
  sDay = DocSo(lDay)
  If lMonth = 1 Then
    sMonth = "giêng"
  ElseIf lMonth = 4 Then
    sMonth = "t" & ChrW(432)
  Else
    sMonth = DocSo(lMonth)
  End If
  sYear = DocSo(Year(lDate))
  SpeakVIEDate = slb1 & sDay & ", " & slb2 & sMonth & ", " & slb3 & sYear
End Function
Cú pháp đọc ngày tháng =SpeakVIEDate(A1) với A1 là ngày tháng nào đó
Code này không bị ảnh hưởng bởi setting trong control panel
Các bạn kiểm tra thử nhé (viết đại, chưa kiểm tra hết các trường hợp)
1) Code của bác có sửa được "tháng bốn" thành "tháng tư" không a?
Hay bác sửa Code ở bài #6 cho em để sửa được vấn đề trên nhé
 
Upvote 0
Tạm thời OK rồi (em đã thử mấy trường hợp rồi)
Em muốn đổi tên cú pháp hàm là =HTNgay() thì thế nào a?

Bấm Alt + F11 vào code
Bấm Ctrl + H, thay chữ SpeakVIEDate thành HTNgay
Xong!
(Sao mà tôi ghét mấy cái biến, tên hàm, tên Sub tiếng Việt thế không biết ---> Nhìn nó chẳng ra làm sao cả ---> Một mai có thằng Tây nó vào xem, bảo đảm nó sẽ không bao giờ biết HTNgay là cái quỷ gì cả, nhưng nếu thấy chứ SpeakVIEDate, tôi tin nó biết đó là gì liền)
 
Upvote 0
Bấm Alt + F11 vào code
Bấm Ctrl + H, thay chữ SpeakVIEDate thành HTNgay
Xong!
(Sao mà tôi ghét mấy cái biến, tên hàm, tên Sub tiếng Việt thế không biết ---> Nhìn nó chẳng ra làm sao cả ---> Một mai có thằng Tây nó vào xem, bảo đảm nó sẽ không bao giờ biết HTNgay là cái quỷ gì cả, nhưng nếu thấy chứ SpeakVIEDate, tôi tin nó biết đó là gì liền)
Em đổi rồi
Nhưng có mấy khi có "thằng Tây" vào xem mà nhiều người Việt xem mà bác
Trong Code của bác không sử dụng chữ "mồng" cho những ngày nhỏ hơn 10 a?
Có phải do chính tả không cần dùng chữ "mồng" vậy bác
 
Upvote 0
Trong Code của bác không sử dụng chữ "mồng" cho những ngày nhỏ hơn 10 a?
Có phải do chính tả không cần dùng chữ "mồng" vậy bác

Khi tôi còn nhỏ, nghe các ông bà dạy rằng: Dùng "Mồng" (hoặc "Mừng") cho ngày Âm Lịch, còn Dương Lịch thì không dùng
Nếu bạn thích "MỒNG" cứ vào code mà sửa, chẳng hạn là vầy:
PHP:
If lDay <= 10 Then
    sDay = "m" & ChrW(7891) & "ng " & DocSo(lDay)
Else
    sDay = DocSo(lDay)
End If
Nhưng có mấy khi có "thằng Tây" vào xem mà nhiều người Việt xem mà bác
Bạn sai rồi... Bất cứ một trang web nào cũng có ước muốn mang tính TOÀN CẦU ---> Tức ai có nhu cầu đều phải nghĩ đến nó... và tôi nghĩ GPE cũng sẽ không ngoại lệ đâu
 
Lần chỉnh sửa cuối:
Upvote 0
Khi tôi còn nhỏ, nghe các ông bà dạy rằng: Dùng "Mồng" (hoặc "Mừng") cho ngày Âm Lịch, còn Dương Lịch thì không dùng
Nếu bạn thích "MỒNG" cứ vào code mà sửa
Giả sử em muốn thêm chữ "mồng" thì phải thêm Code vào chỗ nào vậy bác?
Vì đây là thêm Code chứ không phải sửa code. hi
 
Upvote 0

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

Back
Top Bottom