【问题标题】:Excel VBA Selection - Better CodeExcel VBA 选择 - 更好的代码
【发布时间】:2016-05-25 19:42:42
【问题描述】:

我只是想知道我下面的代码是否可以用更简单或更短的命令重写。我是新来的,感觉我做这件事的方式不是最好的。我要做的是选择 A 列中的所有连续数据。 谢谢。

Sub colA()

Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Cells(LastRow, 1).Select
Range(Selection, Selection.End(xlUp)).Select


End Sub

【问题讨论】:

    标签: vba excel range selection


    【解决方案1】:

    这是什么??

    Range(Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).End(xlUp)).Select
    

    即使那样我会避免这种情况,我会做类似的事情:

    With Range(Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).End(xlUp))
        .Something
        .Something_Else
    End with
    

    尽量只在绝对必要时使用 Select。

    即使这样,这也只会选择直到空白,如果你想要整个数据集,这会做到:

    Range("A1:A" & range("A" & Rows.Count).end(xlUp).Row)
    

    如果需要,您可以将其包装在 with 或 .select 中。

    【讨论】:

    • 我不知道您可以嵌套所有这些单元格语句。感谢您的帮助,非常感谢。我可以问一下为什么您提到仅在绝对必要时尝试使用 Select 吗?我想确保我了解该行为的严重性。谢谢。
    • 我完全同意过度使用.Select。我认为它的使用源于录制和修改宏——然后它似乎是做事的正常方式。将方法应用于范围而不是选择绝对是解决大多数问题的首选和更简洁的方法。
    • 屏幕更新和使用处理能力很慢。大多数事情都可以在不选择的情况下完成,例如Range("A1").select Selection.Font.Bold = True 可以写成range("A1").Font.Bold = true
    【解决方案2】:

    这并不能直接回答您的问题,但我想向您展示一个可能的替代方案。你使用了“连续”的作品,这对我来说意味着它们在一起——我有点不明白你的意思。如果您想要的只是 A 列中的填充单元格,您实际上可以通过使用范围的 SpecialCells 方法然后组合公式和常量来选择它——本质上是单元格的两种方式填充。

    Dim ws As Worksheet
    Dim r As Range
    
    Set ws = ActiveWorkbook.ActiveSheet
    Set r = Application.Union(ws.Range("A:A").SpecialCells(xlCellTypeFormulas), _
      ws.Range("A:A").SpecialCells(xlCellTypeConstants))
    
    r.Select
    

    也就是说,我赞同@DanDonoghue 的评论,即.Select 很少是要走的路。你在用这些细胞做什么?您是否将它们复制到剪贴板?

    r.Copy
    

    您在清除格式吗?

    r.ClearFormats
    

    这些是您通常会针对选择执行的操作,但这会产生开销,并且可能会产生您不想要或不需要的其他愚蠢的副作用。

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多