【发布时间】:2022-12-09 21:29:47
【问题描述】:
我如何为选定的 4 个单元格(“F9:I9”)创建 xlDown - 从这 4 个单元格我想保留选择到最后一行数据(“F50:I50”)。
非常感谢
我希望选择从 F9 到 I50 的所有数据 - 但总是在我使用 xlDown 时只对一列进行选择。
【问题讨论】:
-
您是否尝试过使用
CurrentRegion? -
快速提问。为什么不找到 Last Row 并获取范围而不是使用 xlDown?
我如何为选定的 4 个单元格(“F9:I9”)创建 xlDown - 从这 4 个单元格我想保留选择到最后一行数据(“F50:I50”)。
非常感谢
我希望选择从 F9 到 I50 的所有数据 - 但总是在我使用 xlDown 时只对一列进行选择。
【问题讨论】:
CurrentRegion?
我刚刚发现使用宏记录器:我选择了单元格“F9”到“F11”并按下Ctrl+KeyDown,它给了我以下宏:
Range(Selection, Selection.End(xlDown)).Select
我刚刚通过 Range("F9:I9") 更改了原始选择,这就是我得到的:
Range(Range("F9:I9"), Range("F9:I9").End(xlDown)).Select
(甚至不需要选择整个范围,这只是一个例子。)
【讨论】:
Find 方法来查找最后一个单元格即列中最底部的非空单元格。利用率
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
【讨论】:
谢谢大家,我已经检查了所有方法只是为了了解更多关于 VBA 的信息,干得好:)
【讨论】: