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