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

时间:2018-09-02 08:56:14

标签: excel vba

我有一个非常简单的问题,不幸的是我无法解决。因此,将感谢您的帮助。这是东西: 我应该从范围中获取最后一列作为范围。例如,如果我有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),据我所知最后一列,但没有成功。

真的很高兴为您提供帮助!

4 个答案:

答案 0 :(得分:0)

要查找第1行的最后一列

Dim LastCol As Long

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

答案 1 :(得分: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

更多信息:

答案 2 :(得分: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”)”)以获取最后一列

答案 3 :(得分:0)

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

如果您想要最后一列的编号,则     myRange.Columns(myRange.Columns.Count).Column