Xin được giúp đỡ Code kiểm tra vùng dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
290
Đượ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

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)
View attachment 200518
Mong sự giúp đỡ của Anh Chị và các Bạn
Bạn cho hỏi ô ghi 1/2/1900 tại sao không phải ngày tháng vậy? tương tự ô 3/20/1900 tại sao không phải ngày tháng? theo excel hiểu 3/20/1900 chính là ngày 20 tháng 3 năm 1900 mà.
 
Upvote 0
Bạn cho hỏi ô ghi 1/2/1900 tại sao không phải ngày tháng vậy? tương tự ô 3/20/1900 tại sao không phải ngày tháng? theo excel hiểu 3/20/1900 chính là ngày 20 tháng 3 năm 1900 mà.
Vâng, e để định dạng ngày tháng trong các ô đó, theo E hiểu những ô như 3/20/190 là ô bị lỗi ( E để định dạng ngày tháng, nhưng đó là ô E điền dạng số học như số 30 hay số gì đó mà không phải điền dữ liệu kiểu ngày tháng" 02/03/2016")
E hiểu như vậy có đúng không Thầy? mục đích của E là để kiểm tra dữ liệu, những ô nào vô tình điền dữ liệu không đúng kiểu ngày/tháng/năm (điền con số nào đó: số 20 chả hạn) sẽ bị tô màu để phát hiện và sửa lại
E cám ơn Thầy!
 
Upvote 0
Vâng, e để định dạng ngày tháng trong các ô đó, theo E hiểu những ô như 3/20/190 là ô bị lỗi ( E để định dạng ngày tháng, nhưng đó là ô E điền dạng số học như số 30 hay số gì đó mà không phải điền dữ liệu kiểu ngày tháng" 02/03/2016")
E hiểu như vậy có đúng không Thầy? mục đích của E là để kiểm tra dữ liệu, những ô nào vô tình điền dữ liệu không đúng kiểu ngày/tháng/năm (điền con số nào đó: số 20 chả hạn) sẽ bị tô màu để phát hiện và sửa lại
E cám ơn Thầy!
Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:
Sub BoiMau()
    Dim sRng As Range, Rng As Range, Cll As Range
    Dim N As Long, Str As String, Str1 As String
Str = "Em da chon duoc ": Str1 = " o. Lam gi nua thi tuy y nha Chi nha"
On Error GoTo Thoat
Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
sRng.Interior.Pattern = xlNone
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) = 1900 Then
Tiep:
            N = N + 1
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    End If
Next
Rng.Select
MsgBox Str & ": " & N & Str1
Thoat:
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng, e để định dạng ngày tháng trong các ô đó, theo E hiểu những ô như 3/20/190 là ô bị lỗi ( E để định dạng ngày tháng, nhưng đó là ô E điền dạng số học như số 30 hay số gì đó mà không phải điền dữ liệu kiểu ngày tháng" 02/03/2016")
E hiểu như vậy có đúng không Thầy? mục đích của E là để kiểm tra dữ liệu, những ô nào vô tình điền dữ liệu không đúng kiểu ngày/tháng/năm (điền con số nào đó: số 20 chả hạn) sẽ bị tô màu để phát hiện và sửa lại
E cám ơn Thầy!
Thế thì bạn xài conditional formatting, tô màu những ô có giá trị< 36000 ( tương đương với ngày 24/7/1998) , vốn dĩ ngày tháng cũng là một con số với số 1tương đương là ngày 1/1/1900, bạn xem cơ sở dữ liệu của bạn cần ngày cũ nhất là bao nhiêu rồi chọn giá trị đó bỏ vào conditional formatting là được, ko cần xài code chi
 
Upvote 0
Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:
Sub BoiMau()
    Dim sRng As Range, Rng As Range, Cll As Range
    Dim N As Long, Str As String, Str1 As String
Str = "Em da chon duoc ": Str1 = " o. Lam gi nua thi tuy y nha Chi nha"
On Error GoTo Thoat
Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
sRng.Interior.Pattern = xlNone
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) = 1900 Then
Tiep:
            N = N + 1
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    End If
Next
Rng.Select
MsgBox Str & ": " & N & Str1
Thoat:
End Sub

Với cách này là có thể kiểm tra được dữ liệu cả những dạng khác như định dạng ngày tháng, định dạng date và định dạng text đúng không anh !
 
Upvote 0
Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:
Sub BoiMau()
    Dim sRng As Range, Rng As Range, Cll As Range
    Dim N As Long, Str As String, Str1 As String
Str = "Em da chon duoc ": Str1 = " o. Lam gi nua thi tuy y nha Chi nha"
On Error GoTo Thoat
Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
sRng.Interior.Pattern = xlNone
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) = 1900 Then
Tiep:
            N = N + 1
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    End If
Next
Rng.Select
MsgBox Str & ": " & N & Str1
Thoat:
End Sub
Vâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:

Với cách này là có thể kiểm tra được dữ liệu cả những dạng khác như định dạng ngày tháng, định dạng date và định dạng text đúng không anh !
E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)1.jpg2.jpg ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:


E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)View attachment 200554View attachment 200555 ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
À mình nói trên là cái file mẫu nó gần giống với file bạn ý làm thực tế để mọi người đỡ phải sửa đi sửa lại. Do vậy mình phải đưa cái InputBox: Thích chọn vùng nào thì chọn :p:p:p
Bài đã được tự động gộp:

Mình thì không biết làm mà cũng không biết nghĩ luôn.
Úi Thầy ơi. Kiểu nầy Thầy sắp la em cái gì nữa đây -\\/.
 
Upvote 0
Vâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:


E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)View attachment 200554View attachment 200555 ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
Cái đó mới là chọn ô thôi chứ có tô màu gì đâu: Rng.Select
Cái Msgbox có nói rồi mà (Chắc là tiếng việt không dấu do vậy bạn dịch không được)
Khi mỗi lần chạy Code em có ghi là "Em đã chọn được: N ô. Làm gì nữa thì tùy nhà Chị nha". rùi mà :p:p:p
 
Upvote 0
Cao thủ rồi thì anh làm đại cũng được ấy mà nên vậy anh ạ
Bạn chưa biết tôi. Tôi rất lấy làm buồn khi có ngừoi gọi mình là cao thủ.
Hồi xưa tôi học thẳng từ trình nỏ vịt (novice) qua thẳng luôn ếch (ace) luôn. Bỏ qua giai đoạn pờ rồ (pro)
 
Upvote 0
Vâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:


E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)View attachment 200554View attachment 200555 ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:
Sub BoiMau()
    Dim sRng As Range, Rng As Range, Cll As Range
    Dim N As Long, Str As String, Str1 As String
Str = "Em da chon duoc ": Str1 = " o. Lam gi nua thi tuy y nha Chi nha"
On Error GoTo Thoat
Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
sRng.Interior.Pattern = xlNone
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) = 1900 Then
Tiep:
            N = N + 1
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    End If
Next
Rng.Select
MsgBox Str & ": " & N & Str1
Thoat:
End Sub
Đây E đưa file lên Chị giúp E ạ!
Bài toán đặt ra:
1. Tô màu những ô bị lỗi (lỗi về ngày tháng năm, lỗi về giờ) kết quả đã được tô màu vàng như hình trên!
2. Những ô không có dữ liệu và ô có dữ liệu được định dạng đúng không bị tô màu
23.jpg
Em xin cảm ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:
Sub BoiMau()
  
        If Year(Cll) = 1900 Then
If Year(Cll) = 1900 Then? Vậy 1901 thì bỏ qua? (chẳng hạn cell có giá trị 367)
 
Upvote 0
Đây E đưa file lên Chị giúp E ạ!
Bài toán đặt ra:
1. Tô màu những ô bị lỗi (lỗi về ngày tháng năm, lỗi về giờ) kết quả đã được tô màu vàng như hình trên!
2. Những ô không có dữ liệu và ô có dữ liệu được định dạng đúng không bị tô màu
View attachment 200564
Em xin cảm ơn!
Dữ liệu kiểu này là gây khó cho "đồng đội" rồi
9h00-10h00 là đúng định dạng. Vậy đương nhiên nhìn bằng mắt sẽ biết 27h00-29h00 hay 12h00-11h00... là sai định dạng
Vấn đề là: Viết code tổng quát cho mọi trường hợp không phải chuyện dễ
Lời khuyên: Với CSDL thì nên có sự chuẩn hóa. Ví dụ thay vì 9h00-10h00 tại sao không chia thành 2 cột "Giờ vào", "Giờ ra" chẳng hạn. Như vậy thì còn tính toán được chứ với 1 chuỗi nhập linh tinh chỉ có tác dụng để nhìn, không tính toán được gì cả
Nên nhớ: Excel dùng để tính toán, không phải để trang trí hay màu mè
 
