簡體   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