2017-05-22 113 views
0

在此處使用VBA的新手。 我需要幫助設置一個VBA命令,它將遍歷B列的範圍,並根據列B中的值在列E中設置索引匹配公式。在列B中遍歷範圍並根據列B中的值設置列E中的索引匹配公式

我嘗試編輯其他帖子的命令,但是我可以' t似乎找出它是如何工作的,基於此鏈接Excel VBA - Loop through range and set formula in each cell

我需要的索引匹配公式基本上與基於另一個工作表中的數據庫的名稱匹配。我目前在工作表中使用了固定的索引匹配功能,但是這會導致對條目進行過濾/排序。我已經使用了另一個宏來清除返回空白單元格的內容 - 但需要很長時間才能運行該表單。

赫雷什式I需要在列E的細胞,如果在列的B細胞是預先感謝1和450之間

=IF($B49="","",INDEX(NAMES,MATCH($B49,ID,0))) 

+0

你爲什麼不把公式複製下來?這對VBA也是可能的! – teylyn

+0

謝謝,但我回到了第一個 - 我得到的單元格返回空白,螺絲過濾/排序。我需要它來放置公式時Idnumbers存在和跳過空白,這樣我就不會獲得單元格返回空白值的公式 –

回答

0

這聽起來像一個簡單的解決方案可能是:

For Each cell In Range("B2:B2000") 
If cell.Value <= 450 And cell.Value >= 0 Then 
    i = cell.Row 
    Range("E" & i).Formula = "=IF($B" & i & "="""","""",INDEX(NAMES,MATCH($B" & i & ",ID,0)))" 
End If 
Next 

將設置在該式中山口E中每次在山口B發現1和450

之間的這種可能成爲一個位值很長的名單很慢。你可以關閉自動計算並表日後事項,以加快速度帶着幾分:

' Deactivate - put this at the start of your code 
Application.Calculation = xlCalculationManual 
Application.EnableEvents = False 

' Reactivate - put this at the end of your code 
Application.Calculation = xlCalculationAutomatic 
Application.EnableEvents = True 

這在我的電腦上給了以下的速度提升(平均時速經過20次迭代):

Without deactivation: 1.043359375 s per iteration 
With deactivation: 0.270703125 s per iteration 

另外,如果是來自索引函數的錯誤是拋出過濾器並進行排序,則可以嘗試將函數包裝在IFERROR()函數中,並完全繞過VBA。

=IFERROR(IF($B49="","",INDEX(NAMES,MATCH($B49,ID,0))),"") 
+0

感謝一堆! –

相關問題