thanh tong
Thành viên hoạt động
- Tham gia
- 27/5/10
- Bài viết
- 122
- Được thích
- 11
Bạn xem File đúng ý bạn không nhé
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
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
Muốn như thế thì bạn làm:Ý 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.
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
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
Bạn xem File đúng ý bạn không nhé
Bnạ xem lai file nhé
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ế):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
Sub AnDong()
Dim Rng As Range
For Each Rng In Sheet1.[L3:L60]
Rng.EntireRow.Hidden = Rng.Value = 0
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ế):
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.PHP:Sub AnDong() Dim Rng As Range For Each Rng In Sheet1.[L3:L60] Rng.EntireRow.Hidden = Rng.Value = 0 Next End Sub
Sub AnDong()
Dim Rng As Range
For Each Rng In Sheet1.Range("Vungan")
Rng.EntireRow.Hidden = Rng.Value = 0
Next
End Sub
Bạn chọn L3:L6 rồi đặt cho nó 1 cái Name (Ví dụ: Vungan)
Code sửa như sau:
Giờ thì bạn thêm hay xoá dòng thoải máiMã:Sub AnDong() Dim Rng As Range For Each Rng In Sheet1.Range("Vungan") Rng.EntireRow.Hidden = Rng.Value = 0 Next End Sub
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
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
Để 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
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ỉ???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 )
Thế là xongMã: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
Đổi dữ liệu liên quan ở sheet2 rồi về sheet1 xem kết quả
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?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 đỡ!