Đọc ngày tháng năm thành chữ

  • Thread starter tuankq
  • Ngày gửi
T

tuankq

Thành viên thân thiết
27/4/05
245
2
0
Hanoi, Vietnam
#1
Các bro làm ơn giúp đỡ tôi vụ này (chắc là đơn giản, ko khó):
Tôi muốn chuyển một ô ngày tháng năm dạng: dd/mm/yy hoặc dd/mm/yyyy (vd: 28/9/05 hoặc 28/9/2005) sang dạng chữ như sau: ngày dd tháng mm năm yyyy (vd: ngày 28 tháng 09 năm 2005).
Các bro sành về Excel và VBA làm ơn chỉ điểm giúp.
Chân thành cảm ơn.
 
T

tuankq

Thành viên thân thiết
27/4/05
245
2
0
Hanoi, Vietnam
#3
tranvanhung nói:
You xem thử file này nha. Không biết có đúng ý không.

Đúng ý tôi rùi, rất đơn giản vậy mà ko nghĩ ra.
Cảm ơn bro nhiều.
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#4
Bạn vào Format / Cells (hoặc nhấn Ctrl+1).

Chọn thẻ Number, sau đó vào phần Custom.

Trong ô Type, bạn gõ "ngày" dd "tháng" mm "năm" yyyy

Thế là xong. Bạn thử đi nhé.
 
N

NgânGiang

Cố lên! Cố lên...
10/5/05
202
0
0
16
Trong Mây mù
www.baominh.com.vn
#6
Nếu định dạng ngay tại chỗ thì làm theo kiểu của 2 bạn workman và caophong. Nhưng cách này có rủi ro là: Khi file gửi cho người khác sử dụng, họ có thể xóa bỏ bớt một số định dạng custom => khi ấy định dạng tạo thêm của bạn bị mất; dữ liệu trở về dạng General và hiển thị dưới dạng con số.
Cách của bạn tranvanhung có nhược điểm là phải ghi dữ liệu ở 1 cell mới.
Tùy mục đích sử dụng bạn có thể chọn cách phù hợp.
Với các bảng biểu (Báo cáo, phiếu thu chi, Ủy nhiệm chi ...) cần in ngày hiện tại ở cuối bảng thì bạn có thể vận dụng cách của tranvanhung và nhập vào ô ngày như sau:
="Ngày "&DAY(TODAY())&" Tháng "&MONTH(TODAY())&" Năm "&YEAR(TODAY())
 
S

SA_DQ

Thành viên thân thiết
29/6/05
433
38
28
61
HCM city
#7
Đa loại đây, xin biếu xài không?

Bạn có thể tạo 1 hàm đa năng tự tạo như sau:
Function NgayVN(So as Integer, Optional Dat as Date ) as String
Dim Chu as String
If IsDate(Dat)= 0 then Dat=Date()
Chu = Right("0" & CStr(day(Dat)), 2) & " tháng " & Right("0" & CStr(Month(Dat)), 2) & " năm " & CStr(Year(Dat)) & "."

Select case So
case 1 'Dùng cuối bảng BC
NgayVN="Kiến an, ngày " & Chu
Case 2 'Dùng để viết thư & lập biên bản. . .
NgayVN = "Hôm nay ngày " & Chu
case ...
. . . . . . . . . . . . .
Case Else
NgayVN="Tào lao!"
End Select
End Function
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#8
Bác SA DQ ơi, bác rộng rãi quá nhỉ. Toàn biếu xài không há. Bửa nào gặp nhau cái nhỉ. Hy vọng bác tiếp tục "biếu" bọn mù ... VBA chúng tôi nhiều thứ miễn phí nữa.

Đã giúp thì giúp cho trót luôn. Bác biến ý tưởng của bác thành hàm thật luôn đi (tức là thêm cái mấy cái Chr$ để diễn Unicode ấy mà) :)
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#9
'=======Hàm cho ra thứ mấy trong Tuần
Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = "Chủ Nhật"
Thu(2) = "Thứ hai"
Thu(3) = "Thứ ba"
Thu(4) = "Thứ tư­"
Thu(5) = "Thứ năm"
Thu(6) = "Thứ sáu"
Thu(7) = "Thứ bảy"

Thutrongtuan = Thu(Weekday(bDate))
End Function

'=======Hàm cho một tháng có bao nhiêu ngày
Function Ngaycuathang(ByVal bDate As Date) As Byte
Dim Namnhuan As Boolean
Dim NGAY As Byte, Thang As Byte
Namnhuan = ((Year(bDate) / 4 - Int(Year(bDate) / 4)) = 0)
MsgBox Namnhuan
Thang = Month(bDate)
If Thang = 4 Or Thang = 6 Or Thang = 9 Or Thang = 11 Then
NGAY = 30
ElseIf Thang = 2 Then
If Namnhuan Then
NGAY = 29
Else
NGAY = 28
End If
Else
NGAY = 31
End If
Ngaycuathang = NGAY
End Function

'=======Hàm cho ngày cuối tháng (dd/mm/yyyy)
Function NgayCuoiThang(ByVal bDate As Date) As Date
Dim NGAY As Byte

NGAY = Day(bDate)

NgayCuoiThang = bDate + (Ngaycuathang(bDate) - NGAY)

End Function

'=======Hàm cho một chuỗi "Ngày xx tháng xx nam xxxx"
Function NgayThangNam(ByVal bDate As Date) As String
Dim NGAY As Byte, Thang As Byte
Dim Nam As Integer
NGAY = Day(bDate)
Thang = Month(bDate)
Nam = Year(bDate)
NgayThangNam = "Ngày " & NGAY & " tháng " & Thang & " năm " & Nam
End Function

'=======Hàm cho một chuỗi "Ngày xx tháng xx nam xxxx" cuối tháng
Function NgayCuoiThangSTR(ByVal bDate As Date) As String
NgayCuoiThangSTR = NgayThangNam(NgayCuoiThang(bDate))
End Function

'=======Hàm cho một chuỗi "Thứ - Ngày xx tháng xx nam xxxx"
Function Thu_NTN(ByVal bDate As Date) As String
Thu_NTN = Thutrongtuan(bDate) & " - " & NgayThangNam(bDate)
End Function
'=======Hàm cho một chuỗi "Thứ - Ngày xx tháng xx nam xxxx" cuối tháng
Function Thu_NTN_EOM(ByVal bDate As Date) As String
Dim NgaycuoiTh As Date
NgaycuoiTh = NgayCuoiThang(bDate)
Thu_NTN_EOM = Thu_NTN(NgaycuoiTh)
End Function

'==================================================
'Bạn hãy copy tất cả các hàm trên, tạo một Module trong Excel rồi Paste (CTRL+V) là có thể dùng được cho chính file đó. Nếu muốn dùng cho tất cả các file trên máy thì phải tạo và cất về dạng Add-In (*.xla)
'Khi làm việc trên các Sheet bạn sử dụng các hàm dó theo các tình huống của mình.
Ứng dụng
'A1 = Today()
'B1 = Thutrongtuan(A1)
'B1 = Ngaycuathang(A1)
'B1 = NgayCuoiThang(A1)
'B1 = NgayThangNam(A1)
'B1 = NgayCuoiThangSTR(A1)
'B1 = Thu_NTN(A1)
'B1 = Thu_NTN_EOM(A1)
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#10
Cám ơn bác Tuân nhiều lắm. Đúng là cao thủ có khác. Múa bàn phím một chút là có hàng ngay. Thảo nào mà chú Maika chẳng coi bác như sư phụ.

Tôi mạn phép sửa 1 tý xíu thôi để đảm bảo cái hàm của bác chạy trơn tru trong Excel.

Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = ChrW(67)+ChrW(104)+ChrW(7911)+ChrW(32)+ChrW(78)+ChrW(104)+ChrW(7853)+ChrW(116)
Thu(2) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(104)+ChrW(97)+ChrW(105)
Thu(3) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+ChrW(97)
Thu(4) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(116)+ChrW(432)
Thu(5) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(110)+ChrW(259)+ChrW(109)
Thu(6) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(115)+ChrW(225)+ChrW(117)
Thu(7) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+ChrW(7843)+ChrW(121)

Thutrongtuan = Thu(Weekday(bDate))
End Function
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
36
Nha Trang
#12
Anh Workman ơi! Gọn hơn tí nữa nhé.
-------
Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = "Ch"+ChrW(7911)+" Nh"+ChrW(7853)+"t"
Thu(2) = "Th"+ChrW(7913)+" Hai"
Thu(3) = "Th"+ChrW(7913)+" Ba"
Thu(4) = "Th"+ChrW(7913)+" Tư"+ChrW(432)
Thu(5) = "Th"+ChrW(7913)+" Năm"
Thu(6) = "Th"+ChrW(7913)+" Sáu"
Thu(7) = "Th"+ChrW(7913)+" B" + ChrW(7843)+"y"
Thutrongtuan = Thu(Weekday(bDate))
End Function
--------
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#13
Ờ nhỉ. Cám ơn Bình nhé.

Tôi mắt nhắm mắt mở thế nào mà lại convert ra unicode tất thế không biết.
 
S

SA_DQ

Thành viên thân thiết
29/6/05
433
38
28
61
HCM city
#14
Một cách nữa đây, xin giới thiệu:

Nhờ ô được gán tên, như sau:
Tại một ô nào đó còn trống ta nhập:
="Kiến an, ngày " & Right("0" & day(now), 2) & " tháng " & Right("0" & Month(Now), 2) & " năm " & Year(Now) & "."Sau đó chép vô bộ nhớ; :wall:
Vô menu Insert nhập NgayVN trở thành 1 tên mới; Ở ô Refers ta chép hàm trên vô; Sau đó nhấn nút Add & nút OK
Trở về bảng tính & nhập vô 1 ô nào đó =NgayVN sẽ cho ra kết quả
Nhưng tôi không chắc việc này có lợi hơn Hàm tự tạo hay không? Ai biết cho vài phát kiến hay, anh em ở EFC học hỏi!
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#15
SA_DQ nói:
Nhờ ô được gán tên, như sau:
Tại một ô nào đó còn trống ta nhập:
="Kiến an, ngày " & Right("0" & day(now), 2) & " tháng " & Right("0" & Month(Now), 2) & " năm " & Year(Now) & "."Sau đó chép vô bộ nhớ; :wall:
Vô menu Insert nhập NgayVN trở thành 1 tên mới; Ở ô Refers ta chép hàm trên vô; Sau đó nhấn nút Add & nút OK
Trở về bảng tính & nhập vô 1 ô nào đó =NgayVN sẽ cho ra kết quả
Nhưng tôi không chắc việc này có lợi hơn Hàm tự tạo hay không? Ai biết cho vài phát kiến hay, anh em ở EFC học hỏi!
Hoan hô bác SA DQ có một cách rất hay. Cái này có thể sử dụng được trong add-in. Tôi nghĩ nếu sử dụng name 1 cách sáng tạo, ta còn làm được nhiều trò hơn nữa.

Tuy nhiên hàm VBA có lợi điểm là linh động hơn rất nhiều. Ví dụ không nhất thiết phải thể hiện ngày hiện hành (trong cách làm của bác SA DQ ta chỉ có thể thể hiện ngày hiện hành qua hàm NOW()), mà có thể đọc bất kỳ ngày nào sang chữ.
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#16
workman nói:
Hoan hô bác SA DQ có một cách rất hay. Cái này có thể sử dụng được trong add-in. Tôi nghĩ nếu sử dụng name 1 cách sáng tạo, ta còn làm được nhiều trò hơn nữa.

Tuy nhiên hàm VBA có lợi điểm là linh động hơn rất nhiều. Ví dụ không nhất thiết phải thể hiện ngày hiện hành (trong cách làm của bác SA DQ ta chỉ có thể thể hiện ngày hiện hành qua hàm NOW()), mà có thể đọc bất kỳ ngày nào sang chữ.
Bác SA DQ xem lại box của bác nhé, hình như đầy rồi, tôi không thể nào gửi sms cho bác được.

Nếu dùng NOW()-9 thì ra ngày 2 tháng mười, tức là 9 ngày trước, hình như vẫn không giải quyết được vấn đề ngày tổng quát mà. Bác xem lại hộ tôi với
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
36
Nha Trang
#17
Vâng cách đặt tên hàm cho gọn thì em cũng mới ứng dụng gần đây. Rất tuyệt vời. Không biết có những thủ thuật nào để tạo ra một thư viện các hàm tự tạo trong Excel (dùng cách đặt tên không dùng VBA) nữa không nhỉ.

SA_DQ nói:
="Kiến an, ngày " & Right("0" & day(now), 2) & " tháng " & Right("0" & Month(Now), 2) & " năm " & Year(Now) & "."
Cho em góp thêm một ít ý nhé:
="Kiến an, ngày " & text(now(),"dd") & " tháng " & text(now(),"mm") & " năm " & Year(Now) & "."

Như vậy là gọn hơn được một tí (vài ký tự) :biggrin: :wall:
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#18
Đúng, name có nhiều ứng dụng rất hay. Bạn có thể qui định cả Print Area bằng cách sử dụng Name đấy (tự nghiên cứu nhé!!!)

Tuy nhiên ta vẫn cần VBA đấy. Gặp phải những yêu cầu chuyến số ra chữ thì "Name" bó tay. Lúc này phải nhờ đến VBA thôi.
 
T

thuanckgt

Thành viên sơ cấp
11/3/15
1
0
1
29
#19
'=======Hàm cho ra thứ mấy trong Tuần
Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = "Chủ Nhật"
Thu(2) = "Thứ hai"
Thu(3) = "Thứ ba"
Thu(4) = "Thứ tư"
Thu(5) = "Thứ năm"
Thu(6) = "Thứ sáu"
Thu(7) = "Thứ bảy"

Thutrongtuan = Thu(Weekday(bDate))
End Function

'=======Hàm cho một tháng có bao nhiêu ngày
Function Ngaycuathang(ByVal bDate As Date) As Byte
Dim Namnhuan As Boolean
Dim NGAY As Byte, Thang As Byte
Namnhuan = ((Year(bDate) / 4 - Int(Year(bDate) / 4)) = 0)
MsgBox Namnhuan
Thang = Month(bDate)
If Thang = 4 Or Thang = 6 Or Thang = 9 Or Thang = 11 Then
NGAY = 30
ElseIf Thang = 2 Then
If Namnhuan Then
NGAY = 29
Else
NGAY = 28
End If
Else
NGAY = 31
End If
Ngaycuathang = NGAY
End Function

'=======Hàm cho ngày cuối tháng (dd/mm/yyyy)
Function NgayCuoiThang(ByVal bDate As Date) As Date
Dim NGAY As Byte

NGAY = Day(bDate)

NgayCuoiThang = bDate + (Ngaycuathang(bDate) - NGAY)

End Function

'=======Hàm cho một chuỗi "Ngày xx tháng xx nam xxxx"
Function NgayThangNam(ByVal bDate As Date) As String
Dim NGAY As Byte, Thang As Byte
Dim Nam As Integer
NGAY = Day(bDate)
Thang = Month(bDate)
Nam = Year(bDate)
NgayThangNam = "Ngày " & NGAY & " tháng " & Thang & " năm " & Nam
End Function

'=======Hàm cho một chuỗi "Ngày xx tháng xx nam xxxx" cuối tháng
Function NgayCuoiThangSTR(ByVal bDate As Date) As String
NgayCuoiThangSTR = NgayThangNam(NgayCuoiThang(bDate))
End Function

'=======Hàm cho một chuỗi "Thứ - Ngày xx tháng xx nam xxxx"
Function Thu_NTN(ByVal bDate As Date) As String
Thu_NTN = Thutrongtuan(bDate) & " - " & NgayThangNam(bDate)
End Function
'=======Hàm cho một chuỗi "Thứ - Ngày xx tháng xx nam xxxx" cuối tháng
Function Thu_NTN_EOM(ByVal bDate As Date) As String
Dim NgaycuoiTh As Date
NgaycuoiTh = NgayCuoiThang(bDate)
Thu_NTN_EOM = Thu_NTN(NgaycuoiTh)
End Function

'==================================================
'Bạn hãy copy tất cả các hàm trên, tạo một Module trong Excel rồi Paste (CTRL+V) là có thể dùng được cho chính file đó. Nếu muốn dùng cho tất cả các file trên máy thì phải tạo và cất về dạng Add-In (*.xla)
'Khi làm việc trên các Sheet bạn sử dụng các hàm dó theo các tình huống của mình.
Ứng dụng
'A1 = Today()
'B1 = Thutrongtuan(A1)
'B1 = Ngaycuathang(A1)
'B1 = NgayCuoiThang(A1)
'B1 = NgayThangNam(A1)
'B1 = NgayCuoiThangSTR(A1)
'B1 = Thu_NTN(A1)
'B1 = Thu_NTN_EOM(A1)
em đã tạo file .xla như bác nói nhưng add xong rồi không chạy được, khi nhập 12/12/2012 thì nó không đổi thành " ngày 12 tháng 12 năm 2012" được
bác giúp em luôn file *.xla được không hoặc bác nói cụ thể hơn các bước tạo để em rõ, cảm ơn bác
 

Thành viên trực tuyến

  • Huyền Mia
  • Yen Huynh

Xem nhiều