Xin được giúp đỡ Code kiểm tra vùng dữ liệu

Liên hệ QC

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
289
Được thích
38
Trong vùng kẻ khung cho E xin code để kiểm tra vùng từ cột D đến cột I với điều kiện :
Nếu ô nào không có giá trị ngày tháng và không phải là ô trống thì tô màu
(Kết quả: Trên vùng là các ô tô màu sau khi đã kiểm tra)
Chup.jpg
Mong sự giúp đỡ của Anh Chị và các Bạn
 

File đính kèm

Anh @ befaint ới em đã viết được cái Code kinh khủng này. Nhìn thấy khiếp quá đi

PHP:
Option Explicit
Sub Kiemtra()
    Dim Arr, J As Long, Dongcuoi As Long
    Dim SRng As Range, eRng As Range, Cll As Range
Arr = Array(15, 16, 18, 19, 21, 22, 24, 25)
Dongcuoi = Range("A" & Rows.Count).End(xlUp).Row
For J = LBound(Arr) To UBound(Arr)
    Set SRng = Range(Cells(9, Arr(J)), Cells(Dongcuoi, Arr(J)))
    Select Case Arr(J)
        Case 15, 18, 21, 24 To 25
            Kiemtrangay SRng
        Case 16, 19, 22
            Kiemtragio SRng
    End Select
Next J
End Sub
Sub Kiemtrangay(ByVal SRng As Range)
    Dim Rng As Range, Cll As Range
    Dim fYear As Long, eYear As Long
    fYear = Year(Now()) - 4:  eYear = Year(Now()) + 1
    SRng.Interior.Pattern = xlNone
    SRng.Font.Strikethrough = False
    For Each Cll In SRng
        If IsError(Cll) Then GoTo Tiep
        If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep
        If Cll <> Empty Then
            If Year(Cll) <= fYear Then
                If Year(Cll) <= eYear Then
Tiep:
                    If Rng Is Nothing Then
                        Set Rng = Cll
                    Else
                        Set Rng = Union(Rng, Cll)
                    End If
                End If
            End If
        End If
    Next
    If Not Rng Is Nothing Then
        Rng.Interior.Color = 7988676
        Rng.Font.Strikethrough = True
    End If
End Sub
Sub Kiemtragio(ByVal SRng As Range)
    Dim Rng As Range, Cll As Range, DK As Boolean
    Dim aTmp, TmpBD, TmpKT, J As Long
    Dim GioBD As Double, GioKT As Double, FGio As Double, EGio As Double
    Dim sTimeAm As Double, eTimeAM As Double, sTimePM As Double, eTimePM As Double
    sTimeAm = 7 + 30 / 60: eTimeAM = 11 + 30 / 60
    sTimePM = 13 + 30 / 60: eTimePM = 17
    SRng.Interior.Pattern = xlNone
    SRng.Font.Strikethrough = False
    For Each Cll In SRng
        DK = False
        If IsError(Cll) Then
            DK = True: GoTo Tiep
        End If
        If Cll <> Empty Then
            aTmp = Split(Cll, "-")
            If UBound(aTmp) < 1 Then
                DK = True: GoTo Tiep
            Else
                TmpBD = Split(aTmp(0), "h")
                TmpKT = Split(aTmp(1), "h")
                '-----------------------------------------------
                If UBound(TmpBD) >= 1 Then
                    GioBD = CLng(TmpBD(0)) + CLng(TmpBD(1)) / 60
                    '++++++++++++++++++++++++
                    If GioBD < eTimeAM Then
                        FGio = sTimeAm: EGio = eTimeAM
                    Else
                        FGio = sTimePM: EGio = eTimePM
                    End If
                    '+++++++++++++++++++++++++
                    If GioBD < FGio Then
                        DK = True: GoTo Tiep
                    End If
                Else
                    DK = True: GoTo Tiep
                End If
                '---------------------------------------------------
                If UBound(TmpKT) >= 1 Then
                    GioKT = CLng(TmpKT(0)) + CLng(TmpKT(1)) / 60
                    If GioKT > EGio Then
                        DK = True: GoTo Tiep
                    End If
                Else
                    DK = True: GoTo Tiep
                End If
                '------------------------------------------
                If GioKT - GioBD <= 0 Then
                    DK = True: GoTo Tiep
                End If
            End If
        End If
Tiep:
        If DK = True Then
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    Next
    If Not Rng Is Nothing Then
        Rng.Interior.Color = 13434879
        Rng.Font.Strikethrough = True
    End If
End Sub

@Bùi Thúy Thúy Test thử xem có cái gì nó không ưng cái bụng không nha :p:p:p
Chị ơi cái code này thay đổi vùng kiểm tra thì vào phần nào trong code ạ!
 
Upvote 0
Chị ơi cái code này thay đổi vùng kiểm tra thì vào phần nào trong code ạ!
Vầy nha. Mình khai báo cái Arr = Array(15, 16, 18, 19, 21, 22, 24, 25) là mảng chứa số cột của bảng tính cấn kiểm tra

Trong câu lệnh
Select Case Arr(J)
Case 15, 18, 21, 24 To 25 --->Nếu số côt trong bảng tính là 15,18,21, 24, 25 thì chạy Macro Kiemtrangay
Kiemtrangay SRng
Case 16, 19, 22
Kiemtragio SRng --->Nếu số côt trong bảng tính là 16,19,22 thì chạy Macro Kiemtragio
End Select
 
Upvote 0
Vầy nha. Mình khai báo cái Arr = Array(15, 16, 18, 19, 21, 22, 24, 25) là mảng chứa số cột của bảng tính cấn kiểm tra

Trong câu lệnh
Select Case Arr(J)
Case 15, 18, 21, 24 To 25 --->Nếu số côt trong bảng tính là 15,18,21, 24, 25 thì chạy Macro Kiemtrangay
Kiemtrangay SRng
Case 16, 19, 22
Kiemtragio SRng --->Nếu số côt trong bảng tính là 16,19,22 thì chạy Macro Kiemtragio
End Select
Vâng cám ơn chị, chị giúp E chút xíu nữa là sửa lại code ở bài #4 để e có thể tô màu được không ạ! E sẽ sử dụng code ở bài #4 đó, chúc chị ngày mới vui vẻ!
 
Upvote 0
Vâng cám ơn chị, chị giúp E chút xíu nữa là sửa lại code ở bài #4 để e có thể tô màu được không ạ! E sẽ sử dụng code ở bài #4 đó, chúc chị ngày mới vui vẻ!
Bê cái Code bài 25 vào thôi nha
Mã:
Sub BoiMau()
    Dim SRng As Range
On Error GoTo Thoat
Set SRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
Kiemtrangay SRng
Thoat:
End Sub
Sub Kiemtrangay(ByVal SRng As Range)
    Dim Rng As Range, Cll As Range
    Dim fYear As Long, eYear As Long
    fYear = Year(Now()) - 5:  eYear = Year(Now()) + 1
    SRng.Interior.Pattern = xlNone
    SRng.Font.Strikethrough = False
    For Each Cll In SRng
        If IsError(Cll) Then GoTo Tiep
        If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep
        If Cll <> Empty Then
            If Year(Cll) <= fYear Then
                If Year(Cll) <= eYear Then
Tiep:
                    If Rng Is Nothing Then
                        Set Rng = Cll
                    Else
                        Set Rng = Union(Rng, Cll)
                    End If
                End If
            End If
        End If
    Next
    If Not Rng Is Nothing Then
        Rng.Interior.Color = 7988676
        Rng.Font.Strikethrough = True
    End If
End Sub
 

File đính kèm

Upvote 0
E làm theo phần mềm định dạng sẵn như vậy nên khó thay đổi Thầy ạ!,
Chỉ là "Khó" thôi, chứ không fải là không thay đổi; Ví dụ bạn có thể tìm các ô trong vùng cột có kí tự "-" thì tách ra bỡi hàm nào đó thành 2 cột; Chuyện này không thể dính dáng hay đổ thừa cho fần mền được, 1 khi chưa có fần mềm mới thay thế
 
Upvote 0
Chỉ là "Khó" thôi, chứ không fải là không thay đổi; Ví dụ bạn có thể tìm các ô trong vùng cột có kí tự "-" thì tách ra bỡi hàm nào đó thành 2 cột; Chuyện này không thể dính dáng hay đổ thừa cho fần mền được, 1 khi chưa có fần mềm mới thay thế
Vâng E cám ơn Thầy ạ!
Bài đã được tự động gộp:

Bê cái Code bài 25 vào thôi nha
Mã:
Sub BoiMau()
    Dim SRng As Range
On Error GoTo Thoat
Set SRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
Kiemtrangay SRng
Thoat:
End Sub
Sub Kiemtrangay(ByVal SRng As Range)
    Dim Rng As Range, Cll As Range
    Dim fYear As Long, eYear As Long
    fYear = Year(Now()) - 5:  eYear = Year(Now()) + 1
    SRng.Interior.Pattern = xlNone
    SRng.Font.Strikethrough = False
    For Each Cll In SRng
        If IsError(Cll) Then GoTo Tiep
        If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep
        If Cll <> Empty Then
            If Year(Cll) <= fYear Then
                If Year(Cll) <= eYear Then
Tiep:
                    If Rng Is Nothing Then
                        Set Rng = Cll
                    Else
                        Set Rng = Union(Rng, Cll)
                    End If
                End If
            End If
        End If
    Next
    If Not Rng Is Nothing Then
        Rng.Interior.Color = 7988676
        Rng.Font.Strikethrough = True
    End If
End Sub
Vâng, E cám ơn Chị nhiều nhé! chúc chị cuối tuần vui vẻ và may mắn!
Bài đã được tự động gộp:

Bê cái Code bài 25 vào thôi nha
Mã:
Sub BoiMau()
    Dim SRng As Range
On Error GoTo Thoat
Set SRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
Kiemtrangay SRng
Thoat:
End Sub
Sub Kiemtrangay(ByVal SRng As Range)
    Dim Rng As Range, Cll As Range
    Dim fYear As Long, eYear As Long
    fYear = Year(Now()) - 5:  eYear = Year(Now()) + 1
    SRng.Interior.Pattern = xlNone
    SRng.Font.Strikethrough = False
    For Each Cll In SRng
        If IsError(Cll) Then GoTo Tiep
        If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep
        If Cll <> Empty Then
            If Year(Cll) <= fYear Then
                If Year(Cll) <= eYear Then
Tiep:
                    If Rng Is Nothing Then
                        Set Rng = Cll
                    Else
                        Set Rng = Union(Rng, Cll)
                    End If
                End If
            End If
        End If
    Next
    If Not Rng Is Nothing Then
        Rng.Interior.Color = 7988676
        Rng.Font.Strikethrough = True
    End If
End Sub
Hi, làm phiền chị xinh gái chút nữa:
Chị có thể bỏ cho e cái gạch đó đi được không ạ! chỉ tô màu thôi.
Và cho E hỏi thêm có thể điều chỉnh code để code chỉ có tác dụng được trên vùng hiện hành (không có tác dụng trên vùng chọn đã bị ẩn) được không ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Cứ "một chút xíu" mà gần 50 bài rồi vẫn chưa có dấu hiệu kết thúc :).
Bài 44 lại nhờ sửa lại code bài 4 để dùng. Hay là nhờ mod xóa từ bài 5 đến 43 cho gọn nhỉ? Thấy tốn kém quá.
 
Upvote 0
Cứ "một chút xíu" mà gần 50 bài rồi vẫn chưa có dấu hiệu kết thúc :).
Bài 44 lại nhờ sửa lại code bài 4 để dùng. Hay là nhờ mod xóa từ bài 5 đến 43 cho gọn nhỉ? Thấy tốn kém quá.
:D :D
Anh kieu manh bảo như này:

1532756673362.jpeg
Trước đây, dấu hiệu nhận biết là "nhưng mà còn...", giờ nâng cấp thành "nếu (cái khác)...", thấy vậy là té luôn.
 
Upvote 0
Hình như Mình sắp tém được củ cà rốt rùi đây. vấn đề là người ta có cho hay không thui :D:D:D
Hi, gần được chị ạ! ô màu xanh vẫn bị gạch chị ạ! E nhờ chị sửa vậy để còn sửa lại được dữ liệu tô màu e có thể sửa lại được nhưng dữ liệu bị gạch k sửa được chị ạ!
E cám ơn Chị nhiều!

w.jpg
 
Upvote 0
Upvote 0

File đính kèm

Upvote 0
Khổ thân. Đáng nhẽ ăn được rồi mà người ta lại không cho ăn. Số mình đen thế
Tui đâu thấy "đen" đâu. Nhìn ảnh Avatar "số này còn còn bén" mà!
1101501.jpg
 
Upvote 0
Web KT

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

Back
Top Bottom