DÙNG MACRO LỌC DỮ LIỆU BẢNG TRONG EXCEL

Giả sử người tiêu dùng có một bảng chứa danh sách lý lịch nhân viên (hoặc bất cứ danh sách gì nlỗi ở dưới):Sheet1:

Bạn đang xem: Dùng macro lọc dữ liệu bảng trong excel

*

Và người mua hàng muốn chỉ rước lý lịch những nhân viên có mã số 0252, 0253, .... Nếu khách hàng chọn từng người trong danh sách (có thể là vài trăm đến vài nghìn nhân viên) thì sẽ rất mất thời gian.Để thực hiện nkhô cứng, ta sẽ tạo macro lọc những nhân viên cấp dưới cần mang như sau:- Tạo vòng lặp từ đầu tới cuối của danh sách mã số nhân viên, rước từng mã số NV, sau đó tạo tiếp vòng lặp để duyệt từ đầu tới cuối danh sách lý lịch, Lúc tìm thấy thì đến ngừng vòng lặp và tạo tiếp một vòng lặp khác duyệt qua các cột của mẫu tin tìm thấy để chép (copy) thanh lịch Sheet2.- Thực hiện:+ Tạo một sheet để chứa kết quả lọc, (Sheet2)+ Tạo một sheet chứa mã NV:Sheet3:

Xem thêm: Nỗi Sợ Lớn Nhất Của 12 Cung Hoàng Đạo Sợ Gì Nhất Điều Gì Trong Cuộc Sống?

*

Trong Excel, vào menu ToolsMacroVisual Basic Editor:Trong cửa sổ mặt trái, nhấn đúp vào VBAProject để bung các nhánh nhỏ trong đó ra. Bạn sẽ thấy có cha sheet mà mình tạo ở trên, nhấn đúp vào một sheet bất kỳ để mở cửa sổ soạn thảo code của sheet đó, sau đó thực hiện soạn mã nlỗi ở dưới: Sub CopyRecord()Dyên i, j, k, n, n1 As IntegerDyên temp"n số mẫu tin của sheet 3"n1 số mẫu tin của sheet 1n = 100n1 = 1500"vòng lặp duyệt từ mẫu tin thứ 2 đến mẫu tin cuối cùng của sheet chứa mã nhân viên(vào ví dụ là 100)For i = 2 To n"giữ giái trị của hàng thứ i, cột thứ 2 của sheet3 vào biến temp (trong ví dụ là mã NV)."nhỏng vậy biến temp sẽ lần lượt chứa mã số nhân viên của từng người có vào danh sáchtemp = Sheet3.Cells(i, 2)"vòng lặp duyệt từ mẫu tin thứ 2 đến mẫu tin cuối cùng của sheet không danh sách nhân viênFor j = 2 To n1"xác định nếu mã nhân viên cấp dưới trong Sheet1 (danh sách nhân viên) trùng với biến temp thì tạo tiếp vòng lặp duyệt qua các cột của mẫu tin tìm thấy.If temp = Sheet1.Cells(j, 2) Thenk = 2Do While Not IsEmpty(Sheet1.Cells(j, k))"Cập nhật các ô vào sheet2Sheet2.Cells(i, k) = Sheet1.Cells(j, k)k = k + 1LoopExit ForEnd IfNextNextEnd SubSau lúc đã viết chấm dứt code, ta nhấn F5 để chạy macro này, ngóng vài giây để macro lọc dữ liệu, sau khoản thời gian maco thực hiện chấm dứt nhiệm vụ, người mua hàng hãy mở Sheet2 ra coi. Cha cha! nó đã copy đầy đủ theo danh sách mã số của quý khách.Nếu quý khách hàng muốn marteo tự động chạy thì thực hiện như sau:Macro chạy mỗi khi người mua thế đổi dữ liệu trong sheet lý lịch: Chép đoạn mã trên (ko chép hàng đầu tiên và cuôi cùng: Sub CopyRecord và End Sub). Nhấn đúp vào Sheet1 để mở cửa sổ code, vào listbox bên trái phía bên trên của cửa số code, chọn Worksheet, mặt phải chọn Change, người mua sẽ thấhệt như sau:Private Sub Worksheet_Change(ByVal Target As Range)End SubDán đoạn mã đã copy vào trong thủ tục này. Bây giờ thì mỗi lần người tiêu dùng cầm cố đổi dữ liệu vào Sheet1 thì macro sẽ tự động cập nhật lại dữ liệu. Nếu dữ liệu quá nhiều và quý khách phải làm việc thường xulặng bên trên Sheet1 thì tránh việc dùng cách này vì nó sẽ làm chậm nghiệp vụ xử lý của người tiêu dùng (nhớ xóa đoạn mã cũ sau khi bạn đã copy nó quý phái sheet khác). Bạn có thể áp dụng cách này để có thể làm được nhiều việc khác nữa.