so sánh 2 giá trị Date khác kiểu format

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
453
Được thích
18
em chào mọi người.

Dạ làm thế nào để so sánh được 2 giá trị kiểu Date nhưng khác format ạ.

Em ví dụ:
- Kiểu 1: Dim Date1 as Date. Date1 có kiểu yyyy-MM-dd ( Ví dụ : 2022-01-22 )
- Kiểu 2: Dim Date2 as Date. Date2 có kiểu MM/dd/yyyy ( Ví dụ: 12/30/2021 )

Dạ làm thế nào so sánh được xem Date2 lơn hơn hay nhỏ hơn Date1 không ạ

Em xin cảm ơn!
 
em chào mọi người.

Dạ làm thế nào để so sánh được 2 giá trị kiểu Date nhưng khác format ạ.

Em ví dụ:
- Kiểu 1: Dim Date1 as Date. Date1 có kiểu yyyy-MM-dd ( Ví dụ : 2022-01-22 )
- Kiểu 2: Dim Date2 as Date. Date2 có kiểu MM/dd/yyyy ( Ví dụ: 12/30/2021 )

Dạ làm thế nào so sánh được xem Date2 lơn hơn hay nhỏ hơn Date1 không ạ

Em xin cảm ơn!
Dùng hàm dateserial lấy giá trị ngày rồi so sánh
 
Upvote 0
Date1 và Date2 khái báo kiểu ngày (As Date) thì chỉ có 1 kiểu là kiểu ngày theo quy ước của VBA. Các thứ mà bạn liệt kê chỉ là định dạng dữ liệu kiểu này hay kiểu khác. Bản chất dữ liệu có phải ngày hay không còn phải xác định lại.
Nếu bản chất dữ liệu là kiểu ngày (so sánh được trên sheet Excel), thì có thể so sánh được bằng VBA, bất kể định dạng kiểu nào.
 
Upvote 0
Dùng hàm dateserial lấy giá trị ngày rồi so sánh

Cùng kiểu dữ liệu thì cứ thế cho chúng phang vào nhau thôi. Đâu cần làm gì nữa.

Cái vấn để của thớt là không điều trị được dữ liệu kiểu Date. Cái này phải vật lộn khá lâu mới túm tóc được nó.
 
Upvote 0
Cùng kiểu dữ liệu thì cứ thế cho chúng phang vào nhau thôi. Đâu cần làm gì nữa.

Cái vấn để của thớt là không điều trị được dữ liệu kiểu Date. Cái này phải vật lộn khá lâu mới túm tóc được nó.
Dạ em có format chung cho 2 thằng về cùng 1 kiểu như này rồi mà so sánh nó vẫn ra sai ạ, hình như nó không so sánh đước đúng ạ

Format(Date1, "MM/dd/yyyy")
Format(Date2, "MM/dd/yyyy")
Bài đã được tự động gộp:

Dùng hàm dateserial lấy giá trị ngày rồi so sánh
Dạ anh thử so sánh giúp em ví dụ trên em gửi xem được không ạ. Em muốn so sánh ngày tháng năm ạ
 
Upvote 0
Bài trên tôi đã nói rằng: Bạn chưa hiểu, chưa nắm được gì về dữ liệu kiểu Date. Cần đọc từ căn bản.
Hình như là format kiểu gì thì kiểu nó chỉ thể hiện ra cho người xem trên excel thôi.Bản chất của nó vẫn là 1 kiểu theo win à anh.
 
Upvote 0
Hình như là format kiểu gì thì kiểu nó chỉ thể hiện ra cho người xem trên excel thôi.Bản chất của nó vẫn là 1 kiểu theo win à anh.

Liên quan dữ liệu kiểu Date rất dài dòng, mình không có thời gian viết được. Lại còn trên bảng tính, trong VBA nữa.

Vấn đề bài #1 của thớt là hỏi lửng lơ, nên không trả lời cụ thể được.
Cần xác định dữ liệu ban đầu là gì, lấy ở đâu, thớt đã làm gì, rồi mới tới khúc so sánh.
 
Upvote 0
Dạ em có format chung cho 2 thằng về cùng 1 kiểu như này rồi mà so sánh nó vẫn ra sai ạ, hình như nó không so sánh đước đúng ạ

Format(Date1, "MM/dd/yyyy")
Format(Date2, "MM/dd/yyyy")
...
Con toán so sánh của bạn ra sao?
Kiểu bạn chọn format như trên, so sánh bằng nhau hay không thì được nhưng không thể so sánh lớn nhỏ.

Lô gic rất rõ: khi so sánh lớn nhỏ, bạn phải so sánh năm đầu tiên, tiếp theo mới đến tháng, và cuối cùng mới đến ngày.

Vả lại, kiểu ngày bên trong VBA là số thực. Bạn có thể so sánh thẳng mà không cần format.
(vì là số thực cho nên nếu có số giây, tích,... thì cần phải FIX chúng. Nhưng nếu chỉ có ngày thì không cần)
 
Upvote 0
Liên quan dữ liệu kiểu Date rất dài dòng, mình không có thời gian viết được. Lại còn trên bảng tính, trong VBA nữa.

Vấn đề bài #1 của thớt là hỏi lửng lơ, nên không trả lời cụ thể được.
Cần xác định dữ liệu ban đầu là gì, lấy ở đâu, thớt đã làm gì, rồi mới tới khúc so sánh.
Dạ em so sánh ngày tức là toàn bộ ngày tháng năm ạ.

Nên em có đưa ra ví dụ đầu năm 2022 và cuối năm 2021 ạ.

Em cũng mắc đoạn này chưa biết so sánh ra làm sao ạ. Dữ liệu Date em lấy từ trong cell value ra và đều định dạng lại chung 1 kiểu là MM/dd/yyyy rồi ạ.
Bài đã được tự động gộp:

Con toán so sánh của bạn ra sao?
Kiểu bạn chọn format như trên, so sánh bằng nhau hay không thì được nhưng không thể so sánh lớn nhỏ.

Lô gic rất rõ: khi so sánh lớn nhỏ, bạn phải so sánh năm đầu tiên, tiếp theo mới đến tháng, và cuối cùng mới đến ngày.

Vả lại, kiểu ngày bên trong VBA là số thực. Bạn có thể so sánh thẳng mà không cần format.
(vì là số thực cho nên nếu có số giây, tích,... thì cần phải FIX chúng. Nhưng nếu chỉ có ngày thì không cần)
Dạ, em muốn so sánh toàn bộ ngày tháng năm ạ.

Cái này em cũng đang mắc, em cứ nghĩ nó mặc định so sánh được lớn nhỏ ( ví dụ 30/12/2021 và 01/01/2022 thì 01/01/2022 > 30/12/2021 )
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ em so sánh ngày tức là toàn bộ ngày tháng năm ạ.

Nên em có đưa ra ví dụ đầu năm 2022 và cuối năm 2021 ạ.

Em cũng mắc đoạn này chưa biết so sánh ra làm sao ạ. Dữ liệu Date em lấy từ trong cell value ra và đều định dạng lại chung 1 kiểu là MM/dd/yyyy rồi ạ.
Bài đã được tự động gộp:


Dạ, em muốn so sánh toàn bộ ngày tháng năm ạ.

Cái này em cũng đang mắc, em cứ nghĩ nó mặc định so sánh được lớn nhỏ ( ví dụ 30/12/2021 và 01/01/2022 thì 01/01/2022 > 30/12/2021 )
Giờ không quan tâm định dạng Format nữa.Bạn coi nó là chuỗi string hết đi.Rồi tách nó ra theo ngày tháng năm rồi dùng hàm.DateSerial chuyển về dạng số rồi so sánh.
 
Upvote 0
Giờ không quan tâm định dạng Format nữa.Bạn coi nó là chuỗi string hết đi.Rồi tách nó ra theo ngày tháng năm rồi dùng hàm.DateSerial chuyển về dạng số rồi so sánh.
Vâng nhưng có cách nào để so sánh nhanh nhất thay vì phải so sánh năm, rồi nếu năm bằng nhau thì phải so sánh tháng, sau đó mới lại so sánh đến ngày.

Ví dụ em muốn so sánh 30/12/2021 và 01/01/2022 ạ.

Em xin cảm ơn!
 
Upvote 0
. Dữ liệu Date em lấy từ trong cell

Mệt quá. Úp cái file lên và mô tả cần làm gì, kết quả cuối cùng, chứ đừng rườm rà bài #1 làm gì.
Quanh đi quẩn lại vẫn là vướng ở cái trình bày vấn đề. Không qua nổi vòng gửi xe.

Nếu dữ liệu trên bảng tính đúng chuẩn Date thì trong VBA cứ thế phang cho nhau thôi.
Cell1.value = Cell2.value

Nếu so sánh ngày, không tính phần lẻ giờ phút giây... thì
Dim dDate1 as long, dDate2 as long
dDate1 =cell1.value2
dDate2 = cell2.value2

rồi phang 2 thằng với nhau: dDate1 = dDate2
 
Upvote 0
Mệt quá. Úp cái file lên và mô tả cần làm gì, kết quả cuối cùng, chứ đừng rườm rà bài #1 làm gì.
Quanh đi quẩn lại vẫn là vướng ở cái trình bày vấn đề. Không qua nổi vòng gửi xe.

Nếu dữ liệu trên bảng tính đúng chuẩn Date thì trong VBA cứ thế phang cho nhau thôi.
Cell1.value = Cell2.value

Nếu so sánh ngày, không tính phần lẻ giờ phút giây... thì
Dim dDate1 as long, dDate2 as long
dDate1 =cell1.value2
dDate2 = cell2.value2

rồi phang 2 thằng với nhau: dDate1 = dDate2
Dạ em chỉ cần đoạn code so sánh được dữ liệu ( dạng Date ) em lấy từ cell thôi ạ

Ví dụ e cần so sánh Date1 "30/12/2021" và Date2 "01/01/2022", kết quả đưa ra là Date2 > Date1 thôi ạ.
 
Upvote 0
Dạ em chỉ cần đoạn code so sánh được dữ liệu ( dạng Date ) em lấy từ cell thôi ạ

Ví dụ e cần so sánh Date1 "30/12/2021" và Date2 "01/01/2022", kết quả đưa ra là Date2 > Date1 thôi ạ.
Bạn không hiểu câu trả lời của mọi người thì làm ví dụ đưa lên đây.Chứ tôi thấy bạn sao sao ấy.Nếu như ví dụ trên thì bạn dùng If Clng(date1) > clng(date2) then.
 
Upvote 0
Bình thường thì so sánh 2 ngày, cứ so sánh thẳng. Ngày chứa trong
Format khi người ta muốn so sánh theo dạng chuỗi. Và như tôi nói ở bài #9, muốn so sánh dạng chuỗi thì phải đặt năm trước:

1668156215020.png

Trong ví dụ trên, dòng thứ 4 sẽ so sánh "01/01/2022" với "31/12/2021". Vì khi so chuỗi thì "31" lớn hơn "01" cho nên kết quả là False.
Dòng thứ 6 so sánh "20220101" với "20213112". Vì "2022" lớn hơn "2021" cho nên kết quả là True.

Bạn cần học lại cho kỹ về các kiểu dữ liệu trong VBA.
 
Upvote 0
Còn chưa biết khai báo biến thì vài mùa quýt xanh cũng không xong.

Chưa kể lời nói bất nhất, khó làm việc nhóm.


1668156520469.png
 
Upvote 0
Bình thường thì so sánh 2 ngày, cứ so sánh thẳng. Ngày chứa trong
Format khi người ta muốn so sánh theo dạng chuỗi. Và như tôi nói ở bài #9, muốn so sánh dạng chuỗi thì phải đặt năm trước:

View attachment 283211

Trong ví dụ trên, dòng thứ 4 sẽ so sánh "01/01/2022" với "31/12/2021". Vì khi so chuỗi thì "31" lớn hơn "01" cho nên kết quả là False.
Dòng thứ 6 so sánh "20220101" với "20213112". Vì "2022" lớn hơn "2021" cho nên kết quả là True.

Bạn cần học lại cho kỹ về các kiểu dữ liệu trong VBA.
Em hiểu rồi ạ. Em cảm ơn anh nhiều nhé ^^
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom