我對 VBA 相當陌生,需要在 Excel 公式中計算 3 個變數的不同迭代的大量串列。由于存在 3 個變數,我不相信可以使用“假設”分析來完成此操作。
我撰寫了以下內容,以嘗試將變數表“批處理”中的三個變數“復制/粘貼”到另一個計算表(主)中。在作業表中進行此計算后,我從計算表(主)中選擇結果并將其粘貼回原始的“批處理”表中。
我似乎遇到的問題是這非常慢 - 基于單次迭代時間,我的機器上估計大約需要 18 小時。如果有人可以幫助我優化,我將不勝感激!!
Sub Macro3()
Application.ScreenUpdating = False
Dim i As Long
For i = 2 To 65095
Application.StatusBar = "Current iteration: " & i
'CopyPaste Data
ThisWorkbook.Worksheets("Main").Range("D6").Value = Worksheets("Batch").Range("D" & i).Value
ThisWorkbook.Worksheets("Main").Range("D7").Value = Worksheets("Batch").Range("E" & i).Value
ThisWorkbook.Worksheets("Main").Range("D8").Value = Worksheets("Batch").Range("F" & i).Value
ThisWorkbook.Worksheets("Main").Range("D9").Value = Worksheets("Batch").Range("G" & i).Value
'CopyPaste Result
ThisWorkbook.Worksheets("Batch").Range("H" & i).Value = Worksheets("Main").Range("E19")
Next i
End Sub
uj5u.com熱心網友回復:
Application.Transpose()用于支持輸入值的一個實體,觸發一次計算的示例:
Sub testApplicationTranspose()
With Sheets(1)
Dim sourceRng As Range: Set sourceRng = .Range("b2:b5")
Dim destinationRng As Range: Set destinationRng = .Range("d7:g7")
End With
destinationRng = Application.Transpose(sourceRng)
End Sub

Edit1:應用于您的代碼:
Sub Execute()
applicationToggle False
Dim i As Long
For i = 2 To 65095
Application.StatusBar = "Current iteration: " & i
'CopyPaste Data
Dim sourceRng As Range: Set sourceRng = Worksheets("Batch").Range("D" & i & ":G" & i)
Dim destinationRng As Range: Set destinationRng = ThisWorkbook.Worksheets("Main").Range("D6:D9")
destinationRng = Application.Transpose(sourceRng)
'CopyPaste Result
ThisWorkbook.Worksheets("Batch").Range("H" & i).Value = Worksheets("Main").Range("E19")
Next i
applicationToggle True
End Sub
Sub applicationToggle(val as Boolean)
With Application
.EnableEvents = val
.ScreenUpdating = val
End With
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/513811.html
標籤:擅长vba
