【问题标题】:Excel VBA: More efficient way to compare values with formulas for large rangeExcel VBA:将值与大范围公式进行比较的更有效方法
【发布时间】:2015-02-13 06:06:30
【问题描述】:

我有一个大表,其值在 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 显示错误,提示系统资源不足。

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

这可能吗?我不知道如何实现这一点:(

提前谢谢你!

【问题讨论】:

  • 你知道你正在输入公式来范围 [11050 列 x 2200 行] = 24.310.000 个单元格。我有一台非常好的机器和问题也这样做。你确定你的逻辑没问题?
  • 我只知道如何实现我需要的唯一一种解决方案 - 使用公式。这就是为什么我要求另一种解决方案来达到相同的结果。

标签: vba excel


【解决方案1】:

为您提供的快速解决方案并不复杂,我对此并不感到自豪(但它是最快的准备)。请记住,您将运行它 24m 次,这可能需要几分钟,也许一个小时。代码里面的一些cmets。

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

【讨论】:

  • 它不会崩溃并且会按照预期进行并且不会花费太长时间来计算所有值,这对我来说是一个很好的解决方案!非常感谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
相关资源
最近更新 更多