簡體   English   中英

如何設置大范圍數組公式和KEEP相對行引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM