Giúp mình sửa code Lọc bị lỗi khí số lượng ký tự nhiều

Liên hệ QC

binhthuong123

Thành viên mới
Tham gia
15/5/17
Bài viết
2
Được thích
0
Giới tính
Nam
Chào cả Nhà GPE !
Em có dùng Đoạn code lọc sau của anh Bate . Code lọc dạng mãng rất là nhanh. nhưng đang bị 1 vấn đề khi Số lượng ký tự của 1 ô nào đó mà >=911 ký tự thì nó Lọc không chính xác ( em dã test trên máy của em dùng Excel 2003 ). Tại vì file của em có khi Len ( tên hàng ) = 1500 số lượng ký tự thì nó lọc sai hết. Giờ em muốn sửa lại miển sao lọc khi tên hàng < 2000 ký tự là OK. rất mong mọi người giúp đở. Mình xin chân thành cảm ơn !

p/S: rất mong thầy Ndu và anh Bate ra tay giúp em vì code này là của mấy Thầy.


Mã:
Sub LOCcoban()
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Col As Long
sArr = Range("B4:D16").Value ' DU LIEU DAU VAO
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT
For I = 1 To R
    If sArr(I, 1) = "a" Then '
        K = K + 1
        For Col = 1 To 3 ' 3 COT
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
' OUTPUT
On Error Resume Next
Range("J5").Resize(R, 3).ClearContents
Range("J5").Resize(K, 3) = dArr ' 3 COT
End Sub

Nay
 

File đính kèm

  • Sua code loc.xls
    28 KB · Đọc: 15
Xin hỏi bạn 2 vấn đề:

(1) Tên hàng gì mà dài thế? Hay nó là địa chỉ mạng?

(2) Con số 911 bạn lấy thông qua thực nghiệm, fải hông? Mình cho rằng nó hơn con này 1 tẹo cơ đấy!
 
Upvote 0
Upvote 0
Xin hỏi bạn 2 vấn đề:

(1) Tên hàng gì mà dài thế? Hay nó là địa chỉ mạng?

(2) Con số 911 bạn lấy thông qua thực nghiệm, fải hông? Mình cho rằng nó hơn con này 1 tẹo cơ đấy!

Dạ đó là tên hàng anh tại tên hàng của em nó nhiều thứ nối lại ( Tên hàng & Kích thước & nhà cung cấp & người giao ... ) cái này em copy từ 1 phần mềm bán hàng ra để em làm báo cáo. Số 911 đó là e tự thử vì em thấy khi tên hàng < 911 ký tự thì nó lọc OK mà lớn hơn thì nó lọc sai. Anh xem giúp em
 
Upvote 0
Dạ đó là tên hàng anh tại tên hàng của em nó nhiều thứ nối lại ( Tên hàng & Kích thước & nhà cung cấp & người giao ... ) cái này em copy từ 1 phần mềm bán hàng ra để em làm báo cáo.
Số 911 đó là e tự thử vì em thấy khi tên hàng < 911 ký tự thì nó lọc OK mà lớn hơn thì nó lọc sai. Anh xem giúp em
Cái bạn cần là tách theo từng cột/trường như [Tên hàng], [Kích cỡ], [NCC], [Người giao], . . . .
Bạn tham khảo chuyện TextToColumns xem sao?!
Cách mà bạn làm chả giống ai nên sẽ khổ dài dài & ai đó tiếp tục giúp mà không tách riêng từng thành tố là có nhã í hại bạn mà thôi.

Con số đó liên quan đến 1024

A DI ĐÀ FẬT!
 
Lần chỉnh sửa cuối:
Upvote 0
(Trùng bài! Xin nhờ các SMOD/MODs xóa giúp, Rất cảm ơn!)
 
Lần chỉnh sửa cuối:
Upvote 0
(Trùng bài! Xin nhờ các SMOD/MODs xóa giúp, Rất cảm ơn!)
sao chưa giúp được lại chạy vậy anh. Khổ nói e test là 911 mà sao anh cứ khăn khăn ý của mình là đúng là sao ta. A thử chưa. Còn cái dữ liệu đó e copy từ nguồn khác không cần phải tách gì hết anh hiểu không
 
Upvote 0
sao chưa giúp được lại chạy vậy anh. Khổ nói e test là 911 mà sao anh cứ khăn khăn ý của mình là đúng là sao ta. A thử chưa. Còn cái dữ liệu đó e copy từ nguồn khác không cần phải tách gì hết anh hiểu không
tôi thêm thành 1826 ký tự lọc xong vẫn đúng mà bạn
 
Upvote 0
sao chưa giúp được lại chạy vậy anh. Khổ nói e test là 911 mà sao anh cứ khăn khăn ý của mình là đúng là sao ta. A thử chưa.
Còn cái dữ liệu đó e copy từ nguồn khác không cần phải tách gì hết anh hiểu không
Xin hỏi bạn với E2003 thì 1 ô có thể chứa bao nhiêu kí tự?
Mình không cho là í mình đúng; Mình chỉ muốn rằng ai cũng nên tự chiêm nghiệm cái sai của mình là ở đâu.

Còn bạn nói không cần tách gì hết là bạn nói ngang & chúng ta nên chấm dứt trao đổi thì hay hơn;
Bạn chờ người khác trong cộng đồng đi vậy & chúc thành công!

Cái chuyện "anh hiểu không" thì xin lỗi mình chả khi nào hiểu nổi cách làm của bạn; Thú thiệt lần đấu tiên kể từ khi mình tồn tại đến giờ luôn đó nha.
 
Upvote 0
tôi thêm thành 1826 ký tự lọc xong vẫn đúng mà bạn
Bây giờ nói anh không tin thì em sẽ gửi Teamview cho anh xem. Khi >= 911 ký tự thì nó lọc sai hoàn toàn.
Em có gửi File em nhập hơn 911 ký tự anh thử Dowload xuống và chạy code và mở Thật To mắt ra xem nó có đúng không ?
 

File đính kèm

  • Sua code loc.xls
    28 KB · Đọc: 2
Upvote 0
Xin hỏi bạn với E2003 thì 1 ô có thể chứa bao nhiêu kí tự?
Mình không cho là í mình đúng; Mình chỉ muốn rằng ai cũng nên tự chiêm nghiệm cái sai của mình là ở đâu.

Còn bạn nói không cần tách gì hết là bạn nói ngang & chúng ta nên chấm dứt trao đổi thì hay hơn;
Bạn chờ người khác trong cộng đồng đi vậy & chúc thành công!

Cái chuyện "anh hiểu không" thì xin lỗi mình chả khi nào hiểu nổi cách làm của bạn; Thú thiệt lần đấu tiên kể từ khi mình tồn tại đến giờ luôn đó nha.

Thế giờ mình cá với bạn 100 triệu bạn dám chơi không. Nếu bạn nhập lớn hớn 911 ký tự bạn thử Test code nó chạy có đúng không. Mình ở Quận 10 nếu bạn thích liên hệ qua Mail mình sẽ gặp, Hoặc có thể mở Teamview cho bạn xem

Dowload file xuống mở thử nó chạy đúng không nha . mình dùng Excel 2003
 

File đính kèm

  • Sua code loc.xls
    28 KB · Đọc: 10
Upvote 0
Mình sửa lại thế này thấy lọc đúng nè:
PHP:
Sub LOCcoban()
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Col As Long
sArr = Range("B4:f16").Value ' DU LIEU DAU VAO D->F'

R = UBound(sArr)
ReDim dArr(1 To R, 1 To 5) ' 3=>5 COT'
For I = 1 To R
    If sArr(I, 1) = "b" Then ''
        K = K + 1
        For Col = 1 To 5 ' 3=>5  COT'
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
' OUTPUT'
On Error Resume Next
Range("L4").Resize(R, 5).ClearContents
Range("l4").Resize(K, 5) = dArr ' 5 COT'
End Sub

Ở đây mình thêm 2 cột sau cột [d]; công thức tại [E4]: =Left(d4,99) & tại ô liền kề bên fải là =MID(D4;100;10^4)

Chắc tại mình xài E2007!
 
Upvote 0
Mình sửa lại thế này thấy lọc đúng nè:
...
Chắc tại mình xài E2007!

Điệu này sẽ có ngừoi mất 100 triệu thôi bạn ơi.
Gặp vấn đề của dữ liệu thì phải debug. Đặt break/watch. Chĩa ngay đúng cái chuỗi gây sai mà phân tích nó.
Chủ thớt cứ lớn họng "có hiểu không" thế này thì 10 ngày sau cũng chả đến đâu.
 
Upvote 0
Thực nghiệm cho thấy, đúng như chủ Topic nói (anh nào đó dễ bị mất 100kk). Trong khi chưa tìm được cách nào hay hơn thì chữa cháy bằng cách sửa thêm code bài #1:
Sub LOCcoban()
Dim sArr(), dArr() As String, I As Long, K As Long, R As Long, Col As Long
sArr = Range("B4:D16").Value ' DU LIEU DAU VAO
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT
For I = 1 To R
If sArr(I, 1) = "a" Then '
K = K + 1
For Col = 1 To 3 ' 3 COT
dArr(K, Col) = sArr(I, Col)
Next Col
End If
Next I
[h30] = dArr(1, 3)
' OUTPUT
'On Error Resume Next
Range("J5").Resize(R, 3).ClearContents
Range("J5").Resize(K, 2) = dArr ' 3 COT
For I = 1 To K
Range("L5").Offset(I - 1) = dArr(I, 3)
Next
End Sub
 
Upvote 0
Thực nghiệm cho thấy, đúng như chủ Topic nói (anh nào đó dễ bị mất 100kk). Trong khi chưa tìm được cách nào hay hơn thì chữa cháy bằng cách sửa thêm code bài #1:
Ở đây có người đủ khả năng giải thích hiện tượng này. Nhưng tôi e rằng người này không thích dính dáng chuyện Excel thời thượng. Tôi thì lại càng không thích bất cứ cái file nào đuôi xls.

(lần đầu tiên tôi mới biết có vụ kk = triệu. Hồi nào giờ chỉ biết có người gọi 1 triệu là trăm vạn)
 
Upvote 0
Thôi giải thích luôn để bà con khỏi "chữa cháy" cho mất công.
Excel 2003 bị vấn đề với độ dài chuỗi. Dùng VBA chép một mảng chuỗi dài vào một range trong Excel thì phải coi chừng độ dài chuỗi.
Khi chuỗi dài trên 911 ký tự thì một trong 2 trường hợp sau đây có thể xảy ra:
1. chuỗi bị cắt bớt còn lai 911 ký tự
2. lỗi 1004. (ông nội ai biết được tại sao lại là lỗi "object")
Cách chữa duy nhất là chuyển qua 2016 hay 365. Thời buổi công nghệ bi giờ mà còn xài đồ đã được thay thế 12 năm trước.
 
Upvote 0
Thôi giải thích luôn để bà con khỏi "chữa cháy" cho mất công.
Excel 2003 bị vấn đề với độ dài chuỗi. Dùng VBA chép một mảng chuỗi dài vào một range trong Excel thì phải coi chừng độ dài chuỗi.
Khi chuỗi dài trên 911 ký tự thì một trong 2 trường hợp sau đây có thể xảy ra:
1. chuỗi bị cắt bớt còn lai 911 ký tự
2. lỗi 1004. (ông nội ai biết được tại sao lại là lỗi "object")
Cách chữa duy nhất là chuyển qua 2016 hay 365. Thời buổi công nghệ bi giờ mà còn xài đồ đã được thay thế 12 năm trước.

Cảm ơn bác đã giải thích. Còn tại sao vẫn dùng Excel 2003 thì có lý do của nó ( ví dụ như Nhà bác là nhà Tranh thì có nên gắn Máy lạnh không ) Nên có những chuyện có lý do người ta mới làm, Còn chuyện dùng 2016 hay 365 thì ai mà chả biết nó Mạnh hơn. Excel 2003 cho tốc độ xữ lý nhanh, Lưu file nhanh, cài đặt chiếm ít bộ nhớ.....và máy có cấu hình Cùi bắp cài củng được...Nói sơ sơ vậy bác hiểu rồi chứ
 
Upvote 0
"Còn cái dữ liệu đó e copy từ nguồn khác không cần phải tách gì hết anh hiểu không"
"Dowload xuống và chạy code và mở Thật To mắt ra xem nó có đúng không ?"
"Nói sơ sơ vậy bác hiểu rồi chứ"

Nam mô a zi đà fật! Bần tăng người trần mắt thịt, sao hiểu được những chuyện động trời như vầy!
 
Upvote 0
Trong Bảng có dùng mã hàng, sao không dùng mã để tra (cho nó nhẹ nhàng), lại dùng tên hàng tra không được rồi khóc (tên hàng đôi lúc lỡ tay nhập liệu có khoảng trắng hoặc dấu chấm, dấu phẩy thì tra kiểu gì cho nó ra kết quả).
 
Upvote 0
Web KT
Back
Top Bottom