Hỏi về VBA match và index để tăng tốc xử lí dữ liệu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

nquanglam1987

Thành viên mới
Tham gia
17/4/24
Bài viết
1
Được thích
0
Mình dùng hàm match và Index nhưng dữ liệu quá lớn chạy rất chậm. Có cách nào dùng VBA mảng để khi mình bấm nút check sẽ ra kết quả nhanh k ạ . Cám ơn cả nhà
 

File đính kèm

  • Book11111.2222.xlsx
    18.1 KB · Đọc: 11
Tặng bạn code cùi bắp trong khi chờ giải pháp khác.
Option Explicit

Sub GetData()
Dim lr, lrData, i, z As Long
Dim Arng, Brng As Range
Dim sArr(), sRes()

With Sheet2
lrData = .Range("A" & Rows.Count).End(xlUp).Row
Set Arng = .Range("A2:A" & lrData)
Set Brng = .Range("B2:B" & lrData)

With Sheet1
lr = .Range("A" & Rows.Count).End(xlUp).Row
sArr = .Range("A2:K" & lr).Value
End With

ReDim sRes(LBound(sArr) To UBound(sArr), 1 To 1)
z = 0

For i = LBound(sArr) To UBound(sArr)
If sArr(i, 1) = Arng.Cells(i, 1).Value And sArr(i, 2) = Brng.Cells(i, 1).Value Then
z = z + 1
sRes(z, 1) = sArr(i, 7)
End If
Next i

If z > 0 Then
.Range("D2:D15000").ClearContents
.Range("D2").Resize(z, 1).Value = sRes
MsgBox "Done.", vbInformation
Else
MsgBox "Error.", vbExclamation
End If
End With
End Sub
 
Tặng bạn code cùi bắp trong khi chờ giải pháp khác.
Option Explicit

Sub GetData()
Dim lr, lrData, i, z As Long
Dim Arng, Brng As Range
Dim sArr(), sRes()

With Sheet2
lrData = .Range("A" & Rows.Count).End(xlUp).Row
Set Arng = .Range("A2:A" & lrData)
Set Brng = .Range("B2:B" & lrData)

With Sheet1
lr = .Range("A" & Rows.Count).End(xlUp).Row
sArr = .Range("A2:K" & lr).Value
End With

ReDim sRes(LBound(sArr) To UBound(sArr), 1 To 1)
z = 0

For i = LBound(sArr) To UBound(sArr)
If sArr(i, 1) = Arng.Cells(i, 1).Value And sArr(i, 2) = Brng.Cells(i, 1).Value Then
z = z + 1
sRes(z, 1) = sArr(i, 7)
End If
Next i

If z > 0 Then
.Range("D2:D15000").ClearContents
.Range("D2").Resize(z, 1).Value = sRes
MsgBox "Done.", vbInformation
Else
MsgBox "Error.", vbExclamation
End If
End With
End Sub
Trong VBA, khi bạn khai báo nhiều biến trong một dòng với cùng một kiểu dữ liệu, chỉ có biến cuối cùng mới được gán kiểu dữ liệu đó. Các biến khác sẽ mặc định là kiểu Variant.

Vì vậy, dòng code Dim lr, lrData, i, z As Long của bạn sẽ khai báo biến z là kiểu Long, còn lr, lrData, và i sẽ là kiểu Variant.

Nếu bạn muốn khai báo tất cả các biến là kiểu Long, bạn nên viết như sau:

Dim lr As Long, lrData As Long, i As Long, z As Long
Cách viết trên sẽ đảm bảo rằng tất cả các biến lr, lrData, i, và z đều được khai báo là kiểu Long.
 
Web KT
Back
Top Bottom