chuyển định dạng tháng-ngày sang ngày tháng trong vba

Liên hệ QC

võ thành trung

Thành viên mới
Tham gia
24/3/20
Bài viết
31
Được thích
2
Gửi cả nhà,

em gặp trường hợp như sau:
em có file đính kèm và tiến hành record filter cột A ngày 02-oct-2020 -> vba record Sub Macro2() thì lưu là:
ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Operator:= xlFilterValues, Criteria2:=Array(2, "10/2/2020") --> record là tháng - ngày.
mọi người có biết cách nào chuyển chế độ vba lưu là ngày - tháng? nghĩa là lưu thành: ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Operator:= xlFilterValues, Criteria2:=Array(2, "2/10/2020")
em đang quen nhập trên excel là ngày - tháng và không muốn thay đổi định dạng excel.

en cám ơn
Bài đã được tự động gộp:

Gửi cả nhà,

em gặp trường hợp như sau:
em có file đính kèm và tiến hành record filter cột A ngày 02-oct-2020 -> vba record Sub Macro2() thì lưu là:
ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Operator:= xlFilterValues, Criteria2:=Array(2, "10/2/2020") --> record là tháng - ngày.
mọi người có biết cách nào chuyển chế độ vba lưu là ngày - tháng? nghĩa là lưu thành: ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Operator:= xlFilterValues, Criteria2:=Array(2, "2/10/2020")
em đang quen nhập trên excel là ngày - tháng và không muốn thay đổi định dạng excel.

en cám ơn
mục đích: code sub macro(1) em muốn filter theo ngày tại ô E1. nếu nhập ô E1 là tháng - ngày -> code chạy ok nhưng
nếu nhập ngày - tháng -> code báo lỗi.
mọi người xem giúp em
 

File đính kèm

  • Book1.xlsm
    13.6 KB · Đọc: 6
Lần chỉnh sửa cuối:
Bạn chuyển định dạng hệ thống sang dd/mm/yyyy
 
Upvote 0
mình không muốn chuyển trong excel mà muốn chuyển trong vba
bạn có cách nào không?

mục đích: code sub macro(1) em muốn filter theo ngày tại ô E1. nếu nhập ô E1 là tháng - ngày -> code chạy ok nhưng
nếu nhập ngày - tháng -> code báo lỗi.
Theo tôi biết thì VBA tự động nhận định dạng mặc định theo định dạng của hệ thống. Vậy nên nếu bạn muốn nhập ngày - tháng mà không lỗi và VBA nhận định dạng là ngày - tháng thì chỉnh định dạng hệ thống thành dd/mm/yyyy. Không có câu trả lời nào khác cho bạn.
 
Upvote 0
Thay đổi thiết lập trong CP không thể là con đường đúng đắn. Con người sống trong thời đại hiện nay không phải là "một mình, một máy, một hòn đảo". Thế gửi cho đồng nghiệp, đối tác thì họ cũng phải bắt buộc thay đổi thiết lập CP theo như mình để code chạy không có lỗi và cho kết quả đúng như mong đợi?

Bạn thử test code sau.

Mã:
Sub test()
''    1. Loc theo ngay - gia tri lay tu cell E1 tren sheet
'    ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Operator:= _
'        xlFilterValues, Criteria2:=Array(2, Format(Cells(1, "E").Value, "mm\/d\/yyyy"))
''    2. Loc theo ngay - gia tri tu tao tu ngay, thang va nam
    ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(2, Format(DateSerial(2020, 10, 2), "mm\/d\/yyyy"))
End Sub

Tại sao trong Format phải là "\/"? Bởi nếu chỉ là "/" và trong CP bạn có thiết lập "ngày.tháng.năm" thì Format trả về chuỗi "10.2.2020" do nó coi "/" là ký tự đại diện và thay bằng "ký tự ngăn cách" lấy từ CP - trong trường hợp của ta đó là ký tự ".". Khi ta dùng "\/" thì có nghĩa là phải có đúng ký tự "/". Lúc này Format trả về "10/2/2020".
--------
Hãy xem thêm bài #8
 
Lần chỉnh sửa cuối:
Upvote 0
Khi ví dụ số liệu Ngày-tháng-năm chủ bài đăng nên lấy ngày lớn hơn 12;
10/02 hay 2/10 không có nghĩa lắm để làm ví dụ thao tác.

Thân chào!
 
Upvote 0
Khi ví dụ số liệu Ngày-tháng-năm chủ bài đăng nên lấy ngày lớn hơn 12;
10/02 hay 2/10 không có nghĩa lắm để làm ví dụ thao tác.
Thì toàn bộ dữ liệu của người ta có ngày < 13 mà. Tại sao lại phải lấy vd. ngày > 12?

Mô tả sao cho người khác hiểu thôi? Người ta có toàn những ngày < 13 thì sao người ta lại phải lấy vd. > 12? Ngày 2 tháng 10 năm 2020 rõ ràng là có. Nhưng nếu nhập "2/10/200 thì họ thấy kết quả lọc sai. Họ hỏi cách khắc phục thôi.
 
Upvote 0
Bạn cũng có thể thử 2 kiểu nữa
Mã:
ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Criteria1:=Range("E1").Text, Operator:=xlAnd

hoặc

ActiveSheet.Range("$A$1:$B$12").AutoFilter Field:=1, Criteria1:=Format(Range("E1").Value, General), Operator:=xlAnd
 
Upvote 0
Chưa thấy quan tài, chưa đổ lệ!
 
Upvote 0
Lấy ví dụ chẳng qua là để cho người khác hiểu ý thôi. Không phải vì tôi lấy ví dụ chưa chuẩn mà sẽ có ngày tôi đổ lệ. Đổ lệ hay không là do công thức hay code tôi viết có chuẩn không. Còn ví dụ là để cho người khác hiểu ý. Nếu ví dụ không sát thì người khác không hiểu ý, thế thôi. Hai chuyện hoàn toàn khác nhau.

Dữ liệu hiện thời của người ta rõ ràng chỉ có ngày < 13, vậy sao lại phải lấy vd. ngày > 12? Ngoài ra, người ta mô tả vấn đề đã rõ ràng, ai cũng có thể hiểu vấn đề nằm ở đâu, vậy thì đeo bám chuyện lấy ví dụ để làm gì?

Giả sử trong dữ liệu có ngày tháng 15.10.2020. Nếu người ta lấy vd. "15/10/2020" thì code cũng đâu có chạy đúng ý? Vì vấn đề không nằm ở chỗ lấy ví dụ. Lấy ví dụ chỉ để người khác hiểu vấn đề chứ không phải để thỏa mãn "sự nhõng nhẽo" của code.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom