So sánh column date với giá trị nhập dạng date

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 Anh/Chị.

Dạ em có file như đính kèm. Từ cột M trở đi sẽ hiển thị các ngày ( là các ngày thứ 2 trong các tháng ạ ).

Em muốn khi mình nhập tay vào 1 ngày bất kỳ thì nó sẽ so sánh với các cột ngày này để giữ lại tuần ( có ngày mà vừa nhập ) và ẩn tất cả các cột ngày khác ạ.

Ví dụ em nhập tay ( vào textbox hoặc 1 cell nào đó ) ngày: 7/9/2022 ( định dạng là M/d/yyyy ), thì nó sẽ so sánh với các cột trong file và giữ lại 2 cột 7/4/2022 và 7/11/2022 ( cột M và N ) vì 7/9/2022 nằm trong tuần từ 7/4/2022 đến 7/11/2022, ngoài ra sẽ hide các cột còn lại đi ạ.

Em Xin cảm ơn ạ!
 

File đính kèm

  • Master Resource.xlsm
    9.7 KB · Đọc: 12
Tạm thời là vầy, mong bạn sẽ chỉnh được theo ý mình:
PHP:
Sub TimCotNgay()
 Dim Dat As Date, J As Integer, Col As Integer
 Dim Rng As Range, sRng As Range
 Dim MyDateFormat As String

 Set Rng = Range([M5], [M5].End(xlToRight))
 Rng.Interior.ColorIndex = 35
 MyDateFormat = Rng.NumberFormat
 Rng.NumberFormat = "MM/DD/yyyy"
 Dat = Format([K2].Value, "MM/DD/yyyy")
 For Each sRng In Rng
    If sRng.Value = Dat Then
        sRng.Interior.ColorIndex = 38
    End If
 Next sRng
 Rng.NumberFormat = MyDateFormat
End Sub
 
Upvote 0
Tạm thời là vầy, mong bạn sẽ chỉnh được theo ý mình:
PHP:
Sub TimCotNgay()
 Dim Dat As Date, J As Integer, Col As Integer
 Dim Rng As Range, sRng As Range
 Dim MyDateFormat As String

 Set Rng = Range([M5], [M5].End(xlToRight))
 Rng.Interior.ColorIndex = 35
 MyDateFormat = Rng.NumberFormat
 Rng.NumberFormat = "MM/DD/yyyy"
 Dat = Format([K2].Value, "MM/DD/yyyy")
 For Each sRng In Rng
    If sRng.Value = Dat Then
        sRng.Interior.ColorIndex = 38
    End If
 Next sRng
 Rng.NumberFormat = MyDateFormat
End Sub
Dạ em cảm ơn ạ.

Em muốn nó so sánh các cột ngày với giá trị ô K2 ( dạng Date ), nó sẽ ẩn đi các cột màu vàng ạ. Vì ngày 7/9/2022 nó nằm trong khoảng 7/4/2022 - 7/11/2022 nên sẽ giữ lại 2 cột đó ạ.
 

File đính kèm

  • Master Resource.xlsm
    18.1 KB · Đọc: 4
Upvote 0
. . . . . Em muốn nó so sánh các cột ngày với giá trị ô K2 ( dạng Date ), nó sẽ ẩn đi các cột màu vàng ạ. Vì ngày 7/9/2022 nó nằm trong khoảng 7/4/2022 - 7/11/2022 nên sẽ giữ lại 2 cột đó ạ.
Vậy ở ô K2 bạn nhập 1 ngày không có trong vùng ô chứa dữ liệu ngày (thứ hai) ư?
Macro trên chỉ thục hiện chuyện tìm 1 ngày thứ hai có trong vùng mà thôi.
 
Upvote 0
Vậy ở ô K2 bạn nhập 1 ngày không có trong vùng ô chứa dữ liệu ngày (thứ hai) ư?
Macro trên chỉ thục hiện chuyện tìm 1 ngày thứ hai có trong vùng mà thôi.
Dạ các cột ngày đó hiện đang hiển thị ngày thứ 2 trong các tháng ạ

Em muốn nhập ngày vào ô K2, nó kiểm tra ngày mà nhập đó thuộc khoảng tuần nào thì sẽ giữ lại các cột đó , còn các cột khác sẽ ẩn đi ạ.

Ví dụ e nhập ngày 7/9/2022... thì nó biết là ngày này trong tuần từ thứ 2 7/4/2022 đến thứ 2 tuần sau 7/11/2022... nên sẽ giữ lại 2 cột 7/4/2022 và 7/11/2022, còn lại ẩn các cột khác ạ.
 
Upvote 0
Thầy bói xem voi nè;
nghiệm ca tiếng mà không biết đúng ý không?
 

File đính kèm

  • Master Resource 222.xlsm
    20.2 KB · Đọc: 3
Upvote 0
Mình không dùng button, mà code sẽ chạy mỗi khi ô K2 thay đổi giá trị (nhập bằng tay)
Ngày tại K2 hay tại dòng 5 có thể format bất kỳ, với điều kiện là ngày thực, không phải text.
Right-click sheet name, view code, dán code này vào:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lc&, cell As Range, ngay As Range, dif&
If Target.Address(0, 0) <> "K2" Then Exit Sub
lc = Cells(5, Columns.Count).End(xlToLeft).Column
If Target.Value2 < Range("M5").Value2 Or Target.Value2 > Cells(5, lc).Value2 Then Exit Sub
Set ngay = Range("M5", Cells(5, lc))
For Each cell In ngay
    dif = cell.Value2 - Target.Value2
    If dif <= -7 Or dif > 7 Then cell.EntireColumn.Hidden = True
Next
End Sub
 

File đính kèm

  • Master Resource.xlsm
    16.4 KB · Đọc: 7
Upvote 0
Mong rằng sẽ đúng ý của bạn cần:
PHP:
Sub Button1_Click()
Dim Dat As Date, J As Integer, Col As Integer, fCol As Integer, lCol As Integer
 Dim Rng As Range, hRng As Range, Cls As Range
 Dim MyDateFormat As String

 Set Rng = Range([M5], [M5].End(xlToRight))
 Rng.Interior.ColorIndex = 35
 MyDateFormat = Rng.NumberFormat
 Rng.NumberFormat = "MM/DD/yyyy"
 Dat = Format([K2].Value, "MM/DD/yyyy")
 If Rng(1).Value > Dat Then
    MsgBox "Ngày Quá Bé!"
 ElseIf [M5].End(xlToRight).Value < Dat Then
    MsgBox "Ngày Quá To!"
 Else
    Rng.Columns.Hidden = True
    For J = 1 To Rng.Cells.Count
        If Rng(J).Value >= Dat And Rng(J + 1).Value <= Dat Then
            Columns(J).Hidden = False
            Columns(J + 1).Hidden = False
            Exit For
        End If
    Next J
 End If
 Rng.NumberFormat = MyDateFormat
End Sub
 
Upvote 0
Mong rằng sẽ đúng ý của bạn cần:
PHP:
Sub Button1_Click()
Dim Dat As Date, J As Integer, Col As Integer, fCol As Integer, lCol As Integer
 Dim Rng As Range, hRng As Range, Cls As Range
 Dim MyDateFormat As String

 Set Rng = Range([M5], [M5].End(xlToRight))
 Rng.Interior.ColorIndex = 35
 MyDateFormat = Rng.NumberFormat
 Rng.NumberFormat = "MM/DD/yyyy"
 Dat = Format([K2].Value, "MM/DD/yyyy")
 If Rng(1).Value > Dat Then
    MsgBox "Ngày Quá Bé!"
 ElseIf [M5].End(xlToRight).Value < Dat Then
    MsgBox "Ngày Quá To!"
 Else
    Rng.Columns.Hidden = True
    For J = 1 To Rng.Cells.Count
        If Rng(J).Value >= Dat And Rng(J + 1).Value <= Dat Then
            Columns(J).Hidden = False
            Columns(J + 1).Hidden = False
            Exit For
        End If
    Next J
 End If
 Rng.NumberFormat = MyDateFormat
End Sub
Dạ em cảm ơn anh.

Anh ơi em có để ngày 7/14/2022, thì hiện tại nó đang ẩn sai cột ạ.

Anh kiểm tra giúp em trong file nhé ạ.

Em cảm ơn anh!
 

File đính kèm

  • Master Resource.xlsm
    19.1 KB · Đọc: 4
Upvote 0
Dạ em cảm ơn anh.
Anh ơi em có để ngày 7/14/2022, thì hiện tại nó đang ẩn sai cột ạ.
Anh kiểm tra giúp em trong file nhé ạ.
Em cảm ơn anh!
Chắc ANH ấy bận dẫn cháu cố đi chơi rồi.
Kiểm tra code tại bài #7 chưa vậy bạn?
 
Upvote 0
Ờ hén:
PHP:
Sub Button1_Click()
Dim Dat As Date, J As Integer, Col As Integer, fCol As Integer
 Dim Rng As Range, hRng As Range, Cls As Range
 Dim MyDateFormat As String

 Set Rng = Range([M5], [M5].End(xlToRight))
 Rng.Interior.ColorIndex = 35
 MyDateFormat = Rng.NumberFormat
 Rng.NumberFormat = "MM/DD/yyyy"
 Dat = Format([K2].Value, "MM/DD/yyyy")
 If Rng(1).Value > Dat Then
    MsgBox "Ngày Quá Bé!"
 ElseIf [M5].End(xlToRight).Value < Dat Then
    MsgBox "Ngày Quá To!"
 Else
    fCol = [M5].Column - 1
    Rng.Columns.Hidden = True
    For J = 1 To Rng.Cells.Count
        If Rng(J).Value <= Dat And Rng(J + 1).Value >= Dat Then
            Columns(fCol + J).Hidden = False
            Columns(1 + fCol + J).Hidden = False
        End If
    Next J
 End If
 Rng.NumberFormat = MyDateFormat
End Sub

Code “ANH” phê dzữ quá !!:yeah:
 
Lần chỉnh sửa cuối:
Upvote 0
Ờ hén:
PHP:
Sub Button1_Click()
Dim Dat As Date, J As Integer, Col As Integer, fCol As Integer
 Dim Rng As Range, hRng As Range, Cls As Range
 Dim MyDateFormat As String

 Set Rng = Range([M5], [M5].End(xlToRight))
 Rng.Interior.ColorIndex = 35
 MyDateFormat = Rng.NumberFormat
 Rng.NumberFormat = "MM/DD/yyyy"
 Dat = Format([K2].Value, "MM/DD/yyyy")
 If Rng(1).Value > Dat Then
    MsgBox "Ngày Quá Bé!"
 ElseIf [M5].End(xlToRight).Value < Dat Then
    MsgBox "Ngày Quá To!"
 Else
    fCol = [M5].Column - 1
    Rng.Columns.Hidden = True
    If Dat < Rng(1).Value Then
        MsgBox "Ngày Quá Bé!"
    ElseIf Dat > Rng(Rng.Cells.Count).Value Then
        MsgBox "Ngày Quá To!", , [M5].End(xlToRight).Address
    Else
        For J = 1 To Rng.Cells.Count
            If Rng(J).Value <= Dat And Rng(J + 1).Value >= Dat Then
                Columns(fCol + J).Hidden = False
                Columns(1 + fCol + J).Hidden = False
                Exit For
            End If
        Next J
    End If
 End If
 Rng.NumberFormat = MyDateFormat
End Sub
Code “ANH” phê dzữ quá !!:yeah:
 
Upvote 0
Code “ANH” phê dzữ quá !!:yeah:

Mình vừa sửa lại rồi, chắc code đó viết khi đang fê . . . , đúng vậy!

@Chủ bài đăng: Khi trị ngày cần tìm có trên dòng 5, lúc đó bạn cần hiện 3 cột hay 2 cột; & nếu cần hiện 2 cột thì chúng sẽ phải là sao?
 
Upvote 0
Mình vừa sửa lại rồi, chắc code đó viết khi đang fê . . . , đúng vậy!

@Chủ bài đăng: Khi trị ngày cần tìm có trên dòng 5, lúc đó bạn cần hiện 3 cột hay 2 cột; & nếu cần hiện 2 cột thì chúng sẽ phải là sao?
Em cảm ơn anh nhiều ạ, Em nghĩ chắc được rồi anh ^^.
 
Upvote 0
Từ đầu chí cuối, có ai hiểu tại sao "tuần" của thớt có 8 ngày?

...
Ví dụ em nhập tay ( vào textbox hoặc 1 cell nào đó ) ngày: 7/9/2022 ( định dạng là M/d/yyyy ), thì nó sẽ so sánh với các cột trong file và giữ lại 2 cột 7/4/2022 và 7/11/2022 ( cột M và N ) vì 7/9/2022 nằm trong tuần từ 7/4/2022 đến 7/11/2022, ngoài ra sẽ hide các cột còn lại đi ạ.

Theo dạng cấu trúc của file thì phải diễn tả là:
Mỗi cột kể từ cột M là dữ liệu của tuần lễ bắt đầu bằng thứ Hai. Cột M là dữ liệu tuần lễ 7/4/2022 (dạng m/d/yyyy), cột N là tuần lễ 7/11/2022.

1. như vậy người ta biết ngày 4 tháng 7 là giới hạn nội (inclusive: x >= M), và ngay 11/7 là giới hạn ngoại (exclusive: x < N)

2. khi muốn nói thứ trong tuần, viết hoa thì dễ hiểu hơn dùng số: thứ Hai, thứ Ba... thay vì thứ 2, thứ 3...

Một khi diễn tả rõ như vậy rồi thì vấn đề túm lại là:
Nhập vào một ngày. Bảng tính sẽ lọc lấy cột tuần chứa ngày đó và ẩn các cột còn lại.
 
Upvote 0
Web KT
Back
Top Bottom