


Với dữ liệu nhiều thì phải tìm đến giải pháp VBA, dùng công thức mảng sẽ bị treo máy vì quá nặng.Chào các bạn
Mình có tìm hiểu và làm theo công thức của 1 bạn trên diễn đàn (mặc dù chưa đáp ứng đầy đủ) nhưng vẫn không được kết quả mong muốn.
Các bạn vui lòng bớt chút thời gian xem và hỗ trợ giùm mình với.
[TABLE="width: 72"]
[TR]
[TD="class: xl69, width: 72, align: left"]Name ARR"=IF((OFFSET(Data!$A$2,,,COUNTA(Data!$A:$A))<>Detail!$C$7)+(OFFSET(Data!$X$2,,,COUNTA(Data!$X:$X))>Detail!$G$5)+(OFFSET(Data!$X$2,,,COUNTA(Data!$X:$X))<Detail!$G$6),"",ROW(OFFSET(Data!$A$2,,,COUNTA(Data!$A:$A))))[/TD]
[/TR]
[TR]
[TD="class: xl70"]Công thức từ Cell A15=IF(ROWS($15:27)>COUNT(ARR),"",INDEX(Data!$A:$AA,SMALL(ARR,ROWS($15:27)),0))[/TD]
[/TR]
[/TABLE]



Với dữ liệu nhiều thì phải tìm đến giải pháp VBA, dùng công thức mảng sẽ bị treo máy vì quá nặng.
Giải pháp file kèm dưới đây dùng cột phụ, bạn tham khảo thử.
Chúc bạn ngày vui.






Bạn thử code này coi> lưu ý là cột X phải đúng kiểu datae nhé. Của bạn mới chỉ là text thuiCảm ơn bạn đã trợ giúp. Công thức đã giải quyết được yêu cầu. Tuy nhiên đúng như bạn nói và cũng là điều mình lo ngại. Do dữ liệu khá lớn nên chạy khá chậm.
Vậy cần xử lý bằng VBA.
Các bạn vui lòng xem và giúp mình với. VBA mình không rành![]()
Sub loc()
Dim cn As Object, dk As String
With Sheets("Detail")
Range("A23:K" & Range("A65000").End(3).Row + 1).Clear
If .Range("G5") <> "" And .Range("G6") <> "" Then dk = "f1 like '%" & .Range("C7") & "%' and f3 like '%" & .Range("H7") & "%' and f24 between #" & .Range("G5") & "# and #" & .Range("G6") & "#"
If .Range("G5") <> "" And .Range("G6") = "" Then dk = "f1 like '%" & .Range("C7") & "%' and f3 like '%" & .Range("H7") & "%' and f24 = #" & .Range("G5") & "#"
If .Range("G5") = "" And .Range("G6") <> "" Then dk = "f1 like '%" & .Range("C7") & "%' and f3 like '%" & .Range("H7") & "%' and f24 <= #" & .Range("G6") & "#"
If .Range("G5") = "" And .Range("G6") = "" Then dk = "f1 like '%" & .Range("C7") & "%' and f3 like '%" & .Range("H7") & "%'"
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";")
.Range("A23").CopyFromRecordset cn.Execute("select f24,f18,f3,f4,f6,f13,f5,f11,f10,f26,f27 from [Data$A3:AA] where " & dk)
Set cn = Nothing
End With
Sheets("Data").Columns("A:A").NumberFormat = "General"
End Sub



Bạn thử code này coi> lưu ý là cột X phải đúng kiểu datae nhé. Của bạn mới chỉ là text thui



Không hiểu ý bạn ở đây là gì chứ mình chạy thấy có vấn đề gì với chọn ngày đâu. Vẫn chạy bình thường. hicCảm ơn bạn đã quan tâm. Mình đã chuyển ngày sang kiểu date và test thử nhưng dữ liệu không thực hiện việc chọn ngày.
Bạn vui lòng xem thêm giùm mình nhé



Không hiểu ý bạn ở đây là gì chứ mình chạy thấy có vấn đề gì với chọn ngày đâu. Vẫn chạy bình thường. hic



Bạn xem video................Mình chọn Mã hàng & Batch & ngày từ ngày 02/02/2017 đến ngày 03/02/2017 nhưng dữ liều lại lấy tất cả các ngày & khi chọn từ ngày (bỏ trống) đến ngày 03/02/2017 thì dữ liệu đúng ra chỉ lấy các ngày trước ngày 03/02/2017 nhưng lại lấy tất cả các ngày.
Bạn xem thêm giùm mình nhé (trong file có comment điều kiện)
Cảm ơn bạn