ẩnđòng theo điều kiện (1 người xem)

Liên hệ QC

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

thanh tong

Thành viên hoạt động
Tham gia
27/5/10
Bài viết
122
Được thích
11
Mình nhờ các bạn trên diễn đàn giúp mình một code để thực hiện ẩn dòng và hiện dòng có điều kiện
Mình ghi trong file đính kèm nhờ các bạn đọc và giúp mình nhé!
 

File đính kèm

Bạn xem File đúng ý bạn không nhé

Mình cho gia vị thêm một tí bạn nhé!

PHP:
Sub AnDong()
    Dim Rng As Range, MyRng As Range, Ham
    Set Ham = Application.WorksheetFunction
    Set MyRng = Range(Sheet1.[A5], Sheet1.[A65536].End(xlUp))
    On Error Resume Next
    With Sheet1.CommandButton1
        If .Caption = "Hide" Then
            For Each Rng In MyRng
                ''If Ham.CountIf(Rng.Offset(, 1).Resize(, 4), "0") = 4 Then Rng.EntireRow.Hidden = True
                ''Neu muon nhung dong rong va nhung gia tri trong hang bang 0 thi nen chon code nay:
                If Ham.Sum(Rng.Offset(, 1).Resize(, 4)) = 0 Then Rng.EntireRow.Hidden = True
            Next
        Else
            MyRng.EntireRow.Hidden = False
        End If
        .Caption = IIf(.Caption = "Hide", "UnHide", "Hide")
    End With
End Sub
 
Upvote 0
Minh cũng thêm 1 chút, chỉ với 1 hàm thì bỏ biến đối tượng Ham đi cho đỡ phức tạp

Mã:
Private Sub CommandButton1_Click()
    Dim Rng As Range, MyRng As Range
        Set MyRng = Range(Sheet1.[A5], Sheet1.[A65536].End(xlUp))
    On Error Resume Next
    With Sheet1.CommandButton1
       If .Caption = "Hide" Then
            For Each Rng In MyRng
            Rng.EntireRow.Hidden = WorksheetFunction.CountA(Rng.Resize(, 5)) = 0
            Next
        Else
            MyRng.EntireRow.Hidden = False
        End If
       .Caption = IIf(.Caption = "Hide", "UnHide", "Hide")
    End With
End Sub
 
Upvote 0
Ý của mình là nếu tổng giá trị trên hàng đó bằng 0 thì nó sẽ tự ẩn đi và nếu lớn hơn không thì nó tự hiện lên cơ.
Mình vừ xem file của cậu giúp hộ nó chưa giống ý mình,hơn nữa giá trị trong các ô đó phụ thuộc ở sheet khác.
 
Upvote 0
Ý của mình là nếu tổng giá trị trên hàng đó bằng 0 thì nó sẽ tự ẩn đi và nếu lớn hơn không thì nó tự hiện lên cơ.
Mình vừ xem file của cậu giúp hộ nó chưa giống ý mình,hơn nữa giá trị trong các ô đó phụ thuộc ở sheet khác.
Muốn như thế thì bạn làm:
Right Click vào sheet1 ==> View Code ==> chép em này vào (code của bạn Viethoai )
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
        For Each Rng In Sheet1.Range("A5:A" & Sheet1.[A65500].End(xlUp).Row)
            If Application.WorksheetFunction.CountIf(Rng.Offset(, 1).Resize(, 4), "0") = 4 Then Rng.EntireRow.Hidden = True
        Next
End Sub
Thế là xong
Đổi dữ liệu liên quan ở sheet2 rồi về sheet1 xem kết quả
 
Upvote 0
Hình như thế này mới đáp ứng yêu cầu của chủ topic
Private Sub Worksheet_Activate()
Dim Rng As Range
Sheet1.Range("A5:A" & Sheet1.[A65500].End(xlUp).Row).EntireRow.Hidden = False
For Each Rng In Sheet1.Range("A5:A" & Sheet1.[A65500].End(xlUp).Row)
If Application.WorksheetFunction.CountIf(Rng.Offset(, 1).Resize(, 4), "0") = 4 Then Rng.EntireRow.Hidden = True
Next
End Sub
 
Upvote 0


Cảm ơn bạn Viehoai rất nhiều! Đúng như mong đợi của mình.
Các Bạn cho mình hỏi là bây giờ mình muốn lấy code ở dưới cho sang file khác. File khác của mình cần ẩn các dòng có số 0 với địa chỉ L3:L60 thì phải sửa code như thế nào? Mong các bạn giúp đỡ. Cảm ơn các Bạn!


Sub andong()
Dim Rng As Range
Dim FirstR, EndR As Long
On Error Resume Next
FirstR = Sheet1.[F1].End(xlDown).Row + 1
For Each Rng In Sheet1.Range("F" & FirstR & ":F" & Sheet1.[A65500].End(xlUp).Row)
If Rng.Value = 0 Then Rng.EntireRow.Hidden = True
Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn Viehoai rất nhiều! Đúng như mong đợi của mình.
Các Bạn cho mình hỏi là bây giờ mình muốn lấy code ở dưới cho sang file khác. File khác của mình cần ẩn các dòng có số 0 với địa chỉ L3:L60 thì phải sửa code như thế nào? Mong các bạn giúp đỡ. Cảm ơn các Bạn!


Sub andong()
Dim Rng As Range
Dim FirstR, EndR As Long
On Error Resume Next
FirstR = Sheet1.[F1].End(xlDown).Row + 1
For Each Rng In Sheet1.Range("F" & FirstR & ":F" & Sheet1.[A65500].End(xlUp).Row)
If Rng.Value = 0 Then Rng.EntireRow.Hidden = True
Next
End Sub
Nếu vùng để kiểm tra cố định là vùng L3:L60 thì code chỉ cần như vầy là được (tất nhiên là chỗ Sheet1 bạn phải sửa cho phù hợp với thực tế):
PHP:
Sub AnDong()
    Dim Rng As Range
    For Each Rng In Sheet1.[L3:L60]
       Rng.EntireRow.Hidden = Rng.Value = 0
    Next
End Sub
Với code trên, nếu dòng đang bị ẩn mà có giá trị thay đổi (từ công thức nào đó) thành <> 0 thì khi chạy code, dòng đó tự động hiện lại.
 
Upvote 0
Nếu vùng để kiểm tra cố định là vùng L3:L60 thì code chỉ cần như vầy là được (tất nhiên là chỗ Sheet1 bạn phải sửa cho phù hợp với thực tế):
PHP:
Sub AnDong()
    Dim Rng As Range
    For Each Rng In Sheet1.[L3:L60]
       Rng.EntireRow.Hidden = Rng.Value = 0
    Next
End Sub
Với code trên, nếu dòng đang bị ẩn mà có giá trị thay đổi (từ công thức nào đó) thành <> 0 thì khi chạy code, dòng đó tự động hiện lại.

Cảm ơn Bạn Hoàng Nghĩa Phúc rất nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Sub AnDong()
Dim Rng As Range
For Each Rng In Sheet1.[L3:L60]
Rng.EntireRow.Hidden = Rng.Value = 0
Next
End Sub


- Các Bạn làm ơn cho mình hỏi là như trong code thì vùng tham chiếu cố định là L3:L6. Nhưng nó phát sinh 1 vấn để là khi trong file mình làm thì sẽ thêm dòng, làm cho vùng đấy có địa chỉ tham chiếu mới là L3:L9. Vậy có cách nào để code tự động giãn ra khi mình thêm dòng trong vùng tham chiếu.
- Và có một vấn đề là mình có 3 sheet cần ẩn. Vậy thì phải làm như thế nào. Mình xin gửi file đính kèm, mong các Bạn xem và giúp đỡ. Cảm ơn các Bạn nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn chọn L3:L6 rồi đặt cho nó 1 cái Name (Ví dụ: Vungan)
Code sửa như sau:

Mã:
Sub AnDong()
    Dim Rng As Range
    For Each Rng In Sheet1.Range("Vungan")
       Rng.EntireRow.Hidden = Rng.Value = 0
    Next
End Sub
Giờ thì bạn thêm hay xoá dòng thoải mái
Nếu cần sử lý 3 sheet thì cách đơn giản nhất là dùng 3 đoạn For...Next... như trên cho 3 sheet
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chọn L3:L6 rồi đặt cho nó 1 cái Name (Ví dụ: Vungan)
Code sửa như sau:

Mã:
Sub AnDong()
    Dim Rng As Range
    For Each Rng In Sheet1.Range("Vungan")
       Rng.EntireRow.Hidden = Rng.Value = 0
    Next
End Sub
Giờ thì bạn thêm hay xoá dòng thoải mái
Nếu cần sử lý 3 sheet thì cách đơn giản nhất là dùng 3 đoạn For...Next... như trên cho 3 sheet

Cảm ơn Bác Sealand Em thay code và làm theo Bác hướng dẫn ok rồi. Bây giờ em làm thêm cho 2 sheet còn lại. Do ko biết cách nên nó bị lỗi. Mong Bác và các Bạn vào xem và chỉ giúp. Cảm ơn Bác Sealand và các Bạn nhiều!
 

File đính kèm

Upvote 0
Để sử lý cho 3 sheet code bạn sửa như sau (Với sheet1 bạn đặt Name là Vungan1, Sheet2 là Vungan2....)

Mã:
Sub AnDong()
    Dim Rng As Range
    Dim Sh() As String
    ReDim Sh(1 To 3)
    Sh(1) = Sheet1.Name
    Sh(2) = Sheet2.Name
    Sh(3) = Sheet3.Name
    For i = 1 To 3
    For Each Rng In Worksheets(Sh(i)).Range("Vungan" & i)
     Rng.EntireRow.Hidden = Rng.Value = 0
    Next:    Next
End Sub
 

File đính kèm

Upvote 0
Để sử lý cho 3 sheet code bạn sửa như sau (Với sheet1 bạn đặt Name là Vungan1, Sheet2 là Vungan2....)

Mã:
Sub AnDong()
    Dim Rng As Range
    Dim Sh() As String
    ReDim Sh(1 To 3)
    Sh(1) = Sheet1.Name
    Sh(2) = Sheet2.Name
    Sh(3) = Sheet3.Name
    For i = 1 To 3
    For Each Rng In Worksheets(Sh(i)).Range("Vungan" & i)
     Rng.EntireRow.Hidden = Rng.Value = 0
    Next:    Next
End Sub


Em đã làm được theo sự hướng dẫn của Bác rồi. Cảm ơn Bác Sealand rất nhiều!
 
Upvote 0
Muốn như thế thì bạn làm:
Right Click vào sheet1 ==> View Code ==> chép em này vào (code của bạn Viethoai )
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
        For Each Rng In Sheet1.Range("A5:A" & Sheet1.[A65500].End(xlUp).Row)
            If Application.WorksheetFunction.CountIf(Rng.Offset(, 1).Resize(, 4), "0") = 4 Then Rng.EntireRow.Hidden = True
        Next
End Sub
Thế là xong
Đổi dữ liệu liên quan ở sheet2 rồi về sheet1 xem kết quả
Thật ra tất cả các cách hướng dẫn vẫn mang tính tương đối. Nếu tác giả chỉnh sửa số liệu ngay tại sheet có số hàng cần ẩn thì muốn nó hide hay unhide cũng phải nhảy qua sheet khác rồi quay lại sheet này mới có "ép phê". Như vậy, thà cứ việc thay đổi số liệu thoải mái cho đã, rồi nhấn nút cái "kịt" là xong, chẳng lẻ lại lười biếng tới mức không nhấp được cái nút nhỉ???
 
Upvote 0
Các Bạn làm ơn giúp mình sửa code để chỉ thực hiện Hide và Show All từng sheet 1.

Khi mình dùng ứng dụng code vào file của mình. File của mình thực tế có 10 sheet, mỗi sheet có rất nhiều dòng. Cho nên khi nhấn nút Hide và Show All nó thực hiện một lúc 10 sheet luôn cho nên chậm và đợi lâu quá. Mong các Bạn chỉ và sửa giúp Code để mình cần thực hiện sheet nào ẩn hoặc ko ẩn thì chỉ sheet đó ẩn hoặc ko ẩn thôi. Cảm ơn các Bạn đã giúp đỡ!
 

File đính kèm

Upvote 0
Các Bạn làm ơn giúp mình sửa code để chỉ thực hiện Hide và Show All từng sheet 1.

Khi mình dùng ứng dụng code vào file của mình. File của mình thực tế có 10 sheet, mỗi sheet có rất nhiều dòng. Cho nên khi nhấn nút Hide và Show All nó thực hiện một lúc 10 sheet luôn cho nên chậm và đợi lâu quá. Mong các Bạn chỉ và sửa giúp Code để mình cần thực hiện sheet nào ẩn hoặc ko ẩn thì chỉ sheet đó ẩn hoặc ko ẩn thôi. Cảm ơn các Bạn đã giúp đỡ!
Vậy thì bạn sử dụng 1 Form hiện tất cả các Sheet mà bạn cần và có 3 nút "Show", "Hide", và "Cance" để bạn chọn ẩn hoặc hiện các Sheet bạn mong muốn đwọc không?
 
Upvote 0
Mỗi sheet đều đặt Hide và Show all. Để vào sheet nào cần thực hiện thì mình chọn luôn ở sheet đó cho tiện. Như trong file mình đã đặt sẵn. Bạn xem file đính kèm và sửa giúp mình nhé?
 

File đính kèm

Upvote 0
Mỗi sheet đều đặt Hide và Show all. Để vào sheet nào cần thực hiện thì mình chọn luôn ở sheet đó cho tiện. Như trong file mình đã đặt sẵn. Bạn xem file đính kèm và sửa giúp mình nhé?
Thử file này xem!
Code trong file chỉ vầy:
PHP:
Sub HideAndUnHide()
  Dim Btt As Button
  With Range([L2], [L65536].End(xlUp))
    Set Btt = .Parent.Buttons("Btt1")
    If Btt.Characters.Text = "Hide" Then
      .AutoFilter 1, ">0", , , False
      Btt.Characters.Text = "UnHide"
    Else
      .Parent.AutoFilterMode = False
      Btt.Characters.Text = "Hide"
    End If
  End With
End Sub
Lưu ý rằng tôi dùng Button được vẽ từ thanh Forms (không giống như CommandButton mà bạn đang dùng)
Muốn chạy code ở sheet khác, chỉ việc copy Button paste sang sheet khác là được
Ngoài ra, chẳng dùng Define name nào cả
 

File đính kèm

Upvote 0
Upvote 0
Thử file này xem!
Code trong file chỉ vầy:
PHP:
Sub HideAndUnHide()
  Dim Btt As Button
  With Range([L2], [L65536].End(xlUp))
    Set Btt = .Parent.Buttons("Btt1")
    If Btt.Characters.Text = "Hide" Then
      .AutoFilter 1, ">0", , , False
      Btt.Characters.Text = "UnHide"
    Else
      .Parent.AutoFilterMode = False
      Btt.Characters.Text = "Hide"
    End If
  End With
End Sub
Lưu ý rằng tôi dùng Button được vẽ từ thanh Forms (không giống như CommandButton mà bạn đang dùng)
Muốn chạy code ở sheet khác, chỉ việc copy Button paste sang sheet khác là được
Ngoài ra, chẳng dùng Define name nào cả


Các bạn cho mình hỏi chút? Giả sử sheet4 cột cần ẩn nó lại thay đổi nằm ở cột M . Tức là cột cần ẩn ở sheet4 nó ko giống với các sheet khác trong file hiện tại là cột L . Mình có gửi file đính kèm. Mong các bạn sửa giúp. Cảm ơn các Bạn đã quan tâm và giúp đỡ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Các bạn cho mình hỏi chút? Giả sử sheet4 cột cần ẩn nó lại thay đổi nằm ở cột M . Tức là cột cần ẩn ở sheet4 nó ko giống với các sheet khác trong file hiện tại là cột L . Mình có gửi file đính kèm. Mong các bạn sửa giúp. Cảm ơn các Bạn đã quan tâm và giúp đỡ!
Dù dữ liệu thế nào thì cũng phải có cái gì đó để nhận biết. Như file của bạn, tôi dùng từ khóa "Những dòng ko phát sinh" để nhận biết cột cần tìm
PHP:
Sub HideAndUnHide()
  Dim Btt As Button, fRng As Range
  Set fRng = Cells.Find(Evaluate("Tmp"), , , xlWhole)
  If Not fRng Is Nothing Then
    With Range(fRng, Cells(65536, fRng.Column).End(xlUp))
      Set Btt = .Parent.Buttons("Btt1")
      If Btt.Characters.Text = "Hide" Then
        .AutoFilter 1, ">0", , , False
        Btt.Characters.Text = "UnHide"
      Else
        .Parent.AutoFilterMode = False
        Btt.Characters.Text = "Hide"
      End If
    End With
  End If
End Sub
Trong code này có Evaluate("Tmp"), với Tmp là name chứa từ khóa "Những dòng ko phát sinh"
 

File đính kèm

Upvote 0
Thì như vầy đi:

PHP:
Sub HideAndUnHide()
  Dim Btt As Button, MyRng As Range
  Set MyRng = IIf(ActiveSheet.Name = "Sheet4", Range([M2], [M65536].End(xlUp)), Range([L2], [L65536].End(xlUp)))
  With MyRng
    Set Btt = .Parent.Buttons("Btt1")
    If Btt.Characters.Text = "Hide" Then
      .AutoFilter 1, ">0", , , False
      Btt.Characters.Text = "UnHide"
    Else
      .Parent.AutoFilterMode = False
      Btt.Characters.Text = "Hide"
    End If
  End With
End Sub
Đúng là Thầy NDU siêu tốc và tổng quát thiệt!!!

Em thêm 1 cái xlOr nữa cho tổng quát hơn nếu có tính luôn chuỗi!

PHP:
Sub HideAndUnHide()
  Dim Btt As Button, fRng As Range
  Set fRng = Cells.Find(Evaluate("Tmp"), , , xlWhole)
  If Not fRng Is Nothing Then
    With Range(fRng, Cells(65536, fRng.Column).End(xlUp))
      Set Btt = .Parent.Buttons("Btt1")
      If Btt.Characters.Text = "Hide" Then
        .AutoFilter 1, ">0", xlOr, "<>", False
        Btt.Characters.Text = "UnHide"
      Else
        .Parent.AutoFilterMode = False
        Btt.Characters.Text = "Hide"
      End If
    End With
  End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đầu giờ có chút việc giờ mới gủi thấy mọi người đã đi khá xa, thôi thì như 1 tham khảo vậy
 

File đính kèm

Upvote 0
Dù dữ liệu thế nào thì cũng phải có cái gì đó để nhận biết. Như file của bạn, tôi dùng từ khóa "Những dòng ko phát sinh" để nhận biết cột cần tìm
PHP:
Sub HideAndUnHide()
  Dim Btt As Button, fRng As Range
  Set fRng = Cells.Find(Evaluate("Tmp"), , , xlWhole)
  If Not fRng Is Nothing Then
    With Range(fRng, Cells(65536, fRng.Column).End(xlUp))
      Set Btt = .Parent.Buttons("Btt1")
      If Btt.Characters.Text = "Hide" Then
        .AutoFilter 1, ">0", , , False
        Btt.Characters.Text = "UnHide"
      Else
        .Parent.AutoFilterMode = False
        Btt.Characters.Text = "Hide"
      End If
    End With
  End If
End Sub
Trong code này có Evaluate("Tmp"), với Tmp là name chứa từ khóa "Những dòng ko phát sinh"


Mong các bạn xem file và giúp đỡ
 

File đính kèm

Upvote 0
Cái tên "Cột cần ẩn" ấy, thực tế nó là cái gì thì bạn cứ vào Define name, sửa lại y chang thế là được. Tôi đã nói ở trên là tôi tìm cột theo từ khóa rồi mà

"Cột cần ẩn" thực ra mình ghi chú vậy thôi. Mình muốn ẩn theo khoảng như ở sheet1 là L3:L12 và muốn là khi mình thêm ròng đến L20 thì trong code nó cũng tự động giãn dòng theo là L3:L20.
 
Upvote 0
"Cột cần ẩn" thực ra mình ghi chú vậy thôi. Mình muốn ẩn theo khoảng như ở sheet1 là L3:L12 và muốn là khi mình thêm ròng đến L20 thì trong code nó cũng tự động giãn dòng theo là L3:L20.

Bạn cứ thử đi bao nhiêu dòng mà chẳng được! 65 ngàn dòng cũng OK
 
Upvote 0
Bạn cứ thử đi bao nhiêu dòng mà chẳng được! 65 ngàn dòng cũng OK

Nhưng mà theo khoảng kiểu L$3:L$12 thì tốt. Bởi vì nếu trong file ở dưới lại có những phát sinh khác mà nó cứ tự động làm một nhát từ trên xuống đến 65.000 thì nó ẩn hết cả những vùng mình ko muốn ẩn
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng mà theo khoảng kiểu L$3:L$12 thì tốt. Bởi vì nếu trong file ở dưới lại có những phát sinh khác mà nó cứ tự động làm một nhát từ trên xuống đến 65.000 thì nó ẩn hết cả những vùng mình ko muốn ẩn

Với Code của Thầy NDU, bạn chỉnh lại theo cái này:

With Range(fRng, Cells(65536, fRng.Column).End(xlUp))

Cái số màu đỏ ấy, bạn chỉnh thành 12 hay 20 gì đó là được!
 
Upvote 0
Với Code của Thầy NDU, bạn chỉnh lại theo cái này:

With Range(fRng, Cells(65536, fRng.Column).End(xlUp))

Cái số màu đỏ ấy, bạn chỉnh thành 12 hay 20 gì đó là được!


Chỉnh lại là 20 chẳng hạn. Nhưng khi mình thêm 20 dòng nữa. Thì lúc này phải lấy trong khoảng L3:L40 còn code mà để là 20 theo bạn nói thì code nó sẽ lấy là L1:L20 thôi mà trên thực tế mình đã thêm 20 dòng cơ mà bạn.
 
Upvote 0
Chỉnh lại là 20 chẳng hạn. Nhưng khi mình thêm 20 dòng nữa. Thì lúc này phải lấy trong khoảng L3:L40 còn code mà để là 20 theo bạn nói thì code nó sẽ lấy là L1:L20 thôi mà trên thực tế mình đã thêm 20 dòng cơ mà bạn.

Bạn cứ sửa vầy nè:

With Range(fRng, Cells(40, fRng.Column).End(xlUp))

Bạn gửi cái File đó lên đi tôi sẽ hướng dẫn bạn cụ thể.
 
Upvote 0
Mình tham gia thế này, nếu số lượng Sheet nhiều mà quản Name khó khăn thì mình dùng mỗi sheet 1 ô nào đó để ghi địa chỉ vùng lọc. Ví dụ vùng lọc là L13:L16, mình dùng 1 ô chẳng hạn R1 ngoài tất cả và có thể ẩn nó đi ta nhập công thức:

=CELL("address",L13)&":"&CELL("address",L16)

Vậy là nếu thêm hay xoá dòng trước vùng nó sẽ tự động điều chỉnh. Nếu thêm trong vùng nó cũng tự động giãn ra. Khi nào lọc ta lấy tên vùng bằng ô R1
Củ chuối 1 chút nhưng dễ làm và dễ sử lý
 
Upvote 0
Mình gửi ví dụ cụ thể như bài #36 đã nêu.

Mình viết 1 code chung như sau để ở cấp ThisWorkbook
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim Rng As Range
  On Error GoTo thoat
    For Each Rng In Sh.Range(Sh.[R1])
     Rng.EntireRow.Hidden = Rng.Value = 0
    Next
thoat:
End Sub
Vậy là cứ mở sheet nào thì mới ẩn sheet ấy và chỉ ẩn trong vùng địa chỉ do công thức ghi trong ô R1 mỗi sheet.
Cấu trúc gọn, dễ sử lý.

Lưu ý: Thêm vào đầu Code câu lệnh On Error goto Thoat như mình thên ở Code trên để khi sheet nào không có gì tại ô R1 thì không lọc và không lỗi
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh Sealand làm ơn giúp Em sửa code để mỗi sheet đều có nốt nhấn Hide. Cái Userform em làm vào file số liệu của em nó khó quá. Mong A sửa lại làm mỗi sheets một cái nốt nhấn Hide.
 

File đính kèm

Upvote 0
Qua file ví dụ mình mới hiểu ẩn tất cả các dòng hoàn toàn không dữ liệu đúng không?
Nếu đã dùng nút nhấn cho mỗi trang thì ta viết 1 code chung như sau:

Mã:
Sub AnDong()
Dim Rg As Range
Application.ScreenUpdating = False
With ActiveSheet
For Each Rg In .Range(.[A4], .[A65536].End(3).Offset(-2))
If WorksheetFunction.CountA(Rg.Resize(, 5)) = 0 Then
Rg.EntireRow.Hidden = True
Else
Rg.EntireRow.Hidden = False
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Sau đó tất cả các nút mỗi Sheet đều gọi code này
 

File đính kèm

Upvote 0
Qua file ví dụ mình mới hiểu ẩn tất cả các dòng hoàn toàn không dữ liệu đúng không?
Nếu đã dùng nút nhấn cho mỗi trang thì ta viết 1 code chung như sau:

Mã:
Sub AnDong()
Dim Rg As Range
Application.ScreenUpdating = False
With ActiveSheet
For Each Rg In .Range(.[A4], .[A65536].End(3).Offset(-2))
If WorksheetFunction.CountA(Rg.Resize(, 5)) = 0 Then
Rg.EntireRow.Hidden = True
Else
Rg.EntireRow.Hidden = False
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Sau đó tất cả các nút mỗi Sheet đều gọi code này

Đúng như ý của Em rồi. Cảm ơn Anh Sealand rất nhiều!
 
Upvote 0
Đúng như ý của Em rồi. Cảm ơn Anh Sealand rất nhiều!

Nghĩ cũng lạ, bạn nói bạn chỉ cần từ 40 dòng, còn phần bên dưới bạn có thể dùng đến những phần khác, thế nhưng, code của Anh Sealand viết có đoạn:
For Each Rg In .Range(.[A4], .[A65536].End(3).Offset(-2))
Thì bạn cho rằng "Đúng như ý của Em rồi". Thật chẳng hiểu làm sao!!!

Nhưng mà theo khoảng kiểu L$3:L$12 thì tốt. Bởi vì nếu trong file ở dưới lại có những phát sinh khác mà nó cứ tự động làm một nhát từ trên xuống đến 65.000 thì nó ẩn hết cả những vùng mình ko muốn ẩn

Chỉnh lại là 20 chẳng hạn. Nhưng khi mình thêm 20 dòng nữa. Thì lúc này phải lấy trong khoảng L3:L40 còn code mà để là 20 theo bạn nói thì code nó sẽ lấy là L1:L20 thôi mà trên thực tế mình đã thêm 20 dòng cơ mà bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nghĩ cũng lạ, bạn nói bạn chỉ cần từ 40 dòng, còn phần bên dưới bạn có thể dùng đến những phần khác, thế nhưng, code của Anh Sealand viết có đoạn:
For Each Rg In .Range(.[A4], .[A65536].End(3).Offset(-2))
Thì bạn cho rằng "Đúng như ý của Em rồi". Thật chẳng hiểu làm sao!!!

Hi, tay này lại nóng tính rồi. Code của mình không sử lý qua vùng chân báo cáo đâu nha!!!

Ndu 96081631 đã viết:
Bây giờ là gần 8 giờ sáng... Không biết chú Learning_Excel có cách gì mà đi đến tương lai được vậy ta?

Đây là sử lý bài trên 2 máy khác nhau và 1 máy sai giờ hệ thống rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Bây giờ là gần 8 giờ sáng... Không biết chú Learning_Excel có cách gì mà đi đến tương lai được vậy ta?

Không phải trên 2 máy hay có cách gì vượt trước tương lai được đâu, lẽ ra nó phải ghi là 00:05 AM mới đúng, cái này là lỗi của hệ thống phần mềm diễn đàn này đấy chứ! Nếu không nó đã là 12:05 PM rồi, làm gì qua 12 giờ mà còn AM nhỉ???
 
Upvote 0
Thử chút xem sao?
Mình đổi giờ của máy
 
Upvote 0

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

Back
Top Bottom