Làm sao cho các dòng tự động ẩn (hiện)

Liên hệ QC
Code của Ndu quả là ngắn gọn, nhưng đó là để giải quyết bài 1: hễ A3 trống thì nguyên dòng 3 sẽ trống.
Còn yêu cầu của KingHeart (bài 6) dữ liệu là 5 cột, chỉ dòng nào trống cả 5 cột mới hide, còn A trống mà từ C đến E không trống thì không hide.

Vì các cột là liên tục, vì vậy ta có thể lợi dụng các cách sau :
  • Dùng Công thức : Counta, countif, Sum . .
  • Dùng cột phụ
  • Dùng Name với địa chỉ tương đối : Cũng là cột phụ thôi vì cũng phải xét giá trị của name đó tại từng Cell trong một cột nhất định
  • Dùng cách nối : Như của Cadafi
  • Dùng thuộc tính End(xlRight or xlLeft) : Có lẽ nhanh hơn
  • .......... chưa nghĩ ra
Thân!
 
MrBab đã viết:
Dùng cách nối : Như của Cadafi
Mình cũng dùng cách nối nhưng thêm 1 For - Next (bài 7). Còn Cadafi thì nối trực tiếp chỉ 1 For.
Còn Ndu viết:
Ndu đã viết:
Đây này! Code rất đơn giãn chứ có cần For với Next gì chứ!
Mình mới nhắc Ndu về yêu cầu bài 6, để nếu Ndu vẫn có cách không dùng ForNext thì post lên cho mình học hỏi í mà.
 
PHP:
Sub MyHide()
DK = (ActiveSheet.CommandButton1.Caption = "Hide")
ActiveSheet.[A1:A19].SpecialCells(4).EntireRow.Hidden = DK
End Sub
Code của Ndu quả là ngắn gọn, nhưng đó là để giải quyết bài 1: hễ A3 trống thì nguyên dòng 3 sẽ trống.
Còn yêu cầu của KingHeart (bài 6) dữ liệu là 5 cột, chỉ dòng nào trống cả 5 cột mới hide, còn A trống mà từ C đến E không trống thì không hide.
Dạ vâng! Cái này em biết...
Và nếu làm đúng theo yêu cầu của bạn gì đó (cả dòng đều rổng thì mới ẩn) em cũng sẽ dùng For, nhưng số lần quét ít hơn (dựa vào CurrentRegion)
PHP:
Option Explicit
Sub MyHide()
    Dim Temp As Range, DK As Boolean, i As Long, iR As Long
    DK = (ActiveSheet.CommandButton1.Caption = "Hide")
    For i = 1 To [A65536].End(xlUp).Row
      Set Temp = Cells(i, 1).CurrentRegion
      iR = Temp.Rows.Count
      Temp.Offset(iR, 0).Resize(1, Temp.Columns.Count).EntireRow.Hidden = DK
      i = i + iR
    Next
End Sub
Nhờ vào đoạn "nhảy cóc" i = i + iR
Đương nhiên code sẽ nhanh hơn (em nghĩ thế!)
Mình mới nhắc Ndu về yêu cầu bài 6, để nếu Ndu vẫn có cách không dùng ForNext thì post lên cho mình học hỏi í mà.
Trời ơi! HỌC HỎI uh? Hình như sư phụ quên chính sư phụ là người dìu dắt em mấy cái For... Next này
Ẹc... Ẹc...
 

File đính kèm

Lần chỉnh sửa cuối:
Đành vậy, nhưng trò vượt qua thầy rồi. Bi giờ mới thấy ứng dụng của CurrentRegion tuyệt thế nào. For chỉ chạy 1 số vòng đúng bằng số dòng cần hide. Già như mình làm gì nghĩ ra chứ!
 
Đành vậy, nhưng trò vượt qua thầy rồi. Bi giờ mới thấy ứng dụng của CurrentRegion tuyệt thế nào. For chỉ chạy 1 số vòng đúng bằng số dòng cần hide. Già như mình làm gì nghĩ ra chứ!

Vâng, đúng là CurrentRegion rất nhanh và mạnh. Và cũng cần nên nhớ rằng điểm mạng và cũng chính là điểm yếu của Current Region chính là : tính liên tục của dữ liệu

Chính vì thế, nếu như trên thì sử dụng nó rất tốt (và sáng tạo nữa), tuy nhiên chỉ cần thêm cột thứ 6 (hoặc các cột phải xét ít hơn cột dữ liệu - VD với dữ liệu trên nhưng xét ở 4 cột) thì lại sử dụng nó không chính xác.

Thân!
 
tuy nhiên chỉ cần thêm cột thứ 6 (hoặc các cột phải xét ít hơn cột dữ liệu - VD với dữ liệu trên nhưng xét ở 4 cột) thì lại sử dụng nó không chính xác.

Thân!
Đúng vậy! Dù sao thuật toán cũng dựa trên đặc điểm của dử liệu mà...
Nếu đặt trường hợp ta có 5 cột nhưng chỉ xét 4 cột thì tôi nghĩ trong code tôi sẽ có 1 đoạn Insert thêm 1 cột rổng (sao cho 4 cột tách biệt với cột thứ 5)... rồi tiếp theo sẽ dùng code ở trên... Xong việc sẽ xóa đi cột rổng ấy
(Nghĩ vậy thôi , chưa làm, nhưng chắc là được nhỉ)
 
Web KT

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

Back
Top Bottom