Lấy dữ liệu từ file excel khác theo nhiều điều kiện (Dùng VBA)

Liên hệ QC

chidung2009

Thành viên hoạt động
Tham gia
12/9/12
Bài viết
123
Được thích
8
Em có 1 file DATA có hơn 500.000 dòng, dung lượng gần 100mb, rất bất tiện khi thao tác trên file đó.
Giờ em muốn tạo 1 file excel khác dùng để lấy dữ liệu, lọc theo nhiều điều kiện thì phải làm thế nào (Không mở file DATA)
- Do file Data quá lớn nên em đã xóa bớt dòng và 1 số sheel khác để giảm dung lượng (Để lại còn 3000 dòng)
- Tại file lấy dữ liệu: khi nhập điều kiện lấy theo tháng vào ô D1, D2 và số tiền vào ô F1, F2 thì khi lấy dữ liệu nó sẽ lọc dữ liệu theo các điều kiện trên (Nếu D1, D2 hoặc F1, F2 trống thì lấy tất cả mà lọc theo điều kiện còn lại)
Mong mọi người giúp em với
Em chần thành cảm ơn
 

File đính kèm

  • lay du lieu.xlsm
    10.2 KB · Đọc: 63
  • DATA.xlsx
    187.8 KB · Đọc: 64
  • hinh.jpg
    hinh.jpg
    42.8 KB · Đọc: 53
Em có 1 file DATA có hơn 500.000 dòng, dung lượng gần 100mb, rất bất tiện khi thao tác trên file đó.
Giờ em muốn tạo 1 file excel khác dùng để lấy dữ liệu, lọc theo nhiều điều kiện thì phải làm thế nào (Không mở file DATA)
- Do file Data quá lớn nên em đã xóa bớt dòng và 1 số sheel khác để giảm dung lượng (Để lại còn 3000 dòng)
- Tại file lấy dữ liệu: khi nhập điều kiện lấy theo tháng vào ô D1, D2 và số tiền vào ô F1, F2 thì khi lấy dữ liệu nó sẽ lọc dữ liệu theo các điều kiện trên (Nếu D1, D2 hoặc F1, F2 trống thì lấy tất cả mà lọc theo điều kiện còn lại)
Mong mọi người giúp em với
Em chần thành cảm ơn
Cách đơn giản là dùng SQL nhưng tại file gốc, bạn phải chuẩn hóa tiêu đề cột: tiêu đề chỉ trên 1 dòng, tên tiêu đề phải không có dấu

Update: đã xem file DATA của bạn. Dữ liệu vậy là OK rồi, chỉ việc múc ra thôi :yeah:
 
Upvote 0
Em có 1 file DATA có hơn 500.000 dòng, dung lượng gần 100mb, rất bất tiện khi thao tác trên file đó.
Giờ em muốn tạo 1 file excel khác dùng để lấy dữ liệu, lọc theo nhiều điều kiện thì phải làm thế nào (Không mở file DATA)
- Do file Data quá lớn nên em đã xóa bớt dòng và 1 số sheel khác để giảm dung lượng (Để lại còn 3000 dòng)
- Tại file lấy dữ liệu: khi nhập điều kiện lấy theo tháng vào ô D1, D2 và số tiền vào ô F1, F2 thì khi lấy dữ liệu nó sẽ lọc dữ liệu theo các điều kiện trên (Nếu D1, D2 hoặc F1, F2 trống thì lấy tất cả mà lọc theo điều kiện còn lại)
Mong mọi người giúp em với
Em chần thành cảm ơn
Thử code này nhé.Bạn chỉnh lại dữ liệu Data.Như ảnh dưới và chỉnh lại đường link nhé.
1593662030267.png
Mã:
Sub laydulieu()
    Dim duonglink As String, thangbd As Integer, thangkt As Integer, tien1 As Double, tien2 As Double
    Dim cn As Object, rst As Object, pro As String, Ext As String, Sql As String
    Set cn = CreateObject("ADODB.connection")
    Set rst = CreateObject("ADODB.recordset")
     pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
     Ext = ";Extended Properties=""Excel 12.0;HDR=No;IMEX= 2"";"
     duonglink = ThisWorkbook.Path & "\DATA (2).xlsx" 'chinh lai cho chuan duong dan
    With Sheets("sheet1")
         thangbd = .Range("D1").Value
         thangkt = .Range("D2").Value
         tien1 = .Range("F1").Value
         tien2 = .Range("f2").Value
         .Range("A5:F5000").ClearContents
    End With
    cn.Open (pro & duonglink & Ext)
    Sql = "SELECT * from [sheet3$A5:F100000]  WHERE F5 BETWEEN " & thangbd & " and " & thangkt & " AND F6 BETWEEN " & tien1 & " and " & tien2 & ";"
    rst.Open Sql, cn
    Sheet1.Range("A5").CopyFromRecordset rst
    rst.Close
    cn.Close
End Sub
 
Upvote 0
Thử code này nhé.Bạn chỉnh lại dữ liệu Data.Như ảnh dưới và chỉnh lại đường link nhé.
View attachment 240292
Mã:
Sub laydulieu()
    Dim duonglink As String, thangbd As Integer, thangkt As Integer, tien1 As Double, tien2 As Double
    Dim cn As Object, rst As Object, pro As String, Ext As String, Sql As String
    Set cn = CreateObject("ADODB.connection")
    Set rst = CreateObject("ADODB.recordset")
     pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
     Ext = ";Extended Properties=""Excel 12.0;HDR=No;IMEX= 2"";"
     duonglink = ThisWorkbook.Path & "\DATA (2).xlsx" 'chinh lai cho chuan duong dan
    With Sheets("sheet1")
         thangbd = .Range("D1").Value
         thangkt = .Range("D2").Value
         tien1 = .Range("F1").Value
         tien2 = .Range("f2").Value
         .Range("A5:F5000").ClearContents
    End With
    cn.Open (pro & duonglink & Ext)
    Sql = "SELECT * from [sheet3$A5:F100000]  WHERE F5 BETWEEN " & thangbd & " and " & thangkt & " AND F6 BETWEEN " & tien1 & " and " & tien2 & ";"
    rst.Open Sql, cn
    Sheet1.Range("A5").CopyFromRecordset rst
    rst.Close
    cn.Close
End Sub
Do giờ mình đang ngoài đường nên chưa test thử code vba của bạn. Mình cảm ơn bạn nhiều nhé
 
Upvote 0
Do giờ mình đang ngoài đường nên chưa test thử code vba của bạn. Mình cảm ơn bạn nhiều nhé
Thêm -- (hai dấu trừ) trước hàm MID chỗ trường THANG
Bài đã được tự động gộp:

Thử code này nhé.Bạn chỉnh lại dữ liệu Data.Như ảnh dưới và chỉnh lại đường link nhé.
View attachment 240292
Mã:
Sub laydulieu()
    Dim duonglink As String, thangbd As Integer, thangkt As Integer, tien1 As Double, tien2 As Double
    Dim cn As Object, rst As Object, pro As String, Ext As String, Sql As String
    Set cn = CreateObject("ADODB.connection")
    Set rst = CreateObject("ADODB.recordset")
     pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
     Ext = ";Extended Properties=""Excel 12.0;HDR=No;IMEX= 2"";"
     duonglink = ThisWorkbook.Path & "\DATA (2).xlsx" 'chinh lai cho chuan duong dan
    With Sheets("sheet1")
         thangbd = .Range("D1").Value
         thangkt = .Range("D2").Value
         tien1 = .Range("F1").Value
         tien2 = .Range("f2").Value
         .Range("A5:F5000").ClearContents
    End With
    cn.Open (pro & duonglink & Ext)
    Sql = "SELECT * from [sheet3$A5:F100000]  WHERE F5 BETWEEN " & thangbd & " and " & thangkt & " AND F6 BETWEEN " & tien1 & " and " & tien2 & ";"
    rst.Open Sql, cn
    Sheet1.Range("A5").CopyFromRecordset rst
    rst.Close
    cn.Close
End Sub
Cần thư viện gì nữa hay câu SQL sai mà máy tôi báo lỗi này bạn?
LoiChaySQL.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Lấy và lọc dữ liệu khủng thì dùng Power Query chứ.
 
Upvote 0
Lấy và lọc dữ liệu khủng thì dùng Power Query chứ.
Power Query mới lạ quá nên mình ko biết dùng cái này. Muốn dùng thì phải cài Add-in gìvaf viết câu lệnh như thế nào
Bài đã được tự động gộp:

Cách đơn giản là dùng SQL nhưng tại file gốc, bạn phải chuẩn hóa tiêu đề cột: tiêu đề chỉ trên 1 dòng, tên tiêu đề phải không có dấu

Update: đã xem file DATA của bạn. Dữ liệu vậy là OK rồi, chỉ việc múc ra thôi :yeah:
Mình muốn múc lắm mà ko biết làm thế nào, muốn lấy dữ liệu theo điều kiện sang file khác thì phải viết câu lệnh thế nào?
mình xin cảm ơn
 
Upvote 0
Power Query mới lạ quá nên mình ko biết dùng cái này. Muốn dùng thì phải cài Add-in gìvaf viết câu lệnh như thế nào
Bài đã được tự động gộp:


Mình muốn múc lắm mà ko biết làm thế nào, muốn lấy dữ liệu theo điều kiện sang file khác thì phải viết câu lệnh thế nào?
mình xin cảm ơn
Bạn snow25 đã giúp bạn ở bài #3 rồi mà. Bạn chưa thử code sao?
 
Upvote 0
Upvote 0
Power Query mới lạ quá nên mình ko biết dùng cái này. Muốn dùng thì phải cài Add-in gìvaf viết câu lệnh như thế nào
...
Làm việc với dữ liệu khủng mà cứ dựa vào code VBA thì cũng như dựa vào tay cầm xích để răn cọp. Có ngày cọp nó quay lại vồ.

Excel chỉ là bảng tính trải rộng. Chuyện truy cập nguồn thuộc về kỹ thuật khác. Dữ liệu khủng lại là mọt kỹ thuật khác nữa.

Làm việc vói dữ liệu khủng mà giờ này mới nói "Power Query mới lạ quá" là kiểu làm việc chạy trối chết theo công việc. Chưa hề biết cách làm chủ tình hình.
 
Upvote 0
Thử code này nhé.Bạn chỉnh lại dữ liệu Data.Như ảnh dưới và chỉnh lại đường link nhé.
View attachment 240292
Mã:
Sub laydulieu()
    Dim duonglink As String, thangbd As Integer, thangkt As Integer, tien1 As Double, tien2 As Double
    Dim cn As Object, rst As Object, pro As String, Ext As String, Sql As String
    Set cn = CreateObject("ADODB.connection")
    Set rst = CreateObject("ADODB.recordset")
     pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
     Ext = ";Extended Properties=""Excel 12.0;HDR=No;IMEX= 2"";"
     duonglink = ThisWorkbook.Path & "\DATA (2).xlsx" 'chinh lai cho chuan duong dan
    With Sheets("sheet1")
         thangbd = .Range("D1").Value
         thangkt = .Range("D2").Value
         tien1 = .Range("F1").Value
         tien2 = .Range("f2").Value
         .Range("A5:F5000").ClearContents
    End With
    cn.Open (pro & duonglink & Ext)
    Sql = "SELECT * from [sheet3$A5:F100000]  WHERE F5 BETWEEN " & thangbd & " and " & thangkt & " AND F6 BETWEEN " & tien1 & " and " & tien2 & ";"
    rst.Open Sql, cn
    Sheet1.Range("A5").CopyFromRecordset rst
    rst.Close
    cn.Close
End Sub
Mình đã thử code của bạn và đã thành công, mình cảm ơn bạn nhiều
 
Upvote 0
Thử code này nhé.Bạn chỉnh lại dữ liệu Data.Như ảnh dưới và chỉnh lại đường link nhé.
View attachment 240292
Mã:
Sub laydulieu()
    Dim duonglink As String, thangbd As Integer, thangkt As Integer, tien1 As Double, tien2 As Double
    Dim cn As Object, rst As Object, pro As String, Ext As String, Sql As String
    Set cn = CreateObject("ADODB.connection")
    Set rst = CreateObject("ADODB.recordset")
     pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
     Ext = ";Extended Properties=""Excel 12.0;HDR=No;IMEX= 2"";"
     duonglink = ThisWorkbook.Path & "\DATA (2).xlsx" 'chinh lai cho chuan duong dan
    With Sheets("sheet1")
         thangbd = .Range("D1").Value
         thangkt = .Range("D2").Value
         tien1 = .Range("F1").Value
         tien2 = .Range("f2").Value
         .Range("A5:F5000").ClearContents
    End With
    cn.Open (pro & duonglink & Ext)
    Sql = "SELECT * from [sheet3$A5:F100000]  WHERE F5 BETWEEN " & thangbd & " and " & thangkt & " AND F6 BETWEEN " & tien1 & " and " & tien2 & ";"
    rst.Open Sql, cn
    Sheet1.Range("A5").CopyFromRecordset rst
    rst.Close
    cn.Close
End Sub
Cho mình hỏi Đoạn mã:
Sql = "SELECT * from [sheet3$A5:F100000] WHERE F5 BETWEEN " & thangbd & " and " & thangkt & " AND F6 BETWEEN " & tien1 & " and " & tien2 & ";"
Vậy WHERE F5 BETWEEN và AND F6 BETWEEN có nghĩa là gì vậy ?
Sao không phải là E2 và F2
 
Upvote 0
Web KT
Back
Top Bottom