2016-12-05 2110 views
4

[最新發現]我發現value(11)實際上有時可以複製公式,但並非總是如此。公式如sumproductsumif不能被複制,但可以複製簡單的算術運算。這太奇怪了!我仍然無法弄清楚爲什麼。VBA如何快速複製單元格的公式和格式?

我知道,如果我想只複製值,最快的方式是

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

如果我要複製格式和值,最快的方式是

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

如果我想複製公式,最快的方法是

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

如果我想複製公式和格式? (我在該單元格中有很多格式,例如條件格式,粗體,下劃線,對齊方式,數字顯示格式,邊框樣式等,因此不一定每次傳輸一種樣式。)

+0

複製粘貼沒有太大的錯誤,如果你可以批量執行,而不是逐個單元格 – CallumDA

回答

0

我剛剛發現了一個簡單的答案。

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

由於value(11)複製一些複雜的公式(我不知道爲什麼,應該是在Excel中的錯誤)失敗時,我加入了第二條線再次粘貼公式。這應該確保所有公式都被正確複製。

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)!)。