VBA如何快速复制公式和格式化单元格?

时间:2016-12-05 10:34:21

标签: excel vba excel-vba

[最新发现]我发现value(11)有时可以实际复制公式,但并非总是如此。无法复制sumproductsumif等公式,但可以复制简单的算术运算。这太奇怪了!我仍然无法弄清楚为什么。

我知道如果我只想复制值,最快的方法是

Range("A1").Value = Range("A2").Value

如果我想复制格式和值,最快的方法是

Range("A1").Value(11) = Range("A2").Value(11)

如果我想复制公式,最快的方法是

Range("A1").Formula = Range("A2").Formula

如果我想复制公式和格式怎么办? (我在该单元格中有许多格式,如条件格式,粗体,下划线,对齐,数字显示格式,边框样式等,因此一次传输一个样式是不切实际的。)

3 个答案:

答案 0 :(得分:2)

像这样的子如何:

Sub copyFormattingAndFormulas(source As Range, target As Range)

    Dim sourceCell, targetCell As Range
    Dim i, j, lastRow, lastColumn As Integer
    lastRow = source.rows.count + source.row - 1
    lastColumn = source.columns.count + source.Column - 1
    For i = source.row To lastRow
        For j = source.Column To lastColumn
            Set sourceCell = Cells(source.row + i - 1, source.Column + j - 1)
            Set targetCell = Cells(target.row + i - 1, target.Column + j - 1)
            targetCell.value(11) = sourceCell.value(11)
            targetCell = sourceCell.Formula
        Next
    Next

End Sub

它所做的就是在一个循环中对指定范围执行问题中显示的内容(很好地了解.value(11)!)。

答案 1 :(得分:1)

要复制格式在源代码范围内的公式并保持公式相对(例如,像使用Ctr-C和Ctr-V一样),请使用以下复制和粘贴方法:

Range("A1").Copy Range("A2")

答案 2 :(得分:0)

我刚刚找到了一个简单的答案。

Range("A1").Value(11) = Range("A2").Value(11)
Range("A1").Formula = Range("A2").Formula

由于value(11)在复制一些复杂的公式时失败(我不知道为什么,应该是Excel中的错误),我添加了第二行来重新粘贴公式。这应确保正确复制所有公式。