【问题标题】:Copy Cells Greater than Zero, and Paste Values in same Cell复制大于零的单元格,并将值粘贴到同一单元格中
【发布时间】:2019-06-06 16:03:25
【问题描述】:

我有一张表格,里面填满了与另一张表格相关联的公式。这些公式根据列顶部的日期是否与单个单元格中的日期(周结束日期)相匹配,从另一个表中获取数据。我希望能够仅自动复制值大于 0 的单元格,然后将它们作为值粘贴回同一个单元格中。我使用以下公式来尝试完成此操作,但它并没有完全达到我想要的效果。温柔点,我充其量是个新手。

Sub CopyC()
Dim SrchRng As Range, cel As Range
Set SrchRng = Range("Table4")
For Each cel In SrchRng
    If cel.Value > 0 Then
        cel.Copy
    cel.PasteSpecial xlPasteValues
    End If
Next cel
End Sub

预期输出:仅复制表格中大于 0 的单元格并粘贴为值。

目标:在空白单元格中保留公式

上面的结果:逐个单元格的进度非常缓慢,并复制并粘贴到所有单元格中,包括空白和 0 值,直到它停止

【问题讨论】:

  • 我用一个包含 2k 个公式的测试文件和一个简单的 K1*L1 公式运行了这个,它运行得很快,完全按照你的意愿去做。也许您可以发布数据和公式的示例? Table4 有多少行?
  • cel.Value > 0 也会检查字符串,这些字符串...嗯,大于 0。
  • @mooseman,如果它不是专有的,我肯定会分享我正在使用的表。 FAB 的建议虽然效果很好。感谢您的意见

标签: excel vba


【解决方案1】:

试试这个:

Sub CopyC()
Dim SrchRng As Range, cel As Range
Set SrchRng = Range("Table4")
For Each cel In SrchRng
    If IsNumeric(cel.Value) And cel.Value > 0 Then
        cel.Value = cel.Value
    End If
Next cel
End Sub

编辑:添加一个使用数组循环数据的替代方案,这应该会快一点:

Sub CopyC()

Dim SrchRng As Range: Set SrchRng = Range("Table4")
Dim arrSearch As Variant: arrSearch = SrchRng

Dim fRow As Long: fRow = SrchRng.Cells(1, 1).Row - 1
Dim fCol As Long: fCol = SrchRng.Cells(1, 1).Column - 1
Dim R As Long, C As Long

For R = LBound(arrSearch) To UBound(arrSearch)
    For C = LBound(arrSearch, 2) To UBound(arrSearch, 2)
        If IsNumeric(arrSearch(R, C)) And arrSearch(R, C) > 0 Then Cells(R + fRow, C + fCol).Value = arrSearch(R, C)
    Next C
Next R
End Sub

【讨论】:

  • 这工作完美@FAB!感觉就像我从墙上敲了我的头。很高兴我寻求帮助。谢谢!
  • 我使用数组选项仅供参考
猜你喜欢
  • 2017-01-09
  • 2017-10-26
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多