Gặp rắc rối về VBA rút trích dữ liệu?

Liên hệ QC

thanhphuongvip

Mới học VBA, hỏi ngu anh chị đừng chửi ạ
Tham gia
16/1/10
Bài viết
136
Được thích
22
Mình có bản A, và rút trích dữ liệu dựa vào tên sản phẩm ra đc bảng B, như 2 hình sau:

1.png

2.png
với code vba như sau:
Mã:
Public Sub loc_sp()
Dim banhang(), kq(), i As Long, d As Long
banhang = Sheet1.Range("A3:E10000")
ReDim kq(1000, 5)
For i = 1 To UBound(banhang)
If banhang(i, 2) = Sheet2.Range("E1") Then
d = d + 1
kq(d, 1) = d
kq(d, 2) = banhang(i, 2)
kq(d, 3) = banhang(i, 3)
kq(d, 4) = banhang(i, 4)
kq(d, 5) = banhang(i, 5)
End If
Next

Sheet2.Range("A2").Resize(d, 5) = kq

End Sub

Lỗi là ở bảng A có 9 dòng VD1, nhưng khi sang bảng B thì chỉ có 8 dòng. Mình ko biết sai chỗ nào, mình có gửi file đính kèm, mời mọi người xem giúp. Cảm ơn rất nhiều ạ!
 

File đính kèm

  • 2.png
    2.png
    15.8 KB · Đọc: 0
  • Book2.xlsm
    18 KB · Đọc: 6
Bạn thay lại cái tiêu đề Topic và thay dòng ReDim kq(1000, 5) thành ReDim kq(1 To UBound(banhang), 1 To 5)
Còn cái này nữa: banhang = Sheet1.Range("A3", Sheet1.Range("E" & Rows.Count).End(3)).Value
Dùng đến đâu thì khai báo đến đó cho máy nó đỡ mệt ;)
 
Upvote 0
Mình có bản A, và rút trích dữ liệu dựa vào tên sản phẩm ra đc bảng B, như 2 hình sau:

với code vba như sau:
Mã:
Public Sub loc_sp()
Dim banhang(), kq(), i As Long, d As Long
banhang = Sheet1.Range("A3:E10000")
ReDim kq(1000, 5)
For i = 1 To UBound(banhang)
If banhang(i, 2) = Sheet2.Range("E1") Then
d = d + 1
kq(d, 1) = d
kq(d, 2) = banhang(i, 2)
kq(d, 3) = banhang(i, 3)
kq(d, 4) = banhang(i, 4)
kq(d, 5) = banhang(i, 5)
End If
Next

Sheet2.Range("A2").Resize(d, 5) = kq

End Sub

Lỗi là ở bảng A có 9 dòng VD1, nhưng khi sang bảng B thì chỉ có 8 dòng. Mình ko biết sai chỗ nào, mình có gửi file đính kèm, mời mọi người xem giúp. Cảm ơn rất nhiều ạ!
kq(1000, 5) bạn sai chố đó, nếu ghi như vậy thì chỉ số đầu tiên của mảng là 0
 
Upvote 0
Bạn thay lại cái tiêu đề Topic và thay dòng ReDim kq(1000, 5) thành ReDim kq(1 To UBound(banhang), 1 To 5)
Còn cái này nữa: banhang = Sheet1.Range("A3", Sheet1.Range("E" & Rows.Count).End(3)).Value
Dùng đến đâu thì khai báo đến đó cho máy nó đỡ mệt ;)
Cảm ơn bạn, mình làm được rồi!
Ah mình ko biết nên đặt tiêu đề thế nào mới đúng vs bài này, bạn tư vấn để lần sau mình làm đúng hơn được ko?
 
Upvote 0
Bạn thay lại cái tiêu đề Topic và thay dòng ReDim kq(1000, 5) thành ReDim kq(1 To UBound(banhang), 1 To 5)
Còn cái này nữa: banhang = Sheet1.Range("A3", Sheet1.Range("E" & Rows.Count).End(3)).Value
Dùng đến đâu thì khai báo đến đó cho máy nó đỡ mệt ;)
Ah bạn ơi, mình còn thiếu một đoạn mã để nó xóa dữ liệu cũ đi trước khi dán dữ liệu mới vào, thì mình thêm như thế nào ạ? Xin cảm ơn!
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom