簡體   English   中英

Excel VBA:比較有效值與較大范圍的公式的方法

[英]Excel VBA: More efficient way to compare values with formulas for large range

我有一個很大的表,值在H2:PIG2202范圍內。 我需要將第一行H2:PIG2值與所有其他行值進行比較。 如果結果表中存在匹配項,則僅粘貼那些匹配的值。 現在,我在結果表中使用此公式來顯示所需的值:

=IF(sheet!H$2=sheet!H3;IF(AND(sheet!H3;ISBLANK(sheet!H3))=FALSE;sheet!H3;"");"")

VBA代碼是:

Sub find()
Application.ScreenUpdating = False
Range("H2:PIG2202").FormulaR1C1 = _
"=IF('sheet'!R2C='sheet'!R[1]C,IF(AND('sheet'!R[1]C,ISBLANK('sheet'!R[1]C))=FALSE,'sheet'!R[1]C,""""),"""")"
Application.ScreenUpdating = True
End Sub

問題是當我運行此宏時,Excel顯示錯誤,表明系統資源不足。

我也希望結果表中的值只是值,而不是公式。

那有可能嗎? 我不知道如何實現這一目標:(

先感謝您!

快速的解決方案雖然不復雜,但我對此並不感到驕傲(但是准備起來最快)。 請記住,您將要運行2400萬次,這可能需要幾分鍾,甚至一個小時。 代碼中的一些注釋。

Sub Solution()
Application.ScreenUpdating = False

'-----previous one
'Range("H2:PIG2202").FormulaR1C1 = _
            "=IF('sheet'!R2C='sheet'!R[1]C,IF(AND('sheet'!R[1]C,ISBLANK('sheet'!R[1]C))=FALSE,'sheet'!R[1]C,""""),"""")"

'----- new one- inserting values- first idea, simple code

Dim Cell As Range
'run for one row first to check if it is ok! and check time needed per row
'next change range to one you expect
'next- take a cup of coffee and relax...

For Each Cell In Range("h2:PIG2")
    Cell.FormulaR1C1 = _
            "=IF('sheet'!R2C='sheet'!R[1]C,IF(AND('sheet'!R[1]C,ISBLANK('sheet'!R[1]C))=FALSE,'sheet'!R[1]C,""""),"""")"
    Cell.Value = Cell.Value
    'to trace progress in Excel status bar
    Application.StatusBar = Cell.Address
Next Cell

Application.ScreenUpdating = True
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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