Upvote 0
Dữ liệu kiểu này là gây khó cho "đồng đội" rồi
9h00-10h00 là đúng định dạng. Vậy đương nhiên nhìn bằng mắt sẽ biết 27h00-29h00 hay 12h00-11h00... là sai định dạng
Vấn đề là: Viết code tổng quát cho mọi trường hợp không phải chuyện dễ
Lời khuyên: Với CSDL thì nên có sự chuẩn hóa. Ví dụ thay vì 9h00-10h00 tại sao không chia thành 2 cột "Giờ vào", "Giờ ra" chẳng hạn. Như vậy thì còn tính toán được chứ với 1 chuỗi nhập linh tinh chỉ có tác dụng để nhìn, không tính toán được gì cả
Nên nhớ: Excel dùng để tính toán, không phải để trang trí hay màu mè
Hi vâng cám ơn Thầy, E làm theo phần mềm định dạng sẵn như vậy nên khó thay đổi Thầy ạ!, Thầy giúp E trong khoảng thời gian "07h00-12h00" và "13h00-18h00" được không Thầy? nếu không được Thầy giúp Em kiểm tra ngày thôi ạ! k cần đến giờ, E cám ơn Thầy
Bài đã được tự động gộp:

Cái đó mới là chọn ô thôi chứ có tô màu gì đâu: Rng.Select
Cái Msgbox có nói rồi mà (Chắc là tiếng việt không dấu do vậy bạn dịch không được)
Khi mỗi lần chạy Code em có ghi là "Em đã chọn được: N ô. Làm gì nữa thì tùy nhà Chị nha". rùi mà :p:p:p
Hi nhờ Anh (Chị) chỉnh giúp Em để hiện màu tô những ô bị lỗi đó.
 
Upvote 0
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
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
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
    Set sRng = Range("P9:P18")
    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
hi dài nhưng mà vẫn ok, hi....là được bạn ạ!
 
Upvote 0
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)
View attachment 200518
Mong sự giúp đỡ của Anh Chị và các Bạn
Đây là code ngắn gọn (3 trong 1), nó xác định 3 kiểu định dạng (chọn vùng cần rồi nhấn nút).
- Nếu là số và ngày tháng tô màu xanh.
- Nếu là hàm tô màu vàng.
- Nếu là Text tô màu hường.
Mã:
Sub DanhDau()
Dim Vung As Range
Set Vung = Selection
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 
    'Só, ngày
    Vung.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 33
    'Hàm
    Vung.SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = 27
    'Text
    Vung.SpecialCells(xlCellTypeConstants, 2).Interior.ColorIndex = 40
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

A_DD.JPG
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đây là code ngắn gọn (3 trong 1), nó xác định 3 kiểu định dạng (chọn vùng cần rồi nhấn nút).
- Nếu là số và ngày tháng tô màu xanh.
- Nếu là hàm tô màu vàng.
- Nếu là Text tô màu hường.
Mã:
Sub DanhDau()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
    Dim Vung As Range
    Set Vung = Selection
    'Só, ngày
    Vung.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 33
    'Hàm
    Vung.SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = 27
    'Text
    Vung.SpecialCells(xlCellTypeConstants, 2).Interior.ColorIndex = 40
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

View attachment 200612
Vâng E cám ơn Thầy, Thầy có thể chỉnh giúp Em một chút xíu nữa là có vùng chọn (tức là chỉ chọn trong vùng chọn đó)
Vùng dữ liệu của e nhìu, E chỉ muốn kiểm tra tròng vùng đó!hi
 
Upvote 0
Vâng E cám ơn Thầy, Thầy có thể chỉnh giúp Em một chút xíu nữa là có vùng chọn (tức là chỉ chọn trong vùng chọn đó)
Vùng dữ liệu của e nhìu, E chỉ muốn kiểm tra tròng vùng đó!hi
Mở Excel, nhấn Alt+F11 (vào VBE) rồi thay dòng này:
Set Vung = Selection

Thành dòng này:
Set Vung = Sheet1.Range("D4:I17")
 
Upvote 0
Mở Excel, nhấn Alt+F11 (vào VBE) rồi thay dòng này:
Set Vung = Selection

Thành dòng này:
Set Vung = Sheet1.Range("D4:I17")
Vâng Có thể như thế này và chọn vùng được không Thầy, thì mỗi lần chọn k phải sửa trong Code,
hi.jpg
Thầy cho E hỏi Thêm đoạn code trên có tác dụng đối với dòng bị ẩn không thưa Thầy?
 
Upvote 0
Muốn áp dụng cho vùng khác thì thay chỗ D4:I17, nếu khác sheet thì thay chỗ Sheet1.
Dạ vâng, E thấy code Chị PacificPR viết giúp E ở bài #4 có vùng chọn hi, E vừa thêm phần đoạn vùng chọn đó vào code của Thầy nhưng k được
E cám ơn Thầy nhiều, chúc Thầy buổi tối vui vẻ!
Bài đã được tự động gộp:

Ủa, sao mình nhanh quá vậy? Mình nhờ 'chị' ở trên ấy.
hi
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ vâng, E thấy code Chị PacificPR viết giúp E ở bài #4 có vùng chọn hi, E vừa thêm phần đoạn vùng chọn đó vào code của Thầy nhưng k được
E cám ơn Thầy nhiều, chúc Thầy buổi tối vui vẻ!
Thì code bài 30 là chọn vùng bất kỳ tôi có nêu rõ rồi mà (chọn vùng cần rồi nhấn nút).
 
Upvote 0
Thì code bài 30 là chọn vùng bất kỳ tôi có nêu rõ rồi mà (chọn vùng cần rồi nhấn nút).
À Vâng E hiểu, ý Em là có thể chọn kiểu như chọn vùng như vậy 55455.jpgđể có thể chọn được vùng linh hoạt hơn mà không phải chỉnh sửa trực tiếp code mỗi khi muốn chọn vùng kiểm tra thưa Thầy!
 
Upvote 0
À quên Theo 17025:2017 thì tài liệu lưu trữ là 5 năm. Nếu @Bùi Thúy Thúy có lấy Code bài 25 vào file nhớ sửa lại chỗ fYear = Year(Now()) - 4 thành fYear = Year(Now()) - 5 nha (Vì trong 5 năm mình vẫn sửa được HSQLCL í mà)
 
Upvote 0
Vâng E cám ơn Thầy, Thầy có thể chỉnh giúp Em một chút xíu nữa là có vùng chọn (tức là chỉ chọn trong vùng chọn đó)
Vùng dữ liệu của e nhìu, E chỉ muốn kiểm tra tròng vùng đó!hi
Đây là code ngắn gọn (3 trong 1), nó xác định 3 kiểu định dạng (chọn vùng cần rồi nhấn nút).
- Nếu là số và ngày tháng tô màu xanh.
- Nếu là hàm tô màu vàng.
- Nếu là Text tô màu hường.
Mã:
Sub DanhDau()
Dim Vung As Range
Set Vung = Selection
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
    'Só, ngày
    Vung.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 33
    'Hàm
    Vung.SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = 27
    'Text
    Vung.SpecialCells(xlCellTypeConstants, 2).Interior.ColorIndex = 40
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

View attachment 200612
E vừa test lại đoạn code của Thầy, Thầy có thể giúp E chút nữa là: Tô ngày tháng mà bị lỗi, và giá trị các ô bị lỗi còn các cái khác đều không tô màu Chup.jpg
Bài đã được tự động gộp:

Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:
Sub BoiMau()
    Dim sRng As Range, Rng As Range, Cll As Range
    Dim N As Long, Str As String, Str1 As String
Str = "Em da chon duoc ": Str1 = " o. Lam gi nua thi tuy y nha Chi nha"
On Error GoTo Thoat
Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
sRng.Interior.Pattern = xlNone
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) = 1900 Then
Tiep:
            N = N + 1
            If Rng Is Nothing Then
                Set Rng = Cll
            Else
                Set Rng = Union(Rng, Cll)
            End If
        End If
    End If
Next
Rng.Select
MsgBox Str & ": " & N & Str1
Thoat:
End Sub
Code của chị khá là ổn đúng ý E, giờ mà tô màu được các ô bị lỗi nữa thì tuyệt, chị có thể sửa lại giúp E đoạn code này để tô màu ô bị lỗi được K ạ!
E cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Bài đã được tự động gộp:


Code của chị khá là ổn đúng ý E, giờ mà tô màu được các ô bị lỗi nữa thì tuyệt, chị có thể sửa lại giúp E đoạn code này để tô màu ô bị lỗi được K ạ!
E cám ơn
Sao em hoang mang quá vậy. Đọc kỹ lại thì bài 25 không phải là yêu cầu của chủ Topic
 
Upvote 0
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

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

Back
Top Bottom