选择最后一行,范围,vba

时间:2016-06-09 19:42:51

标签: vba excel-vba reference range selection

我对vba很新,并且有一个相当简单的问题。有人可以帮忙:

我不想选择特定的单元格,而是希望我的vba宏转到感兴趣的列的底部,跳过,并且它下面的两个单元格执行以下操作:

    Range("W72").Select
    Selection.NumberFormat = "General"
    ActiveCell.FormulaR1C1 = "Null_value"
    Range("X72").Select
    Selection.NumberFormat = "General"
    ActiveCell.FormulaR1C1 = "=R[-2]C[1]-SUM(R[-2]C[-8]:R[-2]C[-6])"

如您所见,上面的代码指的是特定的单元格W72和X72。目前,这些列中的最后一个条目是在W70和X70中,但是下个月我的数据集会变大,因此W72和X72不是执行上述操作的正确位置。我如何纠正这个问题,使得我的vba代码自动转到W(n)的底部:X(n),跳过一行而在W(n + 2)中,X(n + 2)执行上面的代码

另外,我的上面的公式(ActiveCell.FormulaR1C1)也指特定的单元格,在我的案例中,Row 70左边有几列,但正如你可能知道的那样,由于行引用每个月都有变化,所以也有同样的问题。我需要让我的vba让公式获取这些列的最后一行,列是P,Q,R。

感谢您提供的任何帮助。

更新:我的同一个工作项目的一部分,如果有人也可以帮助我,我将不胜感激。谢谢你:

大家好,

我目前有一个变量的输入框,每个月都会变化:

r_mo = Application.InputBox(prompt:=“将报告月份输入为YYYYMM(例如:201604)。此条目中的错误将导致结果出错。”)

这会提示输入框,必须手动输入...但是,我想自动执行此过程并消除对输入框的需要。在vba中是不是现在会自动生成今天的日期。

从现在或系统功能开始,我想要的是以四位数字提取年份,以两位数提取月份。

所以,例如,如果我们在2016年的decemeber

Sub asasdas()

“现在功能”   r_mo = YYYYMM'自动从“现在的功能”

更新

End Sub

感谢您给予我的任何帮助,非常感谢您。

3 个答案:

答案 0 :(得分:1)

您可以使用以下代码在VBA中获取给定列的最后一行(在我的示例中为W):

Dim ws As Worksheet : Set ws = ThisWorkbook.Worksheets("MySheetNameHere")    
lastRow = ws.Cells(ws.Rows.Count, "W").End(xlUp).Row

当然,如果你再添加2到lastRow,你就拥有了你正在寻找的单元格。

答案 1 :(得分:0)

我喜欢

Sub asdf()

    Range("w1048576").End(xlUp).Offset(2, 0).Select 'gets the last row
    With Selection
        .NumberFormat = "General"
        .FormulaR1C1 = "Null_value"
    End With

    ActiveCell.Offset(, 1).Select

    With Selection
        .NumberFormat = "General"
        .FormulaR1C1 = "=R[-2]C[1]-SUM(R[-2]C[-8]:R[-2]C[-6])"
    End With

End Sub

答案 2 :(得分:0)

如果你想要一个更详细的答案,你将不得不提出一个新的问题但是对于你的第二个问题,试试这个。

Sub Now()
    Dim myDate As String
    myDate = Date
    myDate = Format(myDate, "yyyymm")
    Debug.Print myDate '201606 output for June 10th 2016
End Sub