Autofilter cột có cell hiện hành.

  • Thread starter Thread starter viendo
  • Ngày gửi Ngày gửi
Liên hệ QC

viendo

Tầm sư học Excel
Tham gia
5/10/07
Bài viết
516
Được thích
749
Nghề nghiệp
Kỹ Thuật Dệt
Tôi không biết VBA, chỉ tự thu marco rồi xài. Do vậy nên khi thu autofilter và khi chạy lại marco đã thu thì nó chỉ chạy autofilter ở cột lúc mình thu, nhưng mỗi ngày thì tôi muốn autofilter cột có cell hiện hành thôi và không biết sửa marco mình thu cho nó hiểu ý.
Mã:
Sub Del_Blank()
    ActiveCell.Select
    Selection.AutoFilter Field:=27, Criteria1:="="
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Selection.AutoFilter Field:=27
    ActiveCell.Select
End Sub
Như code tôi thu ở trên, nó chỉ biết autofilter ở cột 27 thôi, phiền các Anh Chị sửa giúp cho nó filter ở cột có cell hiện hành.
Ngoài ra nhờ viết thêm code kiểm tra, nếu có autofilter thì chạy code trên, nếu chưa có thì cảnh báo. Thanks
 
Tôi không biết VBA, chỉ tự thu marco rồi xài. Do vậy nên khi thu autofilter và khi chạy lại marco đã thu thì nó chỉ chạy autofilter ở cột lúc mình thu, nhưng mỗi ngày thì tôi muốn autofilter cột có cell hiện hành thôi và không biết sửa marco mình thu cho nó hiểu ý.
Mã:
Sub Del_Blank()
    ActiveCell.Select
    Selection.AutoFilter Field:=27, Criteria1:="="
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Selection.AutoFilter Field:=27
    ActiveCell.Select
End Sub
Như code tôi thu ở trên, nó chỉ biết autofilter ở cột 27 thôi, phiền các Anh Chị sửa giúp cho nó filter ở cột có cell hiện hành.
Ngoài ra nhờ viết thêm code kiểm tra, nếu có autofilter thì chạy code trên, nếu chưa có thì cảnh báo. Thanks
Hỏi thêm:
- Trong cột hiện hành, dử liệu bắt đầu từ dòng mấy?
 
Lần chỉnh sửa cuối:
Upvote 0
Hỏi thêm:
- Trong cột hiện hành, dử liệu bắt đầu từ dòng mấy?
File của em có autofilter dòng 4 từ cột A đến cột BS, từ dòng 5 xuống tới dòng 560 là dữ liệu.
Thông thường em sẽ để cell hiện hành ở dòng 5 và chạy code.
Mong Anh sửa giúp, thanks.
 
Lần chỉnh sửa cuối:
Upvote 0
File của em có autofilter dòng 4 từ cột A đến cột BS, từ dòng 5 xuống tới dòng 560 là dữ liệu.
Thông thường em sẽ để cell hiện hành ở dòng 5 và chạy code.
Mong Anh sửa giúp, thanks.
Thật ra tôi vẫn chưa rõ lắm về mục đích của bạn!
Theo như ý nghĩa của code thì sau khi bạn Filter xong, bạn chọn toàn bộ cột tại ActiveCell rồi xóa nội dung! Nhưng rõ ràng bạn đang Filer với điều kiện là Blanks cơ mà, vậy có dử liệu gì đâu để ClearContents
???
Tuy nhiên tôi gợi ý bạn 1 code dùng để AutoFilter theo cột của cell hiện hành, làm gì tiếp theo đó, tự bạn quyết định nhé:
PHP:
Sub Del_Blank()
  On Error Resume Next
  If ActiveSheet.AutoFilterMode = False Then
    MsgBox "Du lieu chua AutoFilter"
  Else
    With ActiveSheet.AutoFilter
      .Range.Parent.ShowAllData
      .Range.AutoFilter ActiveCell.Column - .Range.Column + 1, "="
    End With
  End If
End Sub
Code này tự xác định AutoFilter Range, tự xác định AutoFilter Field... Bạn muốn đặt ActiveCell ở bất cứ đâu cũng được, không nhất thiết phải ngay tiêu đề cột!
Vậy bạn muốn làm gì thì cứ đặt code vào dưới dòng:
.Range.AutoFilter ActiveCell.Column - .Range.Column + 1, "="
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không thạo VBA nên code viết hơi lởm khởm. Bạn xem file đính kèm có đúng ý bạn không ?.
Lưu ý: lọc bằng cách nhấn chuột phải vào ô nào bạn muốn lọc (điều kiện lọc là ô hiện hành). Muốn hiện tất cả bạn nhấn chuột phải vào dòng tiêu đề.
 

File đính kèm

Upvote 0
Thật ra tôi vẫn chưa rõ lắm về mục đích của bạn!
Theo như ý nghĩa của code thì sau khi bạn Filter xong, bạn chọn toàn bộ cột tại ActiveCell rồi xóa nội dung! Nhưng rõ ràng bạn đang Filer với điều kiện là Blanks cơ mà, vậy có dử liệu gì đâu để ClearContents
???
Mục đích đúng là xóa các cell blank anh à, mỗi ngày em lấy dữ liệu vào 1 cột bằng công thức, rồi dán giá trị (đã thu marco chạy ok), sau đó autofilter xóa các cell blank thì công thức dò lấy dữ liệu cuối của từng dòng mới đúng, nếu không nó lấy cell blank cuối này (công thức LOOKUP(2,1/(1-ISBLANK($J8:$BS8)),$J8:$BS8)), thực tình em cũng không hiểu tại sao nữa.

Code Anh chỉ em làm được rồi, thanks Anh nhiều
Mã:
Sub Del_Blank()
  On Error Resume Next
  If ActiveSheet.AutoFilterMode = False Then
    MsgBox "Du lieu chua AutoFilter"
  Else
    With ActiveSheet.AutoFilter
      .Range.Parent.ShowAllData
      .Range.AutoFilter ActiveCell.Column - .Range.Column + 1, "="
      .Range(Selection, Selection.End(xlDown)).Select
        .Selection.ClearContents
        .Range.Parent.ShowAllData
    End With
  End If
End Sub
 
Upvote 0
Mục đích đúng là xóa các cell blank anh à, mỗi ngày em lấy dữ liệu vào 1 cột bằng công thức, rồi dán giá trị (đã thu marco chạy ok), sau đó autofilter xóa các cell blank thì công thức dò lấy dữ liệu cuối của từng dòng mới đúng, nếu không nó lấy cell blank cuối này (công thức LOOKUP(2,1/(1-ISBLANK($J8:$BS8)),$J8:$BS8)), thực tình em cũng không hiểu tại sao nữa.
Ah... thì ra là xóa cell có chứa Empty text chứ không phải Blank cell
Ẹc... Ẹc...
Bạn nghiên cứu thêm đi, vẫn có thể cải tiến code được nữa đấy!
 
Upvote 0
Web KT

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

Back
Top Bottom