[英]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
來識別公式,而不是逐個單元地循環
有兩種選擇
Constant
單元格復制到目標 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.