VBA复制值范围不破坏公式

时间:2015-08-20 09:28:30

标签: excel vba

假设一张纸上的每5行我有一个公式SUM,总计上面5行。所以在A6我有=SUM(A1:A5)A12 =SUM(A7:A11)我有A1:A1000等等向下移动。 是否可以将Excel VBA中的大范围值复制到范围{{1}}而不会破坏我的公式?

换句话说。无论目的地在哪里都是值,都要覆盖它。如果是公式,请留下它。

保护配方奶粉是正确的方向,为我的问题寻找解决方案吗?

更新 我想将列E(仅包含值)复制到列A(包含黄色单元格中的公式和白色单元格中的值)。我想将这些值复制到白色细胞中,使黄色细胞保持平静(不破坏公式)。

enter image description here

4 个答案:

答案 0 :(得分:1)

在对它进行求和之前,只测试指定的单元格是否包含公式。

For i = 1 To 100
    If Cells(i, 1).HasFormula Then

    Else
        Count = Count + Cells(i, 1)
    End If

Next

答案 1 :(得分:1)

根据我的知识,无法通过简单的复制粘贴或公式来完成。

尝试使用宏来解决此问题。以下宏可根据您的要求完美运行。如果源列和目标列名分别不是“A”和“E”,则需要更新它们。

Dim source As Range
Dim target As Range
Dim lastRow As Integer
Sub updateValuesNotFormulas()

    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    Set source = Range("A1:A" & lastRow)

    lastRow = Range("E" & Rows.Count).End(xlUp).Row
    Set target = Range("E1:E" & lastRow)

    For Each srcCell In source
        If srcCell.HasFormula Then
            'Do Nothing
        Else
            targetRow = srcCell.Row
            targetColumn = target.Column
            srcCell.Value = Cells(targetRow, targetColumn).Value
        End If
    Next

End Sub

答案 2 :(得分:1)

如果您不需要保留E列中的所有值,则可以使用以下代码批量复制

'Clear source rows corresponding to column A formulas 
Range("A:A").SpecialCells(xlCellTypeFormulas).Offset(0, 4).Clear
Range("E:E").Copy
'Paste special with Skip blanks 
Range("A1").PasteSpecial SkipBlanks:=True

答案 3 :(得分:0)

只要在同一行中的A列和E列中的总单元格对齐,此提议的解决方案就可以提供您想要的结果。即A6和E6,A17和E17,A33和E33等。知道我正在回复一个旧帖子,但您不知道谁会在寻找类似的解决方案,干杯。

Sub valueAssignment()
'Copy E range to A range, without overwriting formulas
Dim Col As Long
Dim Row As Long
    For Row = 1 To 1000
        If Cells(Row, 1).HasFormula = False Then
            Cells(Row, 1).Value = Cells(Row, 5).Value
        End If
    Next Row
End Sub