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

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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)
2444
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é.
2445

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

Nó là cột thứ 5 và thứ 6 trong dữ liệu data tương ứng với cột tháng và cột tiền nhé.

www.giaiphapexcel.com/diendan/threads/l%C3%A2%CC%81y-d%C6%B0%CC%83-li%C3%AA%CC%A3u-t%C6%B0%CC%80-file-excel-kha%CC%81c-theo-nhi%C3%AA%CC%80u-%C4%91i%C3%AA%CC%80u-ki%C3%AA%CC%A3n-du%CC%80ng-vba.150521/

Xây dựng Lương 3P, KPI cho Doanh nghiệp
Khóa học SprinGO phù hợp

Xây dựng Lương 3P, KPI cho Doanh nghiệp

Làm thế nào để trả lương cho nhân viên chính xác nhất? Đây là một trong những câu hỏi khó trong quản trị nhân...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:

    Tham gia 1 kiểu khác để thi hành lệnh SQL. Kiểu này theo tôi là dễ hiểu hơn chút

    Sub Laydulieu_Me()
        Dim thangbd As Integer, thangkt As Integer, tien1 As Double, tien2 As Double
        Dim cn As Object, rst As Object, Sql As String
    
    'Ket noi du lieu nguon
        Set cn = CreateObject("ADODB.Connection")
        With cn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            'Chinh lai ten file du lieu nguon cho dung (neu dung file khac DATA.xlsx)
            .ConnectionString = "Data Source=" & ThisWorkbook.Path & "DATA.xlsx" & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
            .Open
        End With
    
    'Lay thong tin dieu kien, xoa ket qua cu
        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
    
    'Cau lenh SQL
        Sql = "SELECT * from [sheet3$] "
        Sql = Sql & "WHERE THANG BETWEEN " & thangbd & " and " & thangkt & " AND T_TONGCHI BETWEEN " & tien1 & " and " & tien2
    
    'Thi hanh lenh
        Set rst = cn.Execute(Sql)
    
    'Ghi ket qua
        Sheet1.Range("A5").CopyFromRecordset rst
    
    'Dong ket noi
        rst.Close
        cn.Close
    End Sub

    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:

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm