Cách xóa hàng đã lọc trong excel vba
dòng dưới cùng. Tìm hiểu cách sử dụng macro VBA để xóa các hàng dựa trên các giá trị hoặc điều kiện của ô. Bao gồm video hướng dẫn và mã mẫu Show
Cấp độ kỹ năng. Trung cấp Video hướng dẫnXem trên YouTube và Đăng ký Kênh của chúng tôiTải xuống tệp ExcelĐây là tệp tôi sử dụng trong video ở trên có chứa các ví dụ về mã macro VBA VBA-Macro-to-Delete-Rows-Based-on-Cell-Value. zip Tải xuống Sử dụng Macro để xóa hàng dựa trên giá trị ôQuy trình chuẩn bị dữ liệu của bạn có bao gồm việc xóa các hàng giống nhau dựa trên một điều kiện không? Quá trình tổng thể là hai bước đơn giản
Quá trình giải thíchDưới đây là hình ảnh của tập dữ liệu có một số ô trống trong cột E (Sản phẩm). Bạn có thể thấy một trong những ô trống đó là E6 Để xóa các hàng có các ô trống như thế này, trước tiên, macro sẽ áp dụng bộ lọc cho cột sản phẩm Tiếp theo, macro chỉ cần xóa tất cả các hàng hiển thị do bộ lọc để lại. Nó sử dụng phương thức SpecialCells để tạo tham chiếu đến các ô hiển thị Điều này giống như sử dụng menu Go To Special (phím tắt Alt+;) để chọn khoảng trống. Kiểm tra bài viết và video của tôi về cách sao chép và dán các ô hiển thị để tìm hiểu thêm Cuối cùng, macro cũng có thể xóa các bộ lọc để bạn có thể xem toàn bộ phạm vi dữ liệu, trừ đi các hàng bạn đã xóa Đó là macro 2 hoặc 3 bước đơn giản sẽ tiết kiệm thời gian thực hiện quy trình này theo cách thủ công Lưu ý quan trọng. Tôi đã thêm một bước để xóa tất cả các bộ lọc trong phạm vi hoặc Bảng ở đầu macro. Điều này đảm bảo rằng không có bộ lọc nào được áp dụng cho các cột khác có thể khiến các hàng bổ sung bị lọc ra Chân thành cảm ơn Hoàng đã chỉ ra điều này trên video YouTube Mã vĩ mô VBAMã VBA dưới đây có thể được sao chép/dán vào Trình soạn thảo VB. Code cũng có trong file Excel ở phần Download bên trên Sub Delete_Rows_Based_On_Value() Bạn sẽ chỉ cần cập nhật các tham chiếu Bảng tính và Phạm vi cho tệp cụ thể của mình Tránh cảnh báo bật lênKhi bạn chạy macro, bạn sẽ nhận được thông báo cảnh báo bật lên có nội dung "Xóa toàn bộ hàng trang tính?" Nếu bạn muốn chạy macro mà không làm gián đoạn hộp bật lên đó, bạn chỉ cần xóa dấu nháy đơn trước hai dòng mã bắt đầu bằng Ứng dụng. Cảnh báo hiển thị Vì vậy, phần đó của macro bây giờ trông như thế này '2. Delete Rows Ứng dụng. Thuộc tính DisplayAlerts là một chuyển đổi để bật/tắt cảnh báo cảnh báo. Đặt nó thành Sai sẽ tắt cảnh báo. Đây là những cảnh báo bạn có thể thấy từ Excel khi xóa phạm vi, xóa trang tính, đóng mà không lưu, v.v. Áp dụng Macro cho các bảngNếu dữ liệu của bạn nằm trong Bảng Excel thay vì chỉ một dải ô, bạn vẫn có thể xóa các hàng dựa trên nội dung ô bằng cách sử dụng macro. Mã gần như giống nhau, nhưng được điều chỉnh một chút để áp dụng cho Bảng. Đây là mã bạn sẽ sử dụng cho Bảng Sub Delete_Rows_Based_On_Value_Table() Macro bổ sungTôi cũng đã bao gồm một số macro bổ sung để giúp tùy chỉnh thêm quy trình Thông báo cảnh báo tùy chỉnhBạn có thể tạo hộp thông báo tùy chỉnh trước khi xóa hàng, thay vì cảnh báo xóa hàng mặc định của Excel. Macro bên dưới cũng cho bạn biết số hàng nó sẽ xóa và hỏi bạn có muốn tiếp tục không Sub Delete_Rows_Based_On_Value_Table_Message() Đây là giao diện của hộp bật lên tùy chỉnh Cửa sổ bật lên này chỉ dùng để kiểm tra trước khi xóa các hàng. Đó là một cách tuyệt vời để kiểm tra lại mọi thứ xem có ổn không trước khi xóa. Nó cũng ngăn bạn hoặc người dùng của bạn vô tình chạy macro Hãy xem video của tôi về cách thêm hộp thông báo Có/Không trước khi macro chạy để biết chi tiết về mã này. Đây là một phần trong loạt video gồm 4 phần của tôi về Sổ làm việc Macro cá nhân Xóa hàng dựa trên nhiều tiêu chíBạn cũng có thể xóa các hàng bằng macro bằng nhiều tiêu chí. Trong video ở trên, tôi lọc các hàng có cả trường Sản phẩm trống và ngày trước 1/1/2015 Sub Delete_Rows_Based_On_Multiple_Values() Điều này cho phép bạn xóa các hàng dựa trên các giá trị trong nhiều cột. Việc lọc về cơ bản sử dụng logic AND giữa các cột và tất cả các điều kiện phải được đáp ứng Nếu bạn muốn sử dụng logic OR khi đáp ứng bất kỳ điều kiện nào, bạn có thể chạy nhiều macro hoặc tạo công thức trong cột trợ giúp với logic Tùy thuộc vào logic, có thể dễ dàng nhất để tạo hai macro riêng biệt. Bạn có thể đặt tất cả mã trong một macro hoặc tạo một macro khác để gọi từng macro. Đây là một ví dụ về macro đó có thể trông như thế nào Sub Delete_Rows() Phương pháp này cũng cho phép bạn chạy từng macro riêng lẻ Xóa hàng dựa trên tiêu chí do người dùng chỉ địnhDaniel và Bob đã hỏi một câu hỏi hay trong phần bình luận bên dưới. Họ muốn người dùng của tệp có thể chỉ định tiêu chí lọc, thay vì mã hóa cứng trong macro Chúng ta có thể sử dụng Ứng dụng. Phương thức InputBox để yêu cầu người dùng nhập tiêu chí Phương thức InputBox tạo hộp thông báo bật lên cho phép người dùng nhập vào hộp văn bản. Giá trị trong hộp văn bản được chuyển trở lại macro và được lưu trữ trong một biến Đây là mã VBA. Tôi cũng đã thêm nó vào tệp mẫu trong phần tải xuống ở trên Sub Delete_Rows_User_Input() Điền trước tên người dùng vào ô nhập liệuDaniel cũng có câu hỏi về việc đặt tiêu chí lọc cho tên người dùng hiện tại. Ứng dụng. Thuộc tính Tên người dùng thực sự trả về giá trị này miễn là người dùng đã đặt đúng giá trị đó trong Office/Excel Chúng ta có thể sử dụng giá trị này làm giá trị tham số Mặc định trong hộp nhập liệu sCriteria = Application.InputBox(Prompt:="Please enter the filter criteria for the Product column." _ Người dùng vẫn có thể cần thay đổi tên nếu nó không khớp với giá trị trong cột trang tính mà bạn đang lọc, nhưng bạn cũng có thể đồng bộ hóa tên đó với người dùng để tiết kiệm nhiều thời gian cho họ chủ đề liên quanKiểm tra bài viết của tôi về các chủ đề tương tự là tốt
Phần kết luậnCác macro như thế này có thể đặc biệt hữu ích nếu bạn đang tìm cách dọn dẹp dữ liệu và loại bỏ các mục nhập mà bạn biết là mình không cần đến–có thể vì chúng quá cũ hoặc chúng chỉ mới hoàn thành một phần Có rất nhiều cách để hoàn thành nhiệm vụ này. Một cách tiếp cận phổ biến khác là lặp qua các ô và kiểm tra từng giá trị của chúng Tuy nhiên, tôi thường sử dụng phương pháp này vì sử dụng các bộ lọc tích hợp sẵn trong Excel có thể nhanh hơn rất nhiều. Nó cũng cho phép chúng tôi xem trước phạm vi trước khi chúng tôi xóa nó Bạn sẽ sử dụng những macro này để làm gì? . Cảm ơn bạn. 🙂 Trước đó Cách tạo các nút macro trong trang tính Excel Tiếp theo Cách sử dụng Macro VBA để sao chép dữ liệu sang sổ làm việc khác Bạn cũng có thể thíchCách tìm kiếm danh sách thả xuống xác thực dữ liệu trong ExcelChuyển đến ô nguồn của công thức XLOOKUP3 cách để điền vào các ô trống trong ExcelMacro VBA để tạo kết nối truy vấn nguồn cho tất cả các bảng ExcelSam Sammito nói. Thông tin tốt Jon. làm rất tốt.
Terence Hayes nói. Rất thú vị, tôi không nghĩ sẽ làm theo cách đó.
Daniel Rippe nói. Này Jon, Bạn sẽ sửa đổi các macro này như thế nào để chúng lấy đầu vào cho các tiêu chí? Có cách nào để nói Trống làm đầu vào và cách nó sẽ được gửi đến phần Tiêu chí của Bộ lọc tự động không? Điều này sẽ cho phép mọi người sử dụng nó cho bất kỳ dữ liệu nào họ có Tôi đoán việc nhận nhiều đầu vào sẽ khó thực hiện hơn một chút nhưng chúng ta sẽ thực hiện nó như thế nào?
Sudsy nói. Xin chào John, như mọi khi rất nhiều thông tin. Hoàn toàn mới đối với VBA nên đánh giá cao cách tiếp cận chi tiết và chi tiết của bạn. Có vẻ như phạm vi được mã hóa cứng cho bộ lọc (B3. G1000) Có khó để xác định phạm vi này một cách nhanh chóng?. hầu hết các tình huống tôi gặp phải, phạm vi thay đổi từ ngày này sang ngày khác Tôi muốn bắt đầu ghi lại các đoạn trích để sử dụng lại, đồng thời xác định và ghi lại vô số cách để xác định phạm vi thao tác nằm ở đầu danh sách của tôi. Cảm ơn cho bất kỳ hướng
Bob Bacon nói. Xin chào Jon – Cảm ơn về một chủ đề liên quan khác và lời giải thích được thực hiện hoàn hảo của bạn (và hình ảnh đi kèm. ) Tôi tự hỏi liệu bạn có cân nhắc việc thêm mã vba hỏi người dùng tiêu chí lọc/xóa của họ không, sau đó áp dụng phản hồi của họ cho dữ liệu. Phương pháp này loại bỏ nhu cầu viết nhiều hơn một bộ hướng dẫn macro. Bob
GaryZ nói. Jon, macro của bạn cực kỳ hữu ích Khi tôi sử dụng macro thông báo cảnh báo tùy chỉnh, nó sẽ ngắt đếm các hàng với thông báo lỗi. “424. đối tượng được yêu cầu" Tôi đang sử dụng mã chính xác của bạn lRows = WorksheetFunction. Tổng phụ(103, lo. Danh sáchCột(1). Dữ LiệuCơ ThểPhạm Vi. SpecialCells(xlCellTypeVisible)) Việc tôi sắp xếp tệp csv thay vì tệp excel có tạo ra sự khác biệt không? Cảm ơn
Edil nói. Cảm ơn một lần nữa Jon, Một bộ macro khác rất hữu ích đối với tôi Cùng với macro “xóa hàng trống”, điều này rất tiện dụng Daryl Duren nói. Jon, tôi thích video của bạn và hướng dẫn của bạn. Bạn có kế hoạch tác giả bất kỳ cuốn sách? Để tránh xảy ra lỗi nếu phạm vi hoặc bảng đã được lưu với các bộ lọc được áp dụng, Nếu bảng tính ("tên"). filtermode = true then worksheets(“name”). showalldata Bec nói. Hi Jon, Cám ơn vì cái này. Có cách nào để làm cho bộ lọc của bạn tra cứu các giá trị sẽ sử dụng để lọc không? Cảm ơn Bittu nói. Tôi rất hâm mộ các đoạn mã dễ hiểu của bạn với các hình minh họa rất đơn giản để chứng minh mã này hoạt động như thế nào và như thế nào. Tôi thực sự đánh giá cao cách bạn giải thích và viết mã để những người không chuyên hay đúng hơn là người mới bắt đầu có thể dễ dàng hiểu và sửa đổi mã theo yêu cầu của mình. Cảm ơn vì những hướng dẫn tuyệt vời của bạn, hãy tiếp tục phát huy Christina nói. Hi Jon, điều này cực kỳ hữu ích. Cảm ơn rất nhiều
Chris nói. Hi Jon Tôi đang cố xóa một số hàng khỏi trang tính theo ví dụ đầu tiên của bạn. Tôi muốn chọn “Tiêu chí” từ một ô trên một trang tính khác trong cùng một sổ làm việc Tôi đã thử như sau Dim Wk dưới dạng Chuỗi nhưng tôi gặp lỗi biên dịch ở dòng mã Set WK Tôi đang sai ở đâu? sandeep kothari nói. Jon thân mến, Tuyệt vời, như thường lệ. biến ws chưa được khai báo & do đó mã không hoạt động Tất cả những gì tôi đã học được trong VBA phần lớn là do bạn Độ tin cậy R. nói. xin vui lòng là người mới trong VBA, tôi muốn sửa đổi mã VBA của bạn cho nhiều tiêu chí để lọc dữ liệu của tôi nhưng cột A đầu tiên của tôi là ngày và giờ ở định dạng này 1/1/2015 0. 00 vì vậy tôi muốn xóa từng hàng trừ 9. 00 và 18. 00 hàng ngày cho mỗi ngày trong một tháng vì mỗi trang tính có dữ liệu cho cả tháng. xin vui lòng tôi cần sự giúp đỡ của bạn. cảm ơn Vincent nói. Cảm ơn vì tất cả các hướng dẫn. Ví dụ: tôi muốn lọc các giá trị không phải là “A, B, C, D” và xóa các hàng đó Alex nói. Tôi làm cách nào để "Xóa hàng dựa trên tiêu chí do người dùng chỉ định" hoạt động trên nhiều trang tính nhưng chỉ yêu cầu nhập tên một lần?
Dave nói. Có vẻ tốt nhưng tôi nhận được thông báo lỗi sau khi cố chạy cái này o. Dữ LiệuCơ ThểPhạm Vi. Ô đặc biệt(xlCellTypeVisible). Xóa - điều này dẫn đến lỗi cũng như ws. Hoạt động ——————- Sub Delete_Rows_Based_On_Value_Table() Dim lo As ListObject ‘Đặt tham chiếu cho trang tính và Bảng. ‘Xóa mọi bộ lọc hiện có ‘1. Áp dụng bộ lọc ‘2. Xóa hàng ‘3. Xóa bộ lọc kết thúc phụ Rajkumar nói. Xin chào hướng dẫn này là tốt Cách xóa ô từ cột A sang cột M phụ thuộc vào giá trị ở cột M (trống). Tôi không muốn xóa toàn bộ hàng Heidi nói. Tôi đang cố gắng thiết lập một macro để nhận khi một hàng/ô nói có, sau đó sao chép và dán dữ liệu đó vào một trang mới và làm mới trang gốc…. Tôi dường như chỉ có thể ra ngoài để thực hiện hàng 1, thay vì khi một hàng nói “có”…. Có ai giúp được không? Sadeesh nói. Xin chào Jon, tôi đang cố gắng tạo một tệp macro để giữ lại một số cột nhất định dựa trên các tiêu đề và xóa tất cả các phần còn lại, Các tiêu đề cột hợp lệ phải được giới thiệu bằng một trang tính excel khác (Điều này có thể là động), tôi đang cố gắng xây dựng nó Mike Kamish nói. Xin chào Jon, s. Phạm vi ("AV2. G1000”). Trường bộ lọc tự động. =4, Tiêu chí1. =”<= 1/1/2000" Cám ơn rất nhiều
Naxal nói. Cảm ơn bạn đã cung cấp thông tin. Làm cách nào để xóa nhiều hàng có các ô khác nhau Tôi muốn xóa các hàng có giá trị ô là 156,158, 189, 200 Điều đó sẽ thay đổi phần tiêu chí1 trong mã macro của bạn như thế nào.
jess nói. Cảm ơn Sarfaraz nói. Điều gì sẽ xảy ra nếu Không có “Sản phẩm 2” trong phạm vi/cột đã chọn để xóa. vĩ mô sẽ dừng lại? . Zach nói. Jon, Dale Anderson nói. hướng dẫn tuyệt vời. Cảm ơn. tôi có một câu hỏi. Có thể làm cho phạm vi năng động? . Cảm ơn VJ nói. Cảm ơn Jon Tôi đã sử dụng mã của bạn làm cơ sở để tạo macro để đáp ứng yêu cầu của tôi. Điều tôi đang cố gắng đạt được là có thể xóa các hàng khỏi bảng tính gốc và lưu nó dưới dạng tệp MỚI trong cùng đường dẫn nơi đặt bảng tính gốc. Tuy nhiên, hãy đóng bảng tính ban đầu mà không thực hiện bất kỳ thay đổi nào (tôi. e. không xóa hàng) Tôi có 2 vấn đề. ‘1. Áp dụng bộ lọc ‘2. Xóa hàng 'Khi Lỗi GoTo 0 ‘3. Xóa bộ lọc Khi Lỗi Tiếp tục Tiếp theo xlApp. Hiển thị = Sai kết thúc phụ Rajiv Nair nói. Cảm ơn bạn. Giải thích rõ ràng, tuyệt vời Margery Kuhn nói. Xóa hàng dựa trên tiêu chí do người dùng chỉ định Điều này rất gần với những gì tôi cần…… Xóa không bằng đầu vào Người dùng. Nếu người dùng nhập B - Tôi muốn nó xóa tất cả các hàng A & C, giữ nguyên B Bất kỳ trợ giúp sẽ được đánh giá cao YG nói. Xin chào, Có cách nào để chạy các macro ở trên nhưng trên một nhóm trang tính cụ thể trong sổ làm việc không? Macro siêu tiện dụng. Cám ơn rất nhiều
Hossein Nouri nói. Hi Jon, Điều gì sẽ là macro để xóa các hàng cho doanh số bán hàng bị vô hiệu hóa trong bảng Excel ba cột sau đây (i. e. , tất cả các hàng cho Tran# 1053899)? Tran# Code Lars nói. Điều này đã giúp rất nhiều nhưng tôi có một vấn đề. Bảng mà tôi muốn sử dụng Macro này nằm trong một trang tính cũng có dữ liệu khác. Vấn đề của tôi là khi xóa dữ liệu trong vùng dữ liệu đó, nó cũng xóa dữ liệu nằm ngoài bảng trên cùng một hàng. Có cách nào để sửa lỗi này? JT nói. Xin chào Jon, Phạm vi ("A3. Y1000”). Ô đặc biệt(xlCellTypeVisible). Xóa bỏ đơn giản là không xóa các ô. Rất bực bội. Bạn có thể đưa ra bất kỳ lời giải thích là tại sao? Để tham khảo, tôi đã ghi lại macro của mình trong Excel 365, sau đó gỡ lỗi/chèn mã của bạn vào đúng vị trí của nó… Tôi đang cố dọn sạch một bảng sau khi sao chép hàng loạt và dán, xóa các hàng không cần thiết dựa trên Cột A để trống. Như đã đề cập, mọi thứ hoạt động hoàn hảo ngoại trừ không có gì xóa Cảm ơn bạn rất nhiều. Tôi chắc chắn sẽ có cà phê nếu bạn có thể giúp 🙂 Dewey nói. Tôi thích thông tin bạn đã cung cấp CẢM ƠN BẠN. Điều này rất hữu ích và tôi chắc chắn rằng nó sẽ mở rộng khả năng của tôi. Tôi đang cố bẻ một đai ốc mà tôi cảm thấy khó và tôi có thể tưởng tượng rằng nhiều người dùng khác cũng gặp phải vấn đề tương tự. Tôi có thể thực hiện tác vụ theo cách thủ công nhưng mất nhiều thời gian. Đó là lý tưởng cho một kịch bản. Ý tưởng là loại bỏ các bản ghi trùng lặp đáp ứng các tiêu chí nhất định, tôi. e. 2 bản ghi giống hệt nhau, trong đó một bản ghi có câu lệnh “Đạt” trong một ô và bản ghi còn lại thì không. Tôi cần xóa dòng/bản ghi không đạt (trống) nhưng khi xảy ra các bản ghi trùng lặp, hãy xóa một trong 2 bản trùng nếu không có thành phần “Đạt”. Tôi nghĩ điều này sẽ biến thành 2 Tập lệnh VB riêng biệt. Tôi sẽ tiếp tục tìm kiếm trên web và đặc biệt là trang web của bạn vì tôi nghĩ bạn có thể đã trả lời đủ về điều này trong một bài viết khác, nơi thông tin ở đó chỉ cần sửa đổi một chút hoặc kết hợp cả 2 và làm việc với nó. Một lần nữa, cảm ơn vì một trang web tuyệt vời MAKA nói. sử dụng ví dụ đầu tiên, nó sẽ xóa dòng đầu tiên nếu không có dòng nào có tiêu chí xóa Jundi nói. Xin chào, Cảm ơn Ahab Abdel-Aziz nói. Điều này thật tuyệt vời theo mọi cách. Các giải pháp rất tinh tế, tài liệu và ví dụ kỹ lưỡng, và phần giải thích bằng video hoàn toàn có thể truy cập được, ngay cả đối với một OG như tôi, người biết rất ít. Cảm ơn bạn Jamie nói. Cảm ơn vì hướng dẫn tuyệt vời này. Tôi rất mới sử dụng macro excel và tôi đã có thể áp dụng điều này vào trang tính của mình Tôi muốn có thể xóa mọi thứ trừ giá trị do người dùng nhập Tôi có cần thêm nội dung nào đó vào phần Áp dụng bộ lọc để lọc mọi thứ trừ sCriteria không? Hay tôi cần thay đổi điều gì đó trong phần Xóa hàng để xóa tất cả dữ liệu ẩn? Cảm ơn bạn đã giúp đỡ Bill Palmer nói. Cảm ơn bạn rất nhiều, Jon, vì những video tuyệt vời. Tìm thấy những gì tôi đang tìm kiếm trên web không phải lúc nào cũng dễ dàng, nhưng khi tôi truy cập vào đó và thấy tên của bạn, lời giải thích của bạn sẽ thành công Kyle nói. Có cách nào để ngăn macro chuyển sang chế độ gỡ lỗi khi không có giá trị mục tiêu nào không? . Nếu nút được nhấn, nó sẽ chuyển sang chế độ gỡ lỗi Tim nói. Xin chào Jon Acampora, Tôi đánh giá cao đoạn mã này và nó hoạt động tốt trừ khi không có dữ liệu phù hợp với tiêu chí. Làm cách nào để xóa bộ lọc nếu không tìm thấy dữ liệu để mã không bị lỗi? David nói. Cảm ơn vì những lời khuyên. Tuy nhiên, vấn đề với một tuyên bố như ws. Phạm vi ("B4. G1000”). Ô đặc biệt(xlCellTypeVisible). Xóa bỏ Bạn không biết có bao nhiêu hàng trong phạm vi, vì vậy bạn chỉ đặt nó thành một số lớn (không phải 1000 là lớn như vậy). Tuy nhiên, bạn có thể làm cho nó giống như Bạn có thể xóa các hàng trong Excel khi được lọc không?Sau khi dữ liệu được lọc, bạn chỉ có thể xóa các hàng đã lọc bằng cách chọn dữ liệu đã lọc và nhấn đồng thời các phím "Ctrl" và "-" trên bàn phím của mình . Thao tác này sẽ mở hộp thoại "Xóa". Đảm bảo rằng tùy chọn "Shift cells up" được chọn và sau đó nhấp vào nút "OK". . This will open the "Delete" dialog box. Make sure that the "Shift cells up" option is selected and then click the "OK" button.
Làm cách nào để xóa dữ liệu bộ lọc trong VBA?Xóa bộ lọc khỏi một cột
. Ví dụ: hình bên dưới mô tả một ví dụ về xóa bộ lọc khỏi cột Quốc gia. Ghi chú. Bạn không thể xóa bộ lọc khỏi các cột riêng lẻ. Bộ lọc được bật cho toàn bộ phạm vi hoặc tắt. button next to the column heading, and then click Clear Filter from <"Column Name">. For example, the figure below depicts an example of clearing the filter from the Country column. Note: You can't remove filters from individual columns. Filters are either on for an entire range, or off. |