我有一个非常简单的问题,遗憾的是我无法解决。感谢您的帮助。事情就是这样:我应该从范围中获取最后一列作为范围。例如,如果我有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),因为我知道最后一列,但它没有成功。
真的很高兴你的帮助!
你可以试试这个:
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”)'),以获取最后一列
要查找第1行中的最后一列:
Dim LastCol As Long
LastCol = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column
可能有一个较短的方法,但这样做的诀窍:
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
如果您希望将最后一列作为范围,则myRange.Columns(myRange.Columns.Count)
如果你想要最后一列的编号,那么myRange.Columns(myRange.Columns.Count).Column