VBA,如何在给定范围内获得最后一列作为范围?

问题描述 投票:0回答:4

我有一个非常简单的问题,遗憾的是我无法解决。感谢您的帮助。事情就是这样:我应该从范围中获取最后一列作为范围。例如,如果我有A26:D32,我应该得到D26:D32作为结果并输入循环。

这是我到目前为止的代码:

Function getSmth(CustomCol As Range)
    Dim i As Double
        For Each cell In CustomCol  'start of the loop. CustomCol here should return D26:D32 already
            If cell.Value > i Then
                i = cell.Value
            End If
        Next
....

End Function

我试图做的是编写CustomCol.Columns(6),因为我知道最后一列,但它没有成功。

真的很高兴你的帮助!

excel vba
4个回答
0
投票

你可以试试这个:

Function GetLasRangeCol(rng As Range) As Range
    Set GetLasRangeCol = rng.Columns(rng.Columns.Count).Cells
End Function

您可以在调用代码中使用:

For Each cell In GetLasRangeCol(myRange)

其中'myRange'是一个有效的范围引用,即:Range类型的变量或某个Range对象(如'Range(“A5:B21”)'),以获取最后一列


0
投票

要查找第1行中的最后一列:

Dim LastCol As Long

LastCol = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column

0
投票

可能有一个较短的方法,但这样做的诀窍:

Function lastColumn(rg As Range) As Range
    Set lastColumn = Range(Cells(Range(Split(rg.Address(0, 0), ":")(0)).Row, _
        Range(Split(rg.Address(0, 0), ":")(1)).Column).Address(0, 0) _
        & ":" & Split(rg.Address(0, 0), ":")(1))
End Function

它将Range对象作为参数并返回Range对象。

用法示例:

Sub demo()
    Dim rg As Range, rg2 As Range
    Set rg = Range("A26:D32")
    Set rg2 = lastColumn(rg)
    Debug.Print "The last column is: " & rg2.Address
End Sub

...返回:The last column is: $D$26:$D$32

可能有一个“更整洁”的方法(也许使用INTERSECT),但这样可以正常工作。


说明:

这与上面的功能相同,但细分了以便更容易理解:

Function lastColumn(rg As Range) As Range

    Dim firstRow, lastRow, firstCol, lastCol, leftPart, rightPart

    leftPart = Split(rg.Address(0, 0), ":")(0)
    rightPart = Split(rg.Address(0, 0), ":")(1)
    firstRow = Range(leftPart).Row
    firstCol = Range(leftPart).Column
    lastCol = Range(rightPart).Column

    Set lastColumn = Range(Cells(firstRow, lastCol), Range(rightPart))

End Function

更多信息:


0
投票

如果您希望将最后一列作为范围,则myRange.Columns(myRange.Columns.Count)

如果你想要最后一列的编号,那么myRange.Columns(myRange.Columns.Count).Column

© www.soinside.com 2019 - 2024. All rights reserved.