tăng tốc vòng for

Liên hệ QC

son.hk

Thành viên mới
Tham gia
27/11/21
Bài viết
4
Được thích
2
Chào a/c !
em có 1 vòng lặp chạy nhưng do dữ liệu rất lớn lên thời gian để chạy vòng lặp rất lâu.( file này là file tổng hợp Query từ các fordel khác dữ liệu update theo ngày lên e k để công thức được ạ )
mô tả :
em muốn lấy dữ liệu vào cột I
chính xác : vlookup(j2,L:M,2,0)*F2 ( công thức sẽ là vậy )
em đưa công thức vào vòng lặp cho chạy cột I
Mong a/c hướng dẫn giúp e tăng tốc thời gian chạy vòng for này ạ
có 13 sheet.dữ liệu các sheet tương đương nhau.
Em cảm ơn.!
 

File đính kèm

  • test.xlsm
    952.5 KB · Đọc: 15
mô tả :
em muốn lấy dữ liệu vào cột I
chính xác : vlookup(j2,L:M,2,0)*F2 ( công thức sẽ là vậy )
em đưa công thức vào vòng lặp cho chạy cột I
Mong a/c hướng dẫn giúp e tăng tốc thời gian chạy vòng for này ạ
Ngày mai em đi cho đủ 5 từ.

Mã:
Sub vl()
'    Nên nhớ một lần cho muôn đời: đọc giá trị TỪNG ô từ sheet và ghi giá trị vào TỪNG ô trên sheet là trò chơi rất tốn thời gian, điện nước, xăng dầu ...
'    Nếu số ô cần đọc / ghi rất NHIỀU thì thời gian, điện nước, xăng dầu sẽ tốn rất NHIỀU.
'    Phải đọc dữ liệu vào mảng trong một nốt nhạc -> tính toán trong mảng ->đập kết quả từ mảng xuống sheet trong một nốt nhạc
Dim i, lr As Integer
Dim vl, ketqua(), bangdo(), cotF()
    With Sheet3
        lr = .Range("b" & Rows.Count).End(xlUp).Row
        If lr < 2 Then Exit Sub
        ketqua = .Range("I2:J" & lr).Value
        cotF = .Range("F2:F" & lr + 1).Value    ' lay du 1 dong cuoi
        bangdo = .Range("L1:M15").Value
    End With
    For i = 1 To UBound(ketqua, 1)
        ketqua(i, 1) = Empty
        If ketqua(i, 2) <> "" Then
            vl = Application.VLookup(ketqua(i, 2), bangdo, 2, False)
            If Not IsError(vl) Then ketqua(i, 1) = cotF(i, 1) * vl
        End If
    Next i
    Sheet3.Range("I2").Resize(UBound(ketqua, 1)).Value = ketqua
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ngày mai em đi cho đủ 5 từ.

Mã:
Sub vl()
'    Nên nhớ một lần cho muôn đời: đọc giá trị TỪNG ô từ sheet và ghi giá trị vào TỪNG ô trên sheet là trò chơi rất tốn thời gian, điện nước, xăng dầu ...
'    Nếu số ô cần đọc / ghi rất NHIỀU thì thời gian, điện nước, xăng dầu sẽ tốn rất NHIỀU.
'    Phải đọc dữ liệu vào mảng trong một nốt nhạc -> tính toán trong mảng ->đập kết quả từ mảng xuống sheet trong một nốt nhạc
Dim i, lr As Integer
Dim vl, ketqua(), bangdo(), cotF()
    With Sheet3
        lr = .Range("b" & Rows.Count).End(xlUp).Row
        If lr < 2 Then Exit Sub
        ketqua = .Range("I2:J" & lr).Value
        cotF = .Range("F2:F" & lr + 1).Value    ' lay du 1 dong cuoi
        bangdo = .Range("L1:M15").Value
    End With
    For i = 1 To UBound(ketqua, 1)
        ketqua(i, 1) = Empty
        If ketqua(i, 2) <> "" Then
            vl = Application.VLookup(ketqua(i, 2), bangdo, 2, False)
            If Not IsError(vl) Then ketqua(i, 1) = cotF(i, 1) * vl
        End If
    Next i
    Sheet3.Range("I2").Resize(UBound(ketqua, 1)).Value = ketqua
End Sub
cảm ơn a/c đã hỗ trợ e.
 
Upvote 0
Web KT

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

Back
Top Bottom