Code VBA lọc thiếu dữ liệu

Liên hệ QC

syquyen1987

Thành viên hoạt động
Tham gia
8/7/18
Bài viết
193
Được thích
43
Mình đang học thêm VBA, nhưng sáng nay gặp một vấn đề mà cả buổi sáng nghĩ nát cả óc không hiểu tại sao. Mong mọi người giải thích giúp mình là code mình sai ở đâu mà vùng kết quả không phải 15 dòng. Nếu cột K được đánh số theo thứ tự tăng dần từ 1 đến 5 thì vùng trả kết quả lại thay đổi (không có số 5 trong cột xử lý). Mình có cách khác để có kết quả đúng như mong đợi, nhưng mình muốn hỏi về code mảng lại k ra đúng kết quả. Code không ra đúng kết quả như dưới đây:

brr = Range("A1:C15").Value
For j = 1 To 5
For i = 1 To 15
If brr(i, 1) = Cells(j, 11) Then
h = h + 1
brr(h, 1) = brr(i, 1)
brr(h, 2) = brr(i, 2)
brr(h, 3) = brr(i, 3)
End If
Next i
Next j
Range("D1:F100").ClearContents
Range("D1:F1").Resize(h) = brr

Debug.Print h
1597636823172.png
 

File đính kèm

  • Khong hieu.xlsm
    17.2 KB · Đọc: 12
Lần chỉnh sửa cuối:
Mình đang học thêm VBA, nhưng sáng nay gặp một vấn đề mà cả buổi sáng nghĩ nát cả óc không hiểu tại sao. Mong mọi người giải thích giúp mình là code mình sai ở đâu mà vùng kết quả không phải 15 dòng. Nếu cột K được đánh số theo thứ tự tăng dần từ 1 đến 5 thì vùng trả kết quả lại thay đổi (không có số 5 trong cột xử lý).
View attachment 243295
Bạn thử sửa dòng này For j = 1 To 5 thành For j = 1 To 20 xem sao
 
Upvote 0
Bạn thử sửa dòng này For j = 1 To 5 thành For j = 1 To 20 xem sao
Vẫn thế bạn ạ, tất nhiên có cách khác ra đúng kết quả khi không dùng hàm mảng. Nhưng mình tò mò về code mảng mình viết tại sao không ra đúng yêu cầu. Mà khi thay đổi sắp xếp cột K (điều kiện lọc theo) thì kết quả lại thay đổi
 
Upvote 0
Vẫn thế bạn ạ, tất nhiên có cách khác ra đúng kết quả khi không dùng hàm mảng. Nhưng mình tò mò về code mảng mình viết tại sao không ra đúng yêu cầu. Mà khi thay đổi sắp xếp cột K (điều kiện lọc theo) thì kết quả lại thay đổi
Bạn thử cái này coi
Mã:
Sub a()
Dim brr(), KQ(), i&, j, h&
    brr = Range("A1:C15").Value
    ReDim KQ(1 To UBound(brr, 1), 1 To 3)
        For j = 1 To 5
            For i = 1 To 15
                If brr(i, 1) = Cells(j, 11) Then
                    h = h + 1
                    KQ(h, 1) = brr(i, 1): KQ(h, 2) = brr(i, 2): KQ(h, 3) = brr(i, 3)
                End If
            Next i
        Next j
    Range("D1:F100").ClearContents
    Range("D1:F1").Resize(h) = KQ
    Debug.Print h
End Sub
 
Upvote 0
Ca
Bạn thử cái này coi
Mã:
Sub a()
Dim brr(), KQ(), i&, j, h&
    brr = Range("A1:C15").Value
    ReDim KQ(1 To UBound(brr, 1), 1 To 3)
        For j = 1 To 5
            For i = 1 To 15
                If brr(i, 1) = Cells(j, 11) Then
                    h = h + 1
                    KQ(h, 1) = brr(i, 1): KQ(h, 2) = brr(i, 2): KQ(h, 3) = brr(i, 3)
                End If
            Next i
        Next j
    Range("D1:F100").ClearContents
    Range("D1:F1").Resize(h) = KQ
    Debug.Print h
End Sub
Cám ơn bạn, code của bạn ra đúng như yêu cầu. So sánh code của mình và code của bạn thì dòng code của mình brr(h, 1) = brr(i, 1) là có vấn đề. Mình vẫn thắc mắc hỏi tại sao vẫn cần phải kê khai 2 mảng trong VBA (1 là mảng nguồn, 2 là mảng kết quả), mà không thể dùng 1 mảng như code của mình, vì mảng nguồn và mảng kết quả đều có cùng số dòng. Mình vẫn nghĩ là tại sao code mình lại bị sai?
 
Upvote 0
Ca

Cám ơn bạn, code của bạn ra đúng như yêu cầu. So sánh code của mình và code của bạn thì dòng code của mình brr(h, 1) = brr(i, 1) là có vấn đề. Mình vẫn thắc mắc hỏi tại sao vẫn cần phải kê khai 2 mảng trong VBA (1 là mảng nguồn, 2 là mảng kết quả), mà không thể dùng 1 mảng như code của mình, vì mảng nguồn và mảng kết quả đều có cùng số dòng. Mình vẫn nghĩ là tại sao code mình lại bị sai?
Em hông biết nên giải thích sao nữa. Tại không phải dân chuyên.Nhưng theo em hiểu. Nếu dùng 1 mảng. Thì chắc là mảng dữ liệu ban đầu nó sẽ bị thay đổi. Vào vong lặp. Nó sẽ ra không đúng kết quả
 
Lần chỉnh sửa cuối:
Upvote 0
Mình đang học thêm VBA, nhưng sáng nay gặp một vấn đề mà cả buổi sáng nghĩ nát cả óc không hiểu tại sao. Mong mọi người giải thích giúp mình là code mình sai ở đâu mà vùng kết quả không phải 15 dòng. Nếu cột K được đánh số theo thứ tự tăng dần từ 1 đến 5 thì vùng trả kết quả lại thay đổi (không có số 5 trong cột xử lý). Mình có cách khác để có kết quả đúng như mong đợi, nhưng mình muốn hỏi về code mảng lại k ra đúng kết quả. Code không ra đúng kết quả như dưới đây:

brr = Range("A1:C15").Value
For j = 1 To 5
For i = 1 To 15
If brr(i, 1) = Cells(j, 11) Then
h = h + 1
brr(h, 1) = brr(i, 1)
brr(h, 2) = brr(i, 2)
brr(h, 3) = brr(i, 3)
End If
Next i
Next j
Range("D1:F100").ClearContents
Range("D1:F1").Resize(h) = brr

Debug.Print h
View attachment 243295
Bạn sai ở chỗ sửa data gốc.Đáng nhẽ bạn phải khai báo thêm 1 mảng khác.Không được sửa dữ liệu ở data gốc nó sẽ bị thay đổi rồi thì kết quả chẳng sai.
 
Upvote 0
.... Nếu cột K được đánh số theo thứ tự tăng dần từ 1 đến 5 thì vùng trả kết quả lại thay đổi (không có số 5 trong cột xử lý).
...mình muốn hỏi về code mảng lại k ra đúng kết quả. Code không ra đúng kết quả như dưới đây:
...
Hỏi kiểu chết người. Ka nào là ka nào?
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom