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
Hình như có 2ui luật mà, này nha:

Cần ẩn hàng nào mà các ô từ cột [K] đến cột [Ak] là trống (trãi) & cột [G] cũng i chang vậy!

Xin mời 'GiaiPhap' tiến tới đi nha!
Mã:
[COLOR=#ffffff]
Option Explicit
Sub AnCacDongTrong()
 Dim lRws As Long, lCol As Integer, J As Long
 Dim hRng As Range, Cls As Range, WF As Object

 Set WF = Application.WorksheetFunction
 Set hRng = Rows("65500:65500")
 If WF.CountA(Cells) > 0 Then
    lRws = Cells.Find(What:="*", After:=[A1], _
            SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lCol = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious).Column
    For J = lRws To 12 Step -1
        If Cells(J, "G").Value = "" Then
            If WF.CountBlank(Range(Cells(J, "K"), Cells(J, "AK"))) = 27 Then
                Cells(J, "G").EntireRow.Hidden = True
            Else
            End If
        End If
    Next J
 End If
End Sub
[/COLOR]
 
Lần chỉnh sửa cuối:
Upvote 0
Em không thấy nút cảm đâu các anh ơi**~**!. Đúng như anh doveandrose
tính từ cột F tới AK nếu trống hết thì tô màu , không kể cột J
Nếu trống hết thì ẩn các cột đó đi. Trong file em còn tô màu thiếu dòng 77. Các anh chị giúp em code và 1 cái nút bấm; bấm vào thì ẩn những dòng này; bấm cái nữa thì không ẩn; em cảm ơn các anh chị
có chứ anh , tính từ cột F tới AK nếu trống hết thì tô màu , không kể cột J ;;;;;;;;;;;;;;;;;;;;;;
 
Upvote 0
Em không thấy nút cảm đâu các anh ơi**~**!. Đúng như anh doveandrose Nếu trống hết thì ẩn các cột đó đi. Trong file em còn tô màu thiếu dòng 77. Các anh chị giúp em code và 1 cái nút bấm; bấm vào thì ẩn những dòng này; bấm cái nữa thì không ẩn; em cảm ơn các anh chị

ở trên các thầy có làm rồi kìa , bạn nhìn kĩ vào
 
Upvote 0
Bạn thử sử dụng file đính kèm xem đã đúng yêu cầu chưa nhé.
Chúc vui :)
 

File đính kèm

  • Hide_Unhide_.xlsm
    39.4 KB · Đọc: 8
Upvote 0
- Mong Các anh giúp cải thiện tốc độ cho code giúp em với, khi file nhiều dữ liệu, em bấm nó quay hoài rồi mới ẩn!.
- Sử dụng 1 nút để bấm, làm sao em bấm vào thì ẩn, bấm phát nữa thì nó hiện ra. Cảm ơn các Anh nhiều!.
Hình như có 2ui luật mà, này nha:

Cần ẩn hàng nào mà các ô từ cột [K] đến cột [Ak] là trống (trãi) & cột [G] cũng i chang vậy!

Xin mời 'GiaiPhap' tiến tới đi nha!
Mã:
[COLOR=#ffffff]
Option Explicit
Sub AnCacDongTrong()
 Dim lRws As Long, lCol As Integer, J As Long
 Dim hRng As Range, Cls As Range, WF As Object

 Set WF = Application.WorksheetFunction
 Set hRng = Rows("65500:65500")
 If WF.CountA(Cells) > 0 Then
    lRws = Cells.Find(What:="*", After:=[A1], _
            SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lCol = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious).Column
    For J = lRws To 12 Step -1
        If Cells(J, "G").Value = "" Then
            If WF.CountBlank(Range(Cells(J, "K"), Cells(J, "AK"))) = 27 Then
                Cells(J, "G").EntireRow.Hidden = True
            Else
            End If
        End If
    Next J
 End If
End Sub
[/COLOR]
 
Upvote 0
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ị!.
1 cách không dùng code
+ Nối các cột F-I và K-AK, kết quả cho vào cột phụ. Ví dụ cho vào cột AM
+ Dùng auto filter lọc tại cột AM.
- Để ẩn dòng, chọn lọc giá trị khác rỗng
- Để hiện dòng, chọn all

Nếu cần code thì cũng theo hướng này có lẽ nhanh hơn
 
Lần chỉnh sửa cuối:
Upvote 0
(1)- Mong Các anh giúp cải thiện tốc độ cho code giúp em với, khi file nhiều dữ liệu, em bấm nó quay hoài rồi mới ẩn!.

(2)- Sử dụng 1 nút để bấm, làm sao em bấm vào thì ẩn, bấm phát nữa thì nó hiện ra. Cảm ơn các Anh nhiều!.

(1) Tại bạn không nói ngay từ đầu thôi, ráng chịu đi!. . . . ;
Mà bạn còn cái tội nữa là dữ liệu của mình mà không biết nó có 2ui luật để ẩn/hiện hay không nữa?!?
Làm người có nhã í giúp bạn fải lần mò miết còn gì!

(2) Cái ni làm thì có thể mần được, nhưng chờ tăng tốc cái đã!


Lần sau bạn đừng để mọi người chạy theo bạn như những cù lần nữa nha!
 
Upvote 0
- Mong Các anh giúp cải thiện tốc độ cho code giúp em với, khi file nhiều dữ liệu, em bấm nó quay hoài rồi mới ẩn!.
- Sử dụng 1 nút để bấm, làm sao em bấm vào thì ẩn, bấm phát nữa thì nó hiện ra. Cảm ơn các Anh nhiều!.
Cách xử lý đơn giản như dưới:
1. Thực hiện đếm các cell có data (sử dụng CountA) theo từng dòng từ cột A đến AK (kết quả có giá trị từ 1 -> 19)
2. Trường hợp kết quả ở mục 1 nhỏ hơn hoặc bằng 2 thì kiểm tra tiếp ở điều kiện 2.1
2.1 Trường hợp kết quả ở mục 1 bằng 2 và giá trị ở cell đầu tiên của dòng đang kiểm tra = empty ("") thì không làm gì
2.2 Trường hợp khác 2.1 thì kiểm tra tiếp điều kiện 2.3
2.3 Nếu dòng đang kiểm tra là ẩn thì bỏ thuộc tính ẩn của dòng (hiển thị dòng trên workshet),
Nếu dòng đang kiểm tra là không ẩn thì set thuộc tính ẩn bằng true (ẩn dòng trên workshet)

Nếu bạn đã sử dụng Hide_Unhide_.xlsm mà cũng không đáp ứng được tốc độ thì bạn nên tách data của bạn thành nhiều sheet nhỏ và thực hiện lần lượt.
Tôi đã sửa lại thành 1 nút để khi thực hiện bấm 1 lần sẽ ẩn dòng, bấm lần tiếp theo sẽ hiện dòng. Còn cách xử lý thì vẫn giữ nguyên.
 

File đính kèm

  • Hide_Unhide_.xlsm
    37.2 KB · Đọc: 11
Upvote 0
Vâng em sẽ rút kinh nghiệm
(1) Tại bạn không nói ngay từ đầu thôi, ráng chịu đi!. . . . ;
Mà bạn còn cái tội nữa là dữ liệu của mình mà không biết nó có 2ui luật để ẩn/hiện hay không nữa?!?
Làm người có nhã í giúp bạn fải lần mò miết còn gì!

(2) Cái ni làm thì có thể mần được, nhưng chờ tăng tốc cái đã!


Lần sau bạn đừng để mọi người chạy theo bạn như những cù lần nữa nha!
 
Upvote 0
Cảm ơn bạn, nhưng mình chẳng áp dụng được vào file của mình. Mong bạn sửa lại giùm!.
Mà không biết khi áp dụng thì tốc độ thế nào?. Vì dữ liệu của mình nhiều, áp dụng mà nó cứ quay hoài thì cũng !$@!! lắm
Cách xử lý đơn giản như dưới:
1. Thực hiện đếm các cell có data (sử dụng CountA) theo từng dòng từ cột A đến AK (kết quả có giá trị từ 1 -> 19)
2. Trường hợp kết quả ở mục 1 nhỏ hơn hoặc bằng 2 thì kiểm tra tiếp ở điều kiện 2.1
2.1 Trường hợp kết quả ở mục 1 bằng 2 và giá trị ở cell đầu tiên của dòng đang kiểm tra = empty ("") thì không làm gì
2.2 Trường hợp khác 2.1 thì kiểm tra tiếp điều kiện 2.3
2.3 Nếu dòng đang kiểm tra là ẩn thì bỏ thuộc tính ẩn của dòng (hiển thị dòng trên workshet),
Nếu dòng đang kiểm tra là không ẩn thì set thuộc tính ẩn bằng true (ẩn dòng trên workshet)

Nếu bạn đã sử dụng Hide_Unhide_.xlsm mà cũng không đáp ứng được tốc độ thì bạn nên tách data của bạn thành nhiều sheet nhỏ và thực hiện lần lượt.
Tôi đã sửa lại thành 1 nút để khi thực hiện bấm 1 lần sẽ ẩn dòng, bấm lần tiếp theo sẽ hiện dòng. Còn cách xử lý thì vẫn giữ nguyên.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn copy data của bạn vào sheet Data ở file Hide_Unhide_.xlsm đó. Hiện tại thì tôi đang để data mẫu của bạn.
Sau mỗi lần bấm nút thì bạn mở sheet Data để xem data đã được HIDE và UNHIDE tương ứng.
 
Upvote 0
Bài này dùng Advanced Filter cái xoẹt ra ngay chứ khó khăn gì (dùng code hoặc làm bằng tay tùy ý)
Yêu cầu duy nhất: dữ liệu phải có dòng TIÊU ĐỀ
 
Upvote 0
Bạn Hung86excel không giúp thì thôi, còn đã giúp giúp chia sẻ code luôn vậy.
Theo quy luật ở #4 của ChanhTQ@ thì tôi làm cái code này bạn xem có đúng yêu cầu của mình hay chưa.
Mã:
Sub GPE()
Dim sCell As Range, MyRange As Range
For Each sCell In Range("J12", Range("J65000").End(xlUp))
    If Application.WorksheetFunction.CountBlank(sCell.Offset(, 1).Resize(, 27)) = 27 And Range("G19").Value = Empty Then
    If MyRange Is Nothing Then
        Set MyRange = sCell
    Else
        Set MyRange = Union(MyRange, Rows(sCell.Row))
    End If
    End If
Next sCell
If Not MyRange Is Nothing Then MyRange.EntireRow.Hidden = Not MyRange.EntireRow.Hidden
End Sub
 
Upvote 0
Theo quy luật ở #4 của ChanhTQ@ thì tôi làm cái code này bạn xem có đúng yêu cầu của mình hay chưa.
Mã:
Sub GPE()
Dim sCell As Range, MyRange As Range
For Each sCell In Range("J12", Range("J65000").End(xlUp))
    If Application.WorksheetFunction.CountBlank(sCell.Offset(, 1).Resize(, 27)) = 27 And Range("G19").Value = Empty Then
    If MyRange Is Nothing Then
        Set MyRange = sCell
    Else
        Set MyRange = Union(MyRange, Rows(sCell.Row))
    End If
    End If
Next sCell
If Not MyRange Is Nothing Then MyRange.EntireRow.Hidden = Not MyRange.EntireRow.Hidden
End Sub

Mọi tác động trực tiếp trên cell đều có thể giảm tốc độ tính toán, nhất là vơi dữ liệu lớn. Vậy nên bài này dùng vòng lập trên cell là quá dở
------------------------------------------------
Bạn Hung86excel không giúp thì thôi, còn đã giúp giúp chia sẻ code luôn vậy.
Chắc sợ người khác biết được tuyệt chiêu của mình chăng?
Mã:
Do While WorksheetFunction.[SIZE=4][COLOR=#ff0000]CountA[/COLOR][/SIZE](dataSheet.Range("A" & row & ":AG" & row)) <> 0
 
Upvote 0
Mọi tác động trực tiếp trên cell đều có thể giảm tốc độ tính toán, nhất là vơi dữ liệu lớn. Vậy nên bài này dùng vòng lập trên cell là quá dở
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.
Chắc sợ người khác biết được tuyệt chiêu của mình chăng?
Mã:
Do While WorksheetFunction.[SIZE=4][COLOR=#ff0000]CountA[/COLOR][/SIZE](dataSheet.Range("A" & row & ":AG" & row)) <> 0
Bạn ấy giấu code mà thầy lại mở code để người khác thấy rồi kìa.
 
Upvote 0
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
 
Upvote 0
Web KT
Back
Top Bottom