Excel VBA:根据偏移值将动态范围复制到最后一行

时间:2019-02-25 16:52:26

标签: excel vba

我有一些需要帮助的问题。

在用户使用数据验证下拉菜单选择了有效月份(第3行)的情况下,我希望允许用户按下按钮 1)在确定“有效月份”的两行位置添加一个公式 2)将其复制到工作簿的最后一行 3)选择该行以删除公式,并仅替换为值。

我收到的第一个问题是1004消息。如果我输入基本公式,则该代码有效= 5 + 10,但不是这个

第二个问题。我在哪里有Range(“ Z5:Z”和Lastrow),我不明白如何根据用户选择“有效月份”的列值(例如AA,AB,AC等)进行选择。 >

代码在下面出现1004错误的位置。

Dim Lastrow As Long

Lastrow = Range("D" & Rows.Count).End(xlUp).Row
Cells.Find(What:="Active Month", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

ActiveCell.Offset(2).Select
Range("Z5:Z" & Lastrow).Formula = "=IF(ISNUMBER(VLOOKUP(F5,Dormant!A:A,1,0)),Z4,"")"

1 个答案:

答案 0 :(得分:1)

  

1)将公式添加到标识“有效月份”的两行位置

     

2)将其复制到工作簿的最后一行

     

3)选择该行以删除公式,并仅替换为值。

您得到Application Defined Error的原因是您没有在公式中加上双引号。在该公式中将""替换为"""",使其变为"=IF(ISNUMBER(VLOOKUP(F5,Dormant!A:A,1,0)),Z4,"""")"

这是您要尝试的吗? (未测试)。我已经注释了代码。如果您仍然有任何疑问,请问:)

Sub Sample()
    Dim ws As Worksheet
    Dim Lastrow As Long, StartRow As Long
    Dim aCell As Range
    Dim ColName As String, myformula As String

    '~~> Change formula here
    myformula = "=IF(ISNUMBER(VLOOKUP(F5,Dormant!A:A,1,0)),Z4,"""")"

    '~~> Set this to the relevant worksheet
    Set ws = Sheet1

    With ws
        '~~> Find the "Active Month"
        Set aCell = .Cells.Find(What:="Active Month", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

        '~~> If Found
        If Not aCell Is Nothing Then
            '~~> Get offset to where it was found
            StartRow = aCell.Row + 2

            '~~> Get the column name where it is found
            ColName = Split(.Cells(, aCell.Column).Address, "$")(1)

            '~~> Find last row in that column
            Lastrow = .Range(ColName & .Rows.Count).End(xlUp).Row

            '~~> Identify the range and insert formula and convert it to values
            With .Range(ColName & StartRow & ":" & ColName & Lastrow)
                .Formula = myformula
                .Value = .Value
            End With
        End If
    End With
End Sub