Nhờ các anh chị giúp cho code hide và anhide các dòng không tuân theo quy luật

Liên hệ QC

dvh.hy.9902

Thành viên hoạt động
Tham gia
27/3/12
Bài viết
123
Được thích
9
Nhờ các anh chị giúp cho code hide và anhide các dòng không tuân theo quy luật (em tạm đánh dấu màu vàng để các anh chị dễ nhìn!.)
Xin cảm ơn các anh chị!.
 

File đính kèm

  • GPE1.rar
    14.9 KB · Đọc: 24
Trình độ của em chỉ có vậy, thầy có tuyệt chiêu chia sẻ em học hỏi với.

Tuyệt chiêu gì đâu chứ! Như tôi đã nói ở trên: DÙNG ADVANCED FILTER (làm bằng tay còn được không lý nào không viết ra được code)

[video=youtube;Rfq8XauWqz8]https://www.youtube.com/watch?v=Rfq8XauWqz8&feature=youtu.be[/video]
 
Upvote 0
Tuyệt chiêu gì đâu chứ! Như tôi đã nói ở trên: DÙNG ADVANCED FILTER (làm bằng tay còn được không lý nào không viết ra được code)

[video=youtube;Rfq8XauWqz8]https://www.youtube.com/watch?v=Rfq8XauWqz8&feature=youtu.be[/video]
Ra là vậy, quay lại macro chắc xong phải không? đáng học hỏi.
Tôi mới phát hiện đoạn code rất hay nè các bác, ai rành về nó hướng dẫn tôi học hỏi được không vậy?
Mã:
Private Sub cmdHideRows_Click()
    Dim dataSheet As Worksheet
    Set dataSheet = ThisWorkbook.Worksheets("Data")
    
    Dim row As Integer
    Dim cnt As Integer
    row = 1
    cnt = 0
    
    Do While WorksheetFunction.CountA(dataSheet.Range("A" & row & ":AG" & row)) <> 0
        If WorksheetFunction.CountA(dataSheet.Range("A" & row & ":AG" & row)) <= 2 Then
            If WorksheetFunction.CountA(dataSheet.Range("A" & row & ":AG" & row)) = 2 And _
                dataSheet.Range("A" & row).Value = Empty Then
            ElseIf dataSheet.Rows(row).EntireRow.Hidden = True Then
                dataSheet.Rows(row).EntireRow.Hidden = False
            Else
                dataSheet.Rows(row).EntireRow.Hidden = True
            End If
        End If
        row = row + 1
    Loop
    
    Call MsgBox("HIDE / UNHIDE thanh cong! ", vbOKOnly, "--------Hung86Excel--------")
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tốc độ code của Anh Thật tuyệt!. Cảm ơn Anh.
- Anh giải thích giúp em dòng nay:
If j <> 4 Then If Darr(i, j) <> "" Then GoTo Tiep
để em áp dụng vào file thật của em với!.
- Các anh thông cảm, do em không giám gửi file dữ liệu thật, chính vì thế mà em cũng đang tự làm khổ mình ạ!
Thêm cách khác, các bạn góp ý dùm
Mã:
Sub HideRow()
Dim Darr(), rng As Range, i As Long, j As Integer
Darr = Range("G1:AK" & Range("J12").End(xlDown).Row).Value
tmp = False
On Error Resume Next
For i = 12 To UBound(Darr)
    For j = 1 To UBound(Darr, 2)
        If j <> 4 Then If Darr(i, j) <> "" Then GoTo Tiep
    Next j
    If rng Is Nothing Then
        Set rng = Rows(i & ":" & i)
    Else
        Set rng = Application.Union(rng, Rows(i & ":" & i))
    End If
Tiep:
Next i
rng.Select
Selection.EntireRow.Hidden = True
Set rng = Nothing
End Sub
UnHide các dòng
Mã:
Sub UnHideRow()
Cells.Select
Selection.EntireRow.Hidden = False
Range("E12").Select
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em muốn dùng code là vì dòng tiêu đề của em còn nhiều thứ linh tinh,có nhiều dòng merge tùm lum nên chỉ lấy từ dòng 12 trở xuống
Tuyệt chiêu gì đâu chứ! Như tôi đã nói ở trên: DÙNG ADVANCED FILTER (làm bằng tay còn được không lý nào không viết ra được code)

[video=youtube;Rfq8XauWqz8]https://www.youtube.com/watch?v=Rfq8XauWqz8&feature=youtu.be[/video]
 
Upvote 0
Tốc độ code của Anh Thật tuyệt!. Cảm ơn Anh.
- Anh giải thích giúp em dòng nay: để em áp dụng vào file thật của em với!.
Mã:
If j <> 4 Then If Darr(i, j) <> "" Then GoTo Tiep
viết đầy đủ
Mã:
        If j <> 4 Then
            If Darr(i, j) <> "" Then GoTo Tiep
        End If
không xét cột J (số 4 là cột J), nếu từ cột G đến cột AK có giá trị (<>"") thì bỏ qua dòng i là dòng đang xét

mình mới viết lại code dùng chung cho Hide và UnHide
Mã:
Sub Hide_UnHideRowRow()
Dim Darr(), rng As Range, i As Long, j As Integer
Darr = Range("G1:AK" & Range("J12").End(xlDown).Row).Value
tmp = False
On Error Resume Next
For i = 12 To UBound(Darr)
    For j = 1 To UBound(Darr, 2)
        If j <> 4 Then If Darr(i, j) <> "" Then GoTo Tiep
    Next j
    If rng Is Nothing Then
        Set rng = Rows(i)
    Else
        Set rng = Application.Union(rng, Rows(i))
    End If
Tiep:
Next i
If rng.EntireRow.Hidden = True Then
    rng.EntireRow.Hidden = False
Else
    rng.EntireRow.Hidden = True
End If
Set rng = Nothing
End Sub
 
Upvote 0
Cảm ơn Anh!. Em sẽ nghiên cứu đề áp dụng vào file dữ liệu thật của em!. Khúc mắc ở đâu em sẽ hỏi các anh tiếp ạ!.
- Sao em không Thấy cái nút cảm ơn đâu để em cảm ơn Tất cả mọi người đã trả lời giúp em!
- Anh ơi biến tmp = False này khai báo là gì anh nhỉ
Mã:
If j <> 4 Then If Darr(i, j) <> "" Then GoTo Tiep
viết đầy đủ
Mã:
        If j <> 4 Then
            If Darr(i, j) <> "" Then GoTo Tiep
        End If
không xét cột J (số 4 là cột J), nếu từ cột G đến cột AK có giá trị (<>"") thì bỏ qua dòng i là dòng đang xét

mình mới viết lại code dùng chung cho Hide và UnHide
Mã:
Sub Hide_UnHideRowRow()
Dim Darr(), rng As Range, i As Long, j As Integer
Darr = Range("G1:AK" & Range("J12").End(xlDown).Row).Value
tmp = False
On Error Resume Next
For i = 12 To UBound(Darr)
    For j = 1 To UBound(Darr, 2)
        If j <> 4 Then If Darr(i, j) <> "" Then GoTo Tiep
    Next j
    If rng Is Nothing Then
        Set rng = Rows(i)
    Else
        Set rng = Application.Union(rng, Rows(i))
    End If
Tiep:
Next i
If rng.EntireRow.Hidden = True Then
    rng.EntireRow.Hidden = False
Else
    rng.EntireRow.Hidden = True
End If
Set rng = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom