【问题标题】:Selecting last row, range, vba选择最后一行,范围,vba
【发布时间】:2016-10-10 15:09:39
【问题描述】:

我对 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) 也引用了特定的单元格,在我的例子中,第 70 行左侧几列,但正如您可能所说,这也有同样的问题,因为行引用每个月都会发生变化.我需要让我的 vba 让公式获取这些列的最后一行,这些列是 P、Q、R。

感谢您提供的任何帮助。

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

大家好,

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

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

这会提示一个必须手动输入的输入框...但是,我想自动化此过程并消除对输入框的需要。 vba 中没有 now 函数会自动生成今天的日期。

从现在或系统函数开始,我想要做的就是提取四位数的年份和两位数的月份。

例如,如果我们在 2016 年 12 月

子 asasdas ()

“现在功能” r_mo = YYYYMM ' 自动从“现在函数”更新

结束子

感谢您能给我的任何帮助,非常感谢大家。

【问题讨论】:

  • 戴夫在下面给了你一个很好的答案。但是,还有一个提示,它将使您在 VBA 中处于有利地位:几乎从不需要使用代码选择单元格。而不是执行“Range(...).Select”,然后执行“Selection.NumberFormat=...” - 您可以简单地说“Range(...).NumberFormat=...”。您将通过查看宏记录器的输出来学习如何使用“选择”。每个人都是这样学习的:) 但是他们学习的下一件事是,当您自己编写代码时,您可以直接在单元格上执行相关操作而无需选择。祝你好运!

标签: vba excel reference range selection


【解决方案1】:

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

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

当然,如果您随后将 2 添加到 lastRow,您就拥有了您要查找的单元格。

【讨论】:

    【解决方案2】:

    我会这样做

    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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-12
        • 2017-02-14
        • 2019-08-05
        • 2017-10-28
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多