2017-11-10 168 views
1

我一直在拼湊一個功能工作簿,使用VBA代碼,因爲我去。通過VLookup提高macor效率?

我目前有一個創建它查看列中的動態值範圍,並將它們轉換爲新值。

Sub ConvertWireSize() 
Dim i As Long 
Sheets("Circuits").Select 
Range("H1").Select 
For i = 1 To Rows.Count 
    If Cells(i, 8).Value = 0.5 Then 
     Cells(i, 8).Value = 20 
    ElseIf Cells(i, 8).Value = 0.8 Then 
     Cells(i, 8).Value = 18 
    ElseIf Cells(i, 8).Value = 1 Then 
     Cells(i, 8).Value = 16 
    ElseIf Cells(i, 8).Value = 2 Then 
     Cells(i, 8).Value = 14 
    ElseIf Cells(i, 8).Value = 3 Then 
     Cells(i, 8).Value = 12 
    ElseIf Cells(i, 8).Value = 5 Then 
     Cells(i, 8).Value = 10 
    ElseIf Cells(i, 8).Value = 8 Then 
     Cells(i, 8).Value = 8 
    ElseIf Cells(i, 8).Value = 13 Then 
     Cells(i, 8).Value = 6 
    ElseIf Cells(i, 8).Value = 19 Then 
     Cells(i, 8).Value = 4 
     End If 
Next i 

MsgBox "Wire Size Has Been Converted From CSA to AWG." 

Sheets("Main").Select 

End Sub 

這似乎是一種非常低效且緩慢的做事方式。 我一直在拼湊一個新的宏,它會使用VLookup,但我做的研究越多,我就越困惑。

有人能幫我指出正確的方向嗎?

回答

1

不要轉到行1048576,只要列H中的值擴展。使用Select Case來清理您的IF。 Don't use Select

Sub ConvertWireSize() 
    Dim i As Long 
    with workSheets("Circuits") 
     For i = 1 To .cells(.Rows.Count, "H").end(xlup).row 
      select case .Cells(i, 8).Value2 
       case 0.5 
        .Cells(i, 8).Value = 20 
       case 0.8 
        .Cells(i, 8).Value = 18 
       case 1 
        .Cells(i, 8).Value = 16 
       ... 
      end select 
     Next i 
    end with 

    MsgBox "Wire Size Has Been Converted From CSA to AWG." 

    workSheets("Main").Select 
End Sub 

我無法確定轉換的線性模式,但您可能可以調整一些數學來完成每次轉換。

如果你有超過幾千個這樣的轉換,那麼內存數組會顯示效率的顯着提高。

+0

非常感謝。這大大提高了宏執行的速度。 –