dạ Thầy cho em hỏi, em viết một code để lọc dữ liệu, nhưng khi làm xong thì vẫn chạy nhưng rất chậm (khoản 10-15 giây) mới xong, em nghĩ là do dữ liệu nhiều, em có xóa bớt dữ liệu nhưng vẫn vậy . Thầy chỉ em cách khắc phục với
Chào bạn bạn đang sử dụng cách nào để lọc nhỉ? bạn có thể gửi code lên được không?
Sub report()
' Khai bao ca bien can su dung
Dim arr(), kq(), dk As Boolean, i As Long, a As Long, dongcuoi As Long
Dim sh_report As Worksheet
Dim sh_data As Worksheet
Dim tu_ngay As Date
Dim den_ngay As Date
Dim khachhang As String
'Gan cac bien da khai bao
Set sh_data = ThisWorkbook.Sheets("data")
Set sh_report = ThisWorkbook.Sheets("BAO CAO")
khachhang = sh_report.Range("C3").Value
tu_ngay = sh_report.Range("C4").Value
den_ngay = sh_report.Range("C5").Value
With sh_data
dongcuoi = .Range("A" & Rows.Count).End(xlDown).Row ' Dong cuoi cua sheet data
arr = .Range("A4:H" & dongcuoi).Value 'Vung du lieu cua data
ReDim kq(1 To UBound(arr, 1), 1 To 8) 'khai bao pham vi chua du lieu bao cao
End With
For i = 1 To UBound(arr, 1) ' khai bao bien i cho vong lap, i se chay tu "dong 1" toi "dong cuoi-cot 1"cua vung du lieu
'Dieu kien khi loc du lieu
If khachhang = sh_report.Range("L2").Value Then
dk = arr(i, 2) >= tu_ngay And arr(i, 2) <= den_ngay
Else
dk = arr(i, 2) >= tu_ngay And arr(i, 2) <= den_ngay And arr(i, 8) = khachhang
End If
If dk = True Then
a = a + 1
kq(a, 1) = arr(i, 1)
kq(a, 2) = arr(i, 2)
kq(a, 3) = arr(i, 3)
kq(a, 4) = arr(i, 4)
kq(a, 5) = arr(i, 5)
kq(a, 6) = arr(i, 6)
kq(a, 7) = arr(i, 7)
kq(a, 8) = arr(i, 8)
End If
Next i
'Xoa du lieu cu tai sheet bao cao
sh_report.Range("A9:H10000").ClearContents
'Dan noi dung bao cao vao vi tri
If a > 0 Then
sh_report.Range("A9").Resize(a, 8).Value = kq
Else
MsgBox " khong co ket qua nao", vbInformation
End If
End Sub
Chào bạn bạn đẩy cả file lên nhé.
https://drive.google.com/file/d/1oHfe...
dạ em gởi link file, vì trong mục này không có chổ up file trực tiếp
Chào bạn bạn thử nhé
Option Explicit
Sub GitihoArr()
Dim arr(), kq(), i As Long, k As Long, dongcuoi As Long
Sheet1.Range("A9:H10000").ClearContents
dongcuoi = Timdongcuoi(ShData, "A")
arr = ShData.Range("A4:H" & dongcuoi).Value
ReDim kq(LBound(arr, 1) To UBound(arr, 1), LBound(arr, 2) To UBound(arr, 2))
For i = LBound(arr, 1) To UBound(arr, 1)
If (CDate(arr(i, 2)) >= Sheet1.Range("C4").Value And CDate(arr(i, 2)) <= Sheet1.Range("C5").Value) Then
If (Sheet1.Range("C3").Value = "T" & ChrW(7844) & "T C" & ChrW(7842)) Then
k = k + 1
kq(k, 1) = arr(i, 1)
kq(k, 2) = arr(i, 2)
kq(k, 3) = arr(i, 3)
kq(k, 4) = arr(i, 4)
kq(k, 5) = arr(i, 5)
kq(k, 6) = arr(i, 6)
kq(k, 7) = arr(i, 7)
kq(k, 8) = arr(i, 8)
ElseIf (arr(i, 8) = Sheet1.Range("C3").Value) Then
k = k + 1
kq(k, 1) = arr(i, 1)
kq(k, 2) = arr(i, 2)
kq(k, 3) = arr(i, 3)
kq(k, 4) = arr(i, 4)
kq(k, 5) = arr(i, 5)
kq(k, 6) = arr(i, 6)
kq(k, 7) = arr(i, 7)
kq(k, 8) = arr(i, 8)
End If
End If
Next i
If k > 0 Then
Sheet1.Range("A9").Resize(k, 8).Value = kq
End If
End Sub
Function Timdongcuoi(ws As Worksheet, cot As String) As Long
Timdongcuoi = ws.Range(cot & ws.rows.Count).End(xlUp).Row
End Function
Chào bạn bạn xem code nhé
Option Explicit
Sub GitihoArr()
Dim arr(), kq(), dk As Boolean, i As Long, k As Long, dongcuoi As Long
Sheet1.Range("A9:H10000").ClearContents
dongcuoi = Timdongcuoi(ShData, "A")
arr = ShData.Range("A4:H" & dongcuoi).Value
ReDim kq(LBound(arr, 1) To UBound(arr, 1), LBound(arr, 2) To UBound(arr, 2))
For i = LBound(arr, 1) To UBound(arr, 1)
If (CDate(arr(i, 2)) >= Sheet1.Range("C4").Value And CDate(arr(i, 2)) <= Sheet1.Range("C5").Value) Then
If (Sheet1.Range("C3").Value = "T" & ChrW(7844) & "T C" & ChrW(7842)) Then
k = k + 1
kq(k, 1) = arr(i, 1)
kq(k, 2) = arr(i, 2)
kq(k, 3) = arr(i, 3)
kq(k, 4) = arr(i, 4)
kq(k, 5) = arr(i, 5)
kq(k, 6) = arr(i, 6)
kq(k, 7) = arr(i, 7)
kq(k, 8) = arr(i, 8)
ElseIf (arr(i, 8) = Sheet1.Range("C3").Value) Then
k = k + 1
kq(k, 1) = arr(i, 1)
kq(k, 2) = arr(i, 2)
kq(k, 3) = arr(i, 3)
kq(k, 4) = arr(i, 4)
kq(k, 5) = arr(i, 5)
kq(k, 6) = arr(i, 6)
kq(k, 7) = arr(i, 7)
kq(k, 8) = arr(i, 8)
End If
End If
Next i
If k > 0 Then
Sheet1.Range("A9").Resize(k, 8).Value = kq
End If
End Sub
Function Timdongcuoi(ws As Worksheet, cot As String) As Long
Timdongcuoi = ws.Range(cot & ws.rows.Count).End(xlUp).Row
End Function
dạ em cảm ơn thầy, em sẽ nghiên cứu lại, thật sự em tham khảo và thực hành file như này để cho hiểu, sau đó áp dụng qua chuyên nghành của em, e đang có nhu cầu làm tương tự trong vi dụ này!
ok bạn bạn có thể tham khảo khoá sau sẽ có cách code rất nhanh
các khuyến mãi hiện tại không dành cho lớp VBAG02 hả thầy? ( em thấy trên trang chủ thông báo đang khuyến mãi mà tìm ko thấy vbag02)
Chào bạn gitiho sẽ có cskh gọi cho bạn nhé.