【问题标题】:How make xlDown for selected 4 cells如何为选定的 4 个单元格制作 xlDown
【发布时间】:2022-12-09 21:29:47
【问题描述】:

我如何为选定的 4 个单元格(“F9:I9”)创建 xlDown - 从这 4 个单元格我想保留选择到最后一行数据(“F50:I50”)。

非常感谢

我希望选择从 F9 到 I50 的所有数据 - 但总是在我使用 xlDown 时只对一列进行选择。

【问题讨论】:

  • 您是否尝试过使用CurrentRegion
  • 快速提问。为什么不找到 Last Row 并获取范围而不是使用 xlDown?

标签: excel vba


【解决方案1】:

我刚刚发现使用宏记录器:我选择了单元格“F9”到“F11”并按下Ctrl+KeyDown,它给了我以下宏:

Range(Selection, Selection.End(xlDown)).Select

我刚刚通过 Range("F9:I9") 更改了原始选择,这就是我得到的:

Range(Range("F9:I9"), Range("F9:I9").End(xlDown)).Select

(甚至不需要选择整个范围,这只是一个例子。)

【讨论】:

  • 非常感谢,完美地工作......非常简单:)
  • 别客气。有关 VBA 的更多信息(特别是关于“选择”,这是许多初学者常犯的错误)可以在这里找到:stackoverflow.com/questions/10714251/…
【解决方案2】:

给定第一行时引用非空范围

  • 有很多方法可以做到这一点。我认为最可靠和最常用的方法是使用Find 方法来查找最后一个单元格即列中最底部的非空单元格。
  • 两种解决方案的作用相同。他们只是使用不同的论据。

解决方案 1

利用率

Sub RefRangeTest()

    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim frrg As Range: Set frrg = ws.Range("F9:I9")
    
    Dim rg As Range: Set rg = RefRange(frrg)
    
    If Not rg Is Nothing Then
        Debug.Print rg.Address(0, 0)
    Else
        Debug.Print "The area is empty."
    End If
    
End Sub

功能

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose:      References the range from a given single-row range
'               to the bottom-most non-empty cell of the given row's columns.
' Remarks:      It will fail if the worksheet is filtered.
'               It will not fail if rows or columns are hidden.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function RefRange( _
    ByVal FirstRowRange As Range) _
As Range
    With FirstRowRange.Rows(1)
        Dim cel As Range: Set cel = .Resize(.Worksheet.Rows.Count - .Row + 1) _
            .Find("*", , xlFormulas, , xlByRows, xlPrevious)
        If Not cel Is Nothing Then Set RefRange = .Resize(cel.Row - .Row + 1)
    End With
End Function

方案二

利用率

Sub RefRangeRefTest()

    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    
    Dim rg As Range: Set rg = RefRangeRef(ws, "F9:I9")
    
    If Not rg Is Nothing Then
        Debug.Print rg.Address(0, 0)
    Else
        Debug.Print "The area is empty."
    End If

End Sub

功能

Function RefRangeRef( _
    ByVal ws As Worksheet, _
    Optional ByVal FirstRowAddress As String = "A2") _
As Range
    With ws.Range(FirstRowAddress).Rows(1)
        Dim cel As Range: Set cel = .Resize(ws.Rows.Count - .Row + 1) _
            .Find("*", , xlFormulas, , xlByRows, xlPrevious)
        If Not cel Is Nothing Then Set RefRangeRef = .Resize(cel.Row - .Row + 1)
    End With
End Function

【讨论】:

    【解决方案3】:

    谢谢大家,我已经检查了所有方法只是为了了解更多关于 VBA 的信息,干得好:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多