将公式复制到一系列单元格并将其转换为值

时间:2014-01-07 10:35:28

标签: excel-vba vba excel

我正在尝试从D1复制公式并将其粘贴到最后一行(26446)值可能会增加

Dim lrow As Double
lrow = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row

   Range("D2").Copy Destination:=Range("D2:D" & lrow)
   Range("D2" & "lrow").Copy   'THIS LINE SHOWS 1004 error
   Range("D2:D" & "lrow").PasteSpecial Paste:=xlPasteValues

如何解决这个问题

2 个答案:

答案 0 :(得分:3)

引号内的任何内容都将被视为字符串,因此“lrow”被视为String而不是变量。

应该是

Range("D" & lrow).Copy

或您尝试复制的任何范围。我想,你正在尝试

Range("D2:D" & lrow).Copy

的另一个简单替代方案
Range("D2:D" & "lrow").Copy  
Range("D2:D" & "lrow").PasteSpecial Paste:=xlPasteValues

Range("D2:D" & lrow).Value = Range("D2:D" & lrow).Value

答案 1 :(得分:3)

您已经有两个很好的答案,因此这不是答案,而是对您的代码的增强。

  1. 您无需将行变量声明为DoubleLong已经足够了。您可能需要阅读数据类型HERE

  2. 您的代码可以简化为

  3. <强>代码

    BTW,您的问题是D1,但您的代码正在考虑D2。所以我要去D2。如果是D1,请将D2替换为D1以下。

    Sub Sample()
        Dim lrow As Long
    
        With Sheets("Sheet2")
            lrow = .Range("A" & .Rows.Count).End(xlUp).Row
    
            .Range("D2:D" & lrow).Formula = .Range("D2").Formula
            .Range("E2:E" & lrow).Formula = .Range("E2").Formula
            .Range("F2:F" & lrow).Formula = .Range("F2").Formula
            .Range("G2:G" & lrow).Formula = .Range("G2").Formula
    
            .Range("D2:G" & lrow).Value = .Range("D2:G" & lrow).Value
        End With
    End Sub