2017-09-05 52 views
0

我想创建一个宏来复制其中有公式的范围(C2:C22)并将它粘贴到列范围(D2:D22)上作为值。我的问题是每6个单元我有一个公式,我不希望宏覆盖它。 我一直在尝试这个宏,但它不复制公式,只有值,我需要粘贴在值,而不是公式。将IF值粘贴到目标中

谢谢!

Sub example() 
    Dim source As Range 
    Dim target As Range 
    Set source = ActiveSheet.Range("c2:c22") 
    Set target = ActiveSheet.Range("d2:d22") 
    copy_formulas source:=source, target:=target 

End Sub 

Public Sub copy_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 
+0

你的问题说: “我一直在试图与这个宏,但它不会复制公式,只值,我需要粘贴值,而不是在公式上。“ 这听起来像是在做你需要的东西。你能澄清吗? –

+0

@ChrisMoore OP正试图在不覆盖现有公式的情况下复制值 –

回答

2

更改你的循环里面:

Set c = target(RowIndex:=i, ColumnIndex:=j) 
If Left(c.Formula, 1) <> "=" Then 
    c.Value = source(RowIndex:=i, ColumnIndex:=j).Value 
End If 

您当前的代码检测是否有在单元格的公式,但你的问题意味着你应该为被测试公式在目标单元格中。

+0

使错误代码看起来错误101:'c'是一个糟糕的标识符 - 如果'c'被命名为'targetCell',则不会发生此错误...假设'Set targetCell = source(...)'看起来不够好 –

+0

非常感谢。我真的被卡住了!你解决我的问题:) – Diego

0

这个循环可能更有效:

Dim rSource As Range 
Dim rTarget As Range 
Set rSource = Worksheets("Sheet1").Range("C2:C22") 
Set rTarget = Worksheets("Sheet1").Range("D2:D22") 
For Item = 1 To rSource.Count 
    If Not rTarget.Cells(Item).HasFormula Then 
     rTarget.Cells(Item).Value = rSource.Cells(Item).Value 
    End If 
Next Item 
+0

谢谢托尼,我真的很感激它:) – Diego

+0

我该如何添加多个范围到这个循环?我尝试了下面,但它只复制/粘贴第一个范围Z18:AA250 - AU18:AV250 Dim rSource As Range Dim rTarget As Range Set rSource = ActiveSheet.Range(“Z18:AA250,W18:X250,H18: H250,O18:O250“) 设置rTarget = ActiveSheet.Range(”AU18:AV250,AX18:AY250,AR18:AR250,AS18:AS250“) For Item = 1 To rSource.Count If rTarget.Cells(Item ).HasFormula Then rTarget.Cells(Item).Value = rSource.Cells(Item).Value End If Next Item – Diego