[英]How to Set Large Range Array Formula and KEEP Relative Row References
我試圖在Excel中將較大范圍設置為數組公式。 如果我循環瀏覽,將花費太長時間。 如果我將公式插入相鄰列中,然后將.FormulaArray
設置為該.Range.Formula
則將花費太長時間。
我在這里閱讀了一個解決方案: VBA的數組公式
但這對我不起作用。
當前嘗試:
Sub ConvertFormulaToFormulaArray()
' Application.ScreenUpdating = False
wsData.Range("K2:K27145").FormulaArray = "=IF(H2="""",INDEX($H:$H,MATCH(1,($R$34=$A:$A)*($R$35=$B:$B)*(C2=$C:$C)*(D2=$D:$D),0)),H2)"
' wsData.Range("K2:K27145").FormulaArray = wsData.Range("J2:J27145").Formula
wsData.Range("K2:K27145").Copy
wsData.Range("K2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
' Application.ScreenUpdating = True
End Sub
電流輸出:
所需的輸出:
我在這里想念什么?
更新-嘗試了其他方法
需要太長時間
wsData.Range("K2").FormulaArray = "=IF(H2="""",INDEX($H:$H,MATCH(1,($R$34=$A:$A)*($R$35=$B:$B)*(C2=$C:$C)*(D2=$D:$D),0)),H2)"
wsData.Range("K2:K27145").FillDown
不返回正確的值。
wsData.Range("K2:K27145").FormulaArray = "=IF(H2:H27145="""",INDEX($H:$H,MATCH(1,($R$34=$A:$A)*($R$35=$B:$B)*(C2:C27145=$C:$C)*(D2:D27145=$D:$D),0)),H2:H27145)"
這是通過使用非數組公式完全避免此問題的方法:
Sub ConvertFormulaToFormulaArray()
' Application.ScreenUpdating = False
wsData.Range("K2:K27145").Formula = "=IF(H2="""",LOOKUP(2,1/($R$34=$A:$A)/($R$35=$B:$B)/(C2=$C:$C)/(D2=$D:$D),$H:$H),H2)"
wsData.Range("K2:K27145").Copy
wsData.Range("K2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
' Application.ScreenUpdating = True
End Sub
盡管如果您可以將搜索范圍限制為相同的行,而不是整個列,則應該可以使運行速度更快。
嘗試這個
wsData.Range("K2:K27145").FormulaArray = "=IF(H2:H27145="""",INDEX($H:$H,MATCH(1,($R$34=$A:$A)*($R$35=$B:$B)*(C2:C27145=$C:$C)*(D2:27145=$D:$D),0)),H2:H27145)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.