【问题标题】:How do I select the last cell in my active range?如何选择活动范围中的最后一个单元格?
【发布时间】:2019-10-14 16:18:30
【问题描述】:

我需要选择指定范围内的最后一个单元格。

我正在从数据库中提取数据。我成功地转到了正确的工作表,并找到并选择了可变数量的经理(从“经理人数”开始向下两行。现在我只需要选择活动单元格的最后一行并在下面运行我的 If 语句。

Windows("MCS Cumulative_Data.xls").Activate
Sheets("Sheet 12").Select
Range("A1").Select
Cells.Find(What:="Number of Managers", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(2, 0).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select

' 代码的一部分,但不重要。

ActiveCell.Offset(0, 1).Select
If ActiveCell.Value = "" Then
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"  
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "0"
Else
End If

我从其他问题中尝试了大约 15 种不同的 Dim 语句。他们似乎都在问我是谁,但不完全是。

【问题讨论】:

  • 这不清楚。 Now I just need to select the last line of the active cells and run my If statement below. 和 I've tried about 15 different Dim statements from other questions. They all seem like be close to asking what I am, but not exactly. 有什么关系你的问题是什么?
  • 你应该做的第一件事是学习如何avoid select。至于找到范围中的最后一行,它实际上取决于范围的性质。如果您的行有空白,并且在您想要的数据下方的行中没有其他数据,您可以使用Cells(Rows.Count,1).End(xlUp).Row(确保将所有范围对象显式绑定到工作表。
  • @CindyMeister after Range(ActiveCell, ActiveCell.End(xlDown)).Select 我现在选择了一个范围。我现在需要选择此突出显示范围中的最后一个单元格。如何选择(使我的活动单元格)范围内的最后一个单元格?
  • @Cj17digr - ActiveCell.End(xlDown).Select 将选择范围内的最后一个单元格,但请注意我的警告并立即学习不要使用选择。 (有 0.001% 的情况需要它,但这不是其中之一)。您会很高兴您这样做了,因为您将避免在代码中花费大量时间进行调试。
  • 感谢 Scott Holtzman!那行得通。以后我也会尽量避免选择。

标签: excel vba ms-access range cell


【解决方案1】:

“如何避免选择”的可能示例(以及其他一些小技巧)会将您的代码“折叠”为以下内容:

With Workbooks("MCS Cumulative_Data.xls").Sheets("Sheet 12")
    With .Cells.Find(What:="Number of Managers", After:=.Cells(1, 1), _
                     LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
                     SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Offset(2, 0).End(xlDown).Offset(0, 1)            
        If .Value = vbNullString Then .Resize(1, 13).Value = "0"                        
    End With
End With

【讨论】:

  • 所以,这是一个更大的代码的一部分。这部分代码我需要确保第一个和最后一个管理器(资产管理器)的收益集在那里。如果它们是空白的,我的其他代码不会抓住它们。我正在验证 4 列。 “经理人数”之后的 1 列 2 行。然后是那一串经理中的最后一位经理。然后在那个“最后一位经理”之后,将会有更多的 2 行。我验证了该经理的数据,然后验证了该行中的最后一个。不需要,经理自己填写的经理数据是第一组,第二组是我自己创建的自定义数据
  • 无论如何,您发布的整个代码都会减少到我发布的内容。只要您尝试并理解它,您就可以将它扩展到您需要的任何东西,可能通过阅读 Scott Holtzmann 建议您
  • 谢谢。我正在阅读 Scott 分享的链接。我正在努力理解。
  • 您的代码不起作用。它没有做我上面的代码所做的事情。抱歉,我试图将其用作理解避免选择示例的桥梁。
【解决方案2】:

这个怎么样:

    lastrow = Range(ActiveCell, ActiveCell.End(xlDown)).Cells.Count 'gets the last row from active cell
    NumRow = ActiveCell.Row 'gets the colum the active cell is in
    Cells(lastrow, NumRow).Select 'selects that cell

【讨论】:

    【解决方案3】:

    ActiveCell.End(xlDown).Select

    不选择所选组中的最后一个销售,但会抓取我需要的单元格。

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      相关资源
      最近更新 更多