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

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi tuankq, 28 Tháng chín 2005.

23,240 lượt xem

  1. tuankq

    tuankq Thành viên thân thiết

    Bài viết:
    245
    Đã được thích:
    2
    Nơi ở:
    Hanoi, Vietnam
    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.
     
    #1
  2. tranvanhung

    tranvanhung Gãi ngứa

    Bài viết:
    2,976
    Đã được thích:
    9
    Nơi ở:
    Biên Hoà - Đồng Nai
    You xem thử file này nha. Không biết có đúng ý không.
     

    Các file đính kèm:

    • Vi du.zip
      Kích thước:
      1.5 KB
      Đọc:
      4,000
    #2
  3. tuankq

    tuankq Thành viên thân thiết

    Bài viết:
    245
    Đã được thích:
    2
    Nơi ở:
    Hanoi, Vietnam

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

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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é.
     
    #4
  5. caophong

    caophong Thành viên hoạt động

    Bài viết:
    40
    Đã được thích:
    0
    Nơi ở:
    Nơi ta ở chỉ là nơi đất ở
    Đổi ngày tháng năm

    Bạn cũng có thể sử dụng Định dạng: :atom: Format Cells / Number / Catergory / Custom / Type rồi gõ vào: "Ngày" dd "tháng" mm "năm" yyyy
     
    #5
  6. NgânGiang

    NgânGiang Cố lên! Cố lên...

    Bài viết:
    202
    Đã được thích:
    0
    Nơi ở:
    Trong Mây mù
    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())
     
    #6
  7. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    428
    Đã được thích:
    34
    Nơi ở:
    HCM city
    Đ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
     
    Last edited: 5 Tháng mười 2005
    #7
  8. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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à) :)
     
    #8
  9. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    '=======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)
     
    Last edited: 3 Tháng mười 2005
    #9
  10. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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
     
    #10
  11. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
  12. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    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
    --------
     
    #12
  13. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Ờ 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.
     
    #13
  14. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    428
    Đã được thích:
    34
    Nơi ở:
    HCM city
    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!
     
    Last edited: 10 Tháng mười 2005
    #14
  15. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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ữ.
     
    #15
  16. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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
     
    #16
  17. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    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ỉ.

    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:
     
    #17
  18. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Đú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.
     
    #18
  19. thuanckgt

    thuanckgt Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    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
     
    #19

Chia sẻ trang này