Dùng Macro lọc dữ liệu bảng trong Excel

pdf
Số trang Dùng Macro lọc dữ liệu bảng trong Excel 6 Cỡ tệp Dùng Macro lọc dữ liệu bảng trong Excel 148 KB Lượt tải Dùng Macro lọc dữ liệu bảng trong Excel 0 Lượt đọc Dùng Macro lọc dữ liệu bảng trong Excel 5
Đánh giá Dùng Macro lọc dữ liệu bảng trong Excel
4 ( 13 lượt)
Nhấn vào bên dưới để tải tài liệu
Để tải xuống xem đầy đủ hãy nhấn vào bên trên
Chủ đề liên quan

Nội dung

Dùng Macro lọc dữ liệu bảng trong Excel Giả sử bạn 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ì như ở dưới): Sheet1: Và bạn muốn chỉ lấy lý lịch những nhân viên có mã số 0252, 0253, .... Nếu bạn 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 nhanh, ta sẽ tạo macro lọc những nhân viên cần lấy 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, lấy 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, khi tìm thấy thì cho 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) sang 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: Trong Excel, vào menu Tools\Macro\Visual Basic Editor: Trong cửa sổ bên trái, nhấn đúp vào VBAProject để bung các nhánh con trong đó ra. Bạn sẽ thấy có ba 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ã như ở dưới: Sub CopyRecord() Dim i, j, k, n, n1 As Integer Dim temp 'n số mẫu tin của sheet 3 'n1 số mẫu tin của sheet 1 n = 100 n1 = 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(trong ví dụ là 100) For i = 2 To n 'lưu 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ư 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ó trong danh sách temp = 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 chưa danh sách nhân viên For j = 2 To n1 'kiểm tra nếu mã nhân viên 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) Then k=2 Do While Not IsEmpty(Sheet1.Cells(j, k)) 'Cập nhật các ô vào sheet2 Sheet2.Cells(i, k) = Sheet1.Cells(j, k) k=k+1 Loop Exit For End If Next Next End Sub Sau khi đã viết xong code, ta nhấn F5 để chạy macro này, chờ vài giây để macro lọc dữ liệu, sau khi maco thực hiện xong nhiệm vụ, bạn hãy mở Sheet2 ra coi. Cha cha! nó đã copy đầy đủ theo danh sách mã số của bạn. Nếu bạn muốn marco tự động chạy thì thực hiện như sau: Macro chạy mỗi khi bạn thay đổi dữ liệu trong sheet lý lịch: Chép đoạn mã trên (không 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, trong listbox bên trái phía trên của cửa số code, chọn Worksheet, bên phải chọn Change, bạn sẽ thấy như sau: Private Sub Worksheet_Change(ByVal Target As Range) End Sub Dán đoạn mã đã copy vào trong thủ tục này. Bây giờ thì mỗi lần bạn thay đổi dữ liệu trong Sheet1 thì macro sẽ tự động cập nhật lại dữ liệu. Nếu dữ liệu quá nhiều và bạn phải làm việc thường xuyên trên Sheet1 thì không nên dùng cách này vì nó sẽ làm chậm quá trình xử lý của bạn (nhớ xóa đoạn mã cũ sau khi bạn đã copy nó sang 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.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.