如何在VBA中的两个可变点之间创建范围?

时间:2018-09-18 09:41:07

标签: excel vba

我正在尝试编写使某些内容自动化的代码:我有一个数据表,需要在其中添加一列,然后放入一个总和,一直向下到数据的底行,而没有进一步。我知道如何将底行定义为变量;但是如果我要输入数据的列也可以变化怎么办?在我的示例中,我要进行求和的列始终在标题为“ 16”的列的左侧。它将始终从第2行开始,但不会始终是O列。例如,它可能是P列或Q列。

Sub enter_column_and_add_calculations()

    Dim NBottomrow

    Call find_bottom_row
    NBottomrow = ActiveCell.Row
'find column entitled '16':
    Range("A1").Select
    Cells.Find(What:="16", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,         
    MatchCase:=False _
        , SearchFormat:=False).Activate
'insert new column to the left:
    Selection.EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
'insert text in the cell:
    ActiveCell.FormulaR1C1 = "OOT Debt"
'offset one cell below:
    ActiveCell.Offset(1, 0).Range("A1").Select
'i'm now in the cell i want my range to start at. In this example it's cell O2, but it often varies:

    ActiveCell.FormulaR1C1 = "=SUM(RC[1]:RC[5])"
    Selection.AutoFill Destination:=Range("O2:O" & NBottomrow)

End Sub

Private Sub find_bottom_row()

    Range("A1").Select
    Selection.End(xlDown).Select

End Sub

非常感谢您的帮助:-)

1 个答案:

答案 0 :(得分:0)

尝试

Sub enter_column_and_add_calculations()

    dim m as variant, lr as long

    with worksheets("sheet1")

        m = application.match(16, .rows(1), 0)
        if iserror(m) then exit sub

        lr = .cells(.rows.count, m).end(xlup).row

        .cells(lr+1, m).formula = "=sum(" & .range(.cells(2, m), .cells(lr, m)).address(0,0) & ")"

    end with

end sub