Nguyễn Thanh Hoàng
Nguyễn Thanh Hoàng
Thảo luận 10 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 267 lượt xem

em viết một code để lọc dữ liệu nhưng khi làm xong thì vẫn chạy nhưng

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 

Thảo luận 10 câu trả lời
Lượt xem 267 lượt xem
Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 09:08 - Aug 20, 2021

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?

Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 10:08 - Aug 20, 2021

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



Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 10:08 - Aug 20, 2021

Chào bạn bạn đẩy cả file lên nhé. 

Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 14:08 - Aug 20, 2021

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

Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 15:08 - Aug 20, 2021

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
Phần này là mảng của vba còn muốn dạng này viết nhàn nữa bạn xem về sql thì sẽ thấy nhàn nữa.
Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 15:08 - Aug 20, 2021

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

Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 15:08 - Aug 20, 2021

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!

Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 16:08 - Aug 20, 2021

ok bạn bạn có thể tham khảo khoá sau sẽ có cách code rất nhanh

https://by.com.vn/


Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 14:08 - Aug 21, 2021

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)

Vỗ tay vỗ tay
Nguyễn Thanh Hoàng 08:08 - Aug 23, 2021

Chào bạn gitiho sẽ có cskh gọi cho bạn nhé.

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông