Lọc dữ liệu từ File đang đóng

Liên hệ QC
Thấy 80 người đọc, 3 người tải file mà hôm qua đến giờ không thấy ai giải dùm nhỉ? Chắc bận xem bóng đá --=0
 
Upvote 0
Mã:
Sub Get_Data_From_File()
    Dim FileToOpen As Variant
    Dim Arr(), Res(), i&, K&
    Dim OpenBook As Workbook
    Application.ScreenUpdating = False
    FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*xls*")
    If FileToOpen <> False Then
        Set OpenBook = Application.Workbooks.Open(FileToOpen)
        Arr = OpenBook.Sheets("Data").Range("RangeName").Value
        OpenBook.Close False
        ReDim Res(1 To UBound(Arr, 1), 1 To 4)
        For i = 2 To UBound(Arr, 1)
            If Arr(i, 4) <> "Export" Then
                K = K + 1
                Res(K, 1) = Arr(i, 4)
                Res(K, 2) = Arr(i, 7)
                 Res(K, 3) = Arr(i, 8)
                  Res(K, 4) = Arr(i, 10)
            End If
        Next
        If K Then
        ThisWorkbook.Sheets("Ket_qua").Range("A6:D10000").ClearContents
        ThisWorkbook.Sheets("Ket_qua").Range("A6").Resize(K, 4).Value = Res
        End If
    End If
    Application.ScreenUpdating = True
End Sub
Thử code này coi có đúng ý bạn không?
 
Upvote 0

Bảng Data của bạn đã chuẩn thì có thể dùng ADO, Power Query để truy vấn. Tôi dùng ADO cho file này. Chỉ dùng cho một số trường hợp đơn giản thôi.
- Nếu chỉ lấy dữ liệu không Sum, Count thì để trống cột: [GroupByFLD], [SumFLD], [CountFLD].
- Nếu muốn Sum/Count cột nào thì thêm vào các trường cần Sum vào các cột trên.

Screen Shot 2021-10-08 at 12.04.58.png
 

File đính kèm

  • LayDuLieuCoDK_ADO.xlsm
    38.8 KB · Đọc: 6
Upvote 0
Mã:
Sub Get_Data_From_File()
    Dim FileToOpen As Variant
    Dim Arr(), Res(), i&, K&
    Dim OpenBook As Workbook
    Application.ScreenUpdating = False
    FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*xls*")
    If FileToOpen <> False Then
        Set OpenBook = Application.Workbooks.Open(FileToOpen)
        Arr = OpenBook.Sheets("Data").Range("RangeName").Value
        OpenBook.Close False
        ReDim Res(1 To UBound(Arr, 1), 1 To 4)
        For i = 2 To UBound(Arr, 1)
            If Arr(i, 4) <> "Export" Then
                K = K + 1
                Res(K, 1) = Arr(i, 4)
                Res(K, 2) = Arr(i, 7)
                 Res(K, 3) = Arr(i, 8)
                  Res(K, 4) = Arr(i, 10)
            End If
        Next
        If K Then
        ThisWorkbook.Sheets("Ket_qua").Range("A6:D10000").ClearContents
        ThisWorkbook.Sheets("Ket_qua").Range("A6").Resize(K, 4).Value = Res
        End If
    End If
    Application.ScreenUpdating = True
End Sub
Thử code này coi có đúng ý bạn không?
Cảm ơn anh nhiều ạ ! Đúng cái em đang cần ạ !
Bài đã được tự động gộp:

Cảm ơn anh nhiều ạ ! Đã có thêm một cách mới ngoài dùng mảng ở trên ạ !
Bài đã được tự động gộp:

Bảng Data của bạn đã chuẩn thì có thể dùng ADO, Power Query để truy vấn. Tôi dùng ADO cho file này. Chỉ dùng cho một số trường hợp đơn giản thôi.
- Nếu chỉ lấy dữ liệu không Sum, Count thì để trống cột: [GroupByFLD], [SumFLD], [CountFLD].
- Nếu muốn Sum/Count cột nào thì thêm vào các trường cần Sum vào các cột trên.

View attachment 267374
Em xin cảm ơn anh ạ ! NHiều cái hay để học rồi ạ !
 
Upvote 0
Góp vui.
Hoàn toàn không biết các trường cần lọc nằm ở cột nào trong Sh Data
nếu còn quan tâm thì thử xem file đính kèm.
bạn thay đổi ô D2 và xem kết quả ở Dòng 10.
Bài này được hoàn thành dựa trên ý tưởng của Anh NDU
Chạy code NapDic một lần (lần đầu có thể hơi chậm chút), những lần sau chỉ việc lấy trong dic ra dùng.
Nếu phát triển thêm có thể lọc theo các tiêu chí. Impots, Expots, re-Im, Re-Ex (mỗi tiêu chí một dòng), hoặc kết hợp với lọc theo thời gian
P/S tại ShData thêm đoạn code này để cập nhật lại Dic khi có sự thay đổi.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Chk = True
End Sub
Private Sub Worksheet_Deactivate()
  If Chk Then
    NapDic
    Chk = False
  End If
End Sub
 

File đính kèm

  • Lay du lieu co dieu kien tu file khac.xlsm
    33.3 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
Chạy code NapDic một lần (lần đầu có thể hơi chậm chút), những lần sau chỉ việc lấy trong dic ra dùng.
Nếu phát triển thêm có thể lọc theo các tiêu chí. Impots, Expots, re-Im, Re-Ex (mỗi tiêu chí một dòng), hoặc kết hợp với lọc theo thời gian
P/S tại ShData thêm đoạn code này để cập nhật lại Dic khi có sự thay đổi.
Bạn phát triển thêm chút là tuỳ chọn Field cần lấy luôn thì nó linh hoạt hơn nữa. :)
 
Upvote 0
Bạn phát triển thêm chút là tuỳ chọn Field cần lấy luôn thì nó linh hoạt hơn nữa. :)
Kiến thức về Ex nói chung và VBA nói riêng nông cạn, chủ yếu là chắp vá, học mót thôi. Nhưng tôi đã thấy ở một số bài nào đó trên diễn đàn này đã làm được điều đó. Và nếu làm được thì nó có thật sự cần thiết cho chủ thớt không?
 
Upvote 0
Kiến thức về Ex nói chung và VBA nói riêng nông cạn, chủ yếu là chắp vá, học mót thôi. Nhưng tôi đã thấy ở một số bài nào đó trên diễn đàn này đã làm được điều đó. Và nếu làm được thì nó có thật sự cần thiết cho chủ thớt không?
Tôi thì lại có suy nghĩ khác khi nhìn vào đề bài đó là: với CSDL như vậy, bây giờ chủ thớt chỉ cần trích dữ liệu 5 cột như vây nhưng sau này khi cần lấy thêm cột khác thì lại phải vô code chỉnh sửa (phần lớn các bài giải trên đây là như vậy, code chết các tham số tuỳ chọn trong code luôn), nếu không biết chỉnh sửa thì lại lên hỏi tiếp, mất thời gian cả đôi bên. Do đó cách tôi viết code là làm sao giảm thiểu việc can thiệp vào code khi có thay đổi, khi thay đổi chỉ cần khai báo các tham chiếu trên Sheet và code làm phần còn lại. Nó chỉ là giải thuật vậy thôi.
 
Upvote 0
Nếu dùng Power Query thì bài này nhàn tênh đó bạn,
link đến dữ liệu gốc đưa vào cell, cần thay đổi thì đổi trên cell, làm cái Query, sau chỉ cần refresh là xong.
Bạn thử thay đường dẫn đến file Data ở sheet Setting, rồi sang Sheet Ket_Qua refresh nhé.
 

File đính kèm

  • Lay du lieu co dieu kien tu file khac.xlsm
    387.4 KB · Đọc: 6
Upvote 0
Nếu dùng Power Query thì bài này nhàn tênh đó bạn,
link đến dữ liệu gốc đưa vào cell, cần thay đổi thì đổi trên cell, làm cái Query, sau chỉ cần refresh là xong.
Bạn thử thay đường dẫn đến file Data ở sheet Setting, rồi sang Sheet Ket_Qua refresh nhé.
Em cảm ơn anh rất nhiều ạ!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom