Dùng VBA lọc dữ liệu theo nhiều điều kiện từ 1 file rồi lấy kết quả dán vào 1 file khác
Xin mọi người giúp đỡ ,
Em có 1 file tổng hợp, em muốn tạo 1 nút bấm cập nhật report để khi click vào nó sẽ hiện lên 1 bảng hỏi đường dẫn của file report, mình chỉ đường dẫn tới thì nó sẽ mở file report ra, lọc theo điều kiện như sau, sau khi lọc xong, sẽ copy vài cột dữ liệu trong file report (không copy toàn bộ) và dán qua file tổng hợp.Hiện nay , trong file tổng hợp, em phải tạo ra 1 sheet report phụ, mỗi khi có report từ văn phòng chính gởi xuống, em copy toàn bộ nguyên sheet, paste qua sheet report phụ, rồi dùng thêm 1 cột phụ để lọc, rồi dùng hàm vlookup để lấy dữ liệu qua sheet tổng hợp. Cách làm này rất thủ công.
Mặt khác do dữ liệu trong file report rất lớn (gần 20.000 hàng) nên file chạy bằng cách này rất nặng và chậm, đôi khi treo máy luôn.
Nhờ mọi người hướng dẫn dùng VBA để file chạy nhanh và nhẹ hơn. Nếu dùng code VBA, em nghĩ có lẽ sẽ không cần dùng thêm 1 sheet report phụ, cũng không cần dùng cách vlookup cho 20.000 hàng và 15 cột.
Điều kiện để lọc :
1 . Nhìn trong file report, cột G (Location), nếu có các chữ sau thì bỏ hàng đó, không lấy : ACE , ATD , BAN , CMD , ZPC
2. Nhìn trong file report, cột B (Status), nếu có chữ Cancelled thì bỏ hàng đó, không lấy.
3. Nhìn trong file report, cột D (Class Type), nếu có chữ AR hoặc UL thì lấy hàng đó, còn lại bỏ hết, không lấySau khi lọc xong, thì chỉ lấy nội dung của các cột :
Class ID
Start Date
Trainer Code 1
Trainer Name 1
Trainer 1 No.Session weekday
Trainer 1 No.Session weekend
Trainer Code 2
Trainer Name 2
Trainer 2 No.Session weekday
Trainer 2 No.Session weekend
Trainer Code 3
Trainer Name 3
Trainer 3 No.Session weekday
Trainer 3 No.Session weekendrồi dán qua sheet tổng hợp.
Em xin cảm ơn
Chạy code
Sub GPE()
Dim cn As Object, rs As Object
Dim eRow&, Sql$
With Sheets("Tong Hop")
eRow = .Range("A" & Rows.Count).End(xlUp).Row
If eRow > 2 Then .Range("A3:N" & eRow).Clear
End With
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Add "All Excel", "*.xls*"
.AllowMultiSelect = False
.Show
If .SelectedItems.Count Then
On Error Resume Next
Set cn = CreateObject("adodb.connection")
cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & .SelectedItems(1) & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
Sql = "select f1,f5,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19 from [Page 1$A6:S] " & _
"where f2 not like ""Cancelled"" and (left(f4,2)= ""AR"" or left(f4,2)= ""UL"") " & _
"and not (left(f7,3)= ""ACE"" or left(f7,3)= ""ATD"" or left(f7,3)= ""BAN"" or left(f7,3)= ""CMD"" or left(f7,3)= ""ZBC"") "
Set rs = cn.Execute(Sql)
If Not rs.EOF Then Sheets("Tong Hop").Range("A3").CopyFromRecordset rs
rs.Close: cn.Close
Set rs = Nothing: Set cn = Nothing
On Error GoTo 0
End If
End With
End Sub
Cảm ơn anh HieuCD, đúng như ý luôn, mình chỉ chỉnh lại 1 chút xíu nữa thôi là xong (chữ ZPC anh viết nhầm thành ZBC).
www.giaiphapexcel.com/diendan/threads/d%C3%B9ng-vba-l%E1%BB%8Dc-d%E1%BB%AF-li%E1%BB%87u-theo-nhi%E1%BB%81u-%C4%91i%E1%BB%81u-ki%E1%BB%87n-t%E1%BB%AB-1-file-r%E1%BB%93i-l%E1%BA%A5y-k%E1%BA%BFt-qu%E1%BA%A3-d%C3%A1n-v%C3%A0o-1-file-kh%C3%A1c.145896/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
thêm lệnh chuyển số
Mấy năm nay không dùng các lệnh LIKE, IN, EXIST nên chỉ nhớ mang máng 🙁 , bạn nhắc mới nhớ lại
Chỉnh lại code theo gợi ý của bạn @VetMini