繁体   English   中英

Excel VBA复制/粘贴宏:使用公式忽略单元格

[英]Excel VBA Copy / Paste macro: Ignore cells with Formulas

我在excel中创建了一个工具,该工具可以使用两个电子表格,并在工作表本身进行更新时将内容从一个电子表格复制到另一个电子表格。

该工具纯粹是设计为复制/粘贴工具,当前代码将在工作表之间复制和粘贴值。

我必须在工具中包含逻辑以跳过带有公式的单元格,如果该工具将当前在源工作表中的公式复制并粘贴到目标工作表中,它们将不再匹配并引发#REF错误。 关于如何在此处放置for循环的任何建议或类似的建议,以允许它使用公式检查和忽略单元格? 我只需要复制/粘贴带有数字或值的单元格。

Sub CopyWorkbook()
Dim wb1 As Workbook, wb2 As Workbook

wb1.Sheets("Capex").Range("H1124:AT1173").Copy
wb2.Sheets("Capex").Range("H529:AT578").PasteSpecial Paste:=xlPasteAll
wb1.Sheets("Capex").Range("H1275:AT1284").Copy
wb2.Sheets("Capex").Range("H580:AT589").PasteSpecial Paste:=xlPasteAll

如果您确实想跳过包含公式的单元格,则可以将此示例作为开始。 该代码假定只有公式以等号开头。 编辑:使用问题中的范围扩展示例。

Sub example()
    Dim source As Range
    Dim target As Range
    Set source = ActiveSheet.Range("A1:B6")
    Set target = ActiveSheet.Range("D1:E6")
    copy_non_formulas source:=source, target:=target

    'Extended example using the ranges posted in the question
    'For the sake of formatting, I omitted the fully qualified
    'range names.
    copy_non_formulas source:=Range("H1124:AT1173"), target:=Range("H529:AT578")
    copy_non_formulas source:=Range("H1275:AT1284"), target:=Range("H580:AT589")       
End Sub


Public Sub copy_non_formulas(source As Range, target As Range)
    'Assumes that all formulas start with '=' and all non formulas do not
    Dim i As Long
    Dim j As Long
    Dim c As Range

    For i = 1 To source.Rows.Count
        For j = 1 To source.Columns.Count
            Set c = source(RowIndex:=i, ColumnIndex:=j)
            If Left(c.Formula, 1) <> "=" Then
                target(RowIndex:=i, ColumnIndex:=j).Value = c.Value
            End If
        Next j
    Next i
End Sub

您可以使用SpecialCells来识别公式,而不是逐个单元地循环

有两种选择

  1. 仅将Constant单元格复制到目标
  2. 从目标位置删除所有Formula单元格

如果您的公式出现在单个连续的块中,则(1)容易工作,否则将导致需要复制多个区域。 所以(2)是可取的

您的第一个范围可以被覆盖。

Dim rng1 As Range
Set rng1 = Range("H1124:AT1173")
rng1.Copy [h1275]

On Error Resume Next
[h1275].Resize(rng1.Rows.Count, rng1.Columns.Count).SpecialCells(xlFormulas) = vbNullString
On Error GoTo 0

您不能Paste:=xlPasteValues所有单元格使用Paste:=xlPasteValues吗? 这样,任何公式都不会复制到目标工作表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM