Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 14

Chủ đề: Nhờ các anh chị xử lý tăng tốc hàm người dùng

  1. #1
    tuyla123 Guest

    Nhờ các anh chị xử lý tăng tốc hàm người dùng

    Nhờ các anh chị tăng tốc 2 hàm sau:
    Function dungsai(chuoi As Range, maxa As Byte, maxo As Byte, nx As Boolean)


    Dim m, N, i, j As Byte
    Dim trung As Boolean
    Dim bebe As String


    trung = True
    bebe = WorksheetFunction.Trim(chuoi.Value)


    If nx = False And Len(bebe) > maxo Then
    trung = False
    End If
    If nx = True And Len(bebe) < (maxa - maxo) Then
    trung = False
    End If

    For i = 1 To Len(bebe)
    For j = i + 1 To Len(bebe)
    If Mid(bebe, i, 1) = Mid(bebe, j, 1) Then
    trung = False
    End If
    Next
    If Mid(bebe, i, 1) > maxa Then
    trung = False
    End If
    Next
    dungsai = trung
    End Function
    Function dem(vung As Range, maxd As Long, nxd As Boolean)


    Dim cls As Range, Rng As Range
    Dim tong As Long


    For Each cls In vung
    Set Rng = cls.Find("*" & maxd & "*", LookIn:=xlValues, LookAt:=xlWhole)
    If nxd = False And Not Rng Is Nothing And cls.Value > 0 Then
    tong = tong + 1
    Else
    If nxd = True And Rng Is Nothing And cls.Value > 0 Then
    tong = tong + 1
    End If
    End If
    Next
    dem = tong
    End Function

    Trên máy của em khi sử dụng hàm dungsai, hàm đưa ra kết quả sau 1 - 1,5 giây

    Nhờ các anh chị tìm giải pháp tăng tốc độ để hàm xử lý được nhanh hơn

  2. #2
    Dinhpham001 Guest
    Trích dẫn Gửi bởi adua29
    Nhờ các anh chị tăng tốc 2 hàm sau:
    Function dungsai(chuoi As Range, maxa As Byte, maxo As Byte, nx As Boolean)


    Dim m, N, i, j As Byte
    Dim trung As Boolean
    Dim bebe As String


    trung = True
    bebe = WorksheetFunction.Trim(chuoi.Value)


    If nx = False And Len(bebe) > maxo Then
    trung = False
    End If
    If nx = True And Len(bebe) < (maxa - maxo) Then
    trung = False
    End If

    For i = 1 To Len(bebe)
    For j = i + 1 To Len(bebe)
    If Mid(bebe, i, 1) = Mid(bebe, j, 1) Then
    trung = False
    End If
    Next
    If Mid(bebe, i, 1) > maxa Then
    trung = False
    End If
    Next
    dungsai = trung
    End Function
    Function dem(vung As Range, maxd As Long, nxd As Boolean)


    Dim cls As Range, Rng As Range
    Dim tong As Long


    For Each cls In vung
    Set Rng = cls.Find("*" & maxd & "*", LookIn:=xlValues, LookAt:=xlWhole)
    If nxd = False And Not Rng Is Nothing And cls.Value > 0 Then
    tong = tong + 1
    Else
    If nxd = True And Rng Is Nothing And cls.Value > 0 Then
    tong = tong + 1
    End If
    End If
    Next
    dem = tong
    End Function

    Trên máy của em khi sử dụng hàm dungsai, hàm đưa ra kết quả sau 1 - 1,5 giây

    Nhờ các anh chị tìm giải pháp tăng tốc độ để hàm xử lý được nhanh hơn
    Bây giờ vầy nhé! Công dụng của hàm bạn là gì vậy? áp dụng dữ liệu nào? có file demo mới dễ. Tôi thì ngạy xem cái đám rừng code đó lắm, có file thực tế, nêu yêu cầu cụ thể hy vọng có giải thuật hợp lý.

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    hàm dungsai dùng để kiểm tra điều kiện dữ liệu số trong một ô nếu có ký tự số lớn hơn maxa hoặc số các chữ số trong ô vượt max0 thì cho kết quả sai (hoặc ngược lại khi nx sai)
    hàm này em dùng để kiểm phiếu bầu cử

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Hàm dem dùng để đếm số lượng ký tự maxd xuất hiện trong một mảng ô vung (và ngược lại khi nxd sai), hàm này em cũng dùng để cộng số phiếu bầu cử

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi adua29
    hàm dungsai dùng để kiểm tra điều kiện dữ liệu số trong một ô nếu có ký tự số lớn hơn maxa hoặc số các chữ số trong ô vượt max0 thì cho kết quả sai (hoặc ngược lại khi nx sai)
    hàm này em dùng để kiểm phiếu bầu cử
    Nếu bạn không thích up file thì đợi người khác giúp vậy.

  6. #6
    file của em 1,6mb đã vượt dung lượng giới hạn nên không tải lên GPE được, em chỉ chia sẻ qua gmail thôi

  7. #7
    honghoa Guest
    Cả 2 hàm của bạn đều khắc phục được tốc độ, nhưng không có dữ liệu để test ngạy sửa lắm, sửa xong bạn lại nói chưa đúng, sai chổ này, dữ liệu thật áp dụng không được... Thôi thì bạn tự sửa đi. Có thể góp ý thêm cho bạn như sau: Bạn nên sử dụng cấu trúc IF THEN ELSE cho đầy đủ, nên ghép những điều kiện giống nhau lại (để khỏi xét nhiều lần mất thời gian), khi đã thỏa điều kiện rồi thì kết thúc vòng lặp và cho kết quả luôn (không cần phải xét nửa sẽ mất nhiều thời gian cho dù cuối cùng vẫn đạt kết quả như ban đầu). Mà quên nửa bạn có thể up file vào trang Mediafire.com

  8. #8
    bietthugeleximco Guest
    Trích dẫn Gửi bởi adua29
    file của em 1,6mb đã vượt dung lượng giới hạn nên không tải lên GPE được, em chỉ chia sẻ qua gmail thôi
    Function dungsai(chuoi As Range, maxa As Byte, maxo As Byte, nx As Boolean)
    bạn không cần tải nguyên file, bạn tạo file mới có một số giá trị của tham số như chuoi, maxa, maxo , nx và giải thích cách xử lý và kết quả tạo ra
    tương tự cho Function còn lại

  9. #9
    nguyenvinh16121993 Guest
    Mã nguồn PHP:
    Option ExplicitFunction DungSai(Chuoi As Range, maxA As Byte, maxO As Byte, nX As Boolean) As Boolean Dim M, N, I, J As Byte Dim Trung As Boolean: Dim beBe As String Trung = True beBe = WorksheetFunction.Trim(Chuoi.Value) If nX = False And Len(beBe) > maxO Then Trung = False End If If nX = True And Len(beBe) < (maxA - maxO) Then Trung = False End If For I = 1 To Len(beBe) For J = I + 1 To Len(beBe) If Mid(beBe, I, 1) = Mid(beBe, J, 1) Then Trung = False End If Next J If Mid(beBe, I, 1) > maxA Then Trung = False End If Next I DungSai = TrungEnd Function  
    1.0 Bạn viết cho mọi người khác nhìn nhận vấn đề, nên cần rất tường minh mới fải
    Viết như bạn mình có thể qui kết là bạn thiếu ton trọng những người có nhã í giúp mình.
    1.1 Lí ra bạn cũng nên nêu các tham biến bạn cung cấp là gì, ở khoảng bao nhiêu; Hàm dùng làm gì ngay từ đầu.

    2.0 Vấn đề nữa, chỉ mong bạn xem xét, vì chưa khẳng định được đúng hay sai:
    Hình như sau mỗi dòng lệnh
    Trung =False ta có thể cho thoát ngay khỏi chương trình thì fải (Exit Function)
    Nếu là đúng như vậy thì bạn cũng đã tăng tốc đáng kể cho hàm. (Theo mình hiểu thì chỉ cần 1 điều kiện không thỏa sẽ thoát ngay khoải xét tiếp các điều kiện sau)

    3.0 Đứng là bạn nên có file giả lập lên; Cái cớ file quá lớn là không chính đáng!
    Hay chí ít mô tả công việc thật chi tiết thì đã có đáp án ngay từ đầu.

    Chào bạn & chúc ngày mới vui vẻ!

  10. #10
    tuquychin Guest
    Cảm ơn các anh, em đã tìm ra lỗi chạy chậm, lý do không ở cấu trúc hàm mà do em sử dụng hàm nhiều lần (5000 cel) trong 1 sheet
    Sau khi rút gọn xuống 1500 cel em đã thấy tốc độ xử lý nhanh hơn hẳn.

Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •