根据 vba 中的最后一列动态调整范围

Dynamically adjust range based on last column in vba

我在 excel 中有一个 table,我要在其中插入一些列,因为最后一列正在更改,我必须检测最后一列并将其设置为 vba

我已经编写了代码来查找最后一列并将其转换为字母表,但是我无法将其设置为一个范围。

Public Function ColumnLetter(ColumnNumber As Long) As String
ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False), "$")(0)
End Function

Dim Rng As Range
Dim LastColumn, LastRow As Long
Dim Str As String

LastRow = Cells(Rows.Count, 2).End(xlUp).Row
LastColumn = Cells(2, Columns.Count).End(xlToLeft).Column
Str = ColumnLetter(LastColumn)
'Set Rng = Range("M7:M" & LastRow)

我想将注释行写成

Set Rng = Range( & Str & "7" & LastRow)

使其动态化 我该怎么做?

首先,将Str改成别的;你正在隐藏 Str 函数。

Dim colLetter As String
colLetter = ColumnLetter(LastColumn)

然后根据需要连接:

Set Rng = Range(colLetter & "7:" & colLetter & LastRow)

请注意,您可以跳过使用列字母,只需使用带有列索引的 Cells

Set Rng = Range(Cells(7, LastColumn), Cells(LastRow, LastColumn))

正如其他人所指出的,Str 并不是最好的变量名。假设您将其更改为“ColLtr”...那么您的具体答案是 Range(ColLtr & "7:" & ColLtr & LastRow)

但是,我可以建议另一种方法吗?

如果您尝试将范围设置为已使用范围的右下角,请使用:

With {sheet}.UsedRange
Set Rng = .Cells(.Rows.Count,.Columns.Count)
End With

(将 {sheet} 替换为 WorkSheets("MySheet")ActiveSheet 或者您更喜欢指定作品 sheet。)

如果需要整列,调整为:

With {sheet}.UsedRange
Set Rng = .Columns(.Columns.Count)
End With

但是...如果您“将范围格式化为 Table”(创建一个 ListObject),您可以完全绕过 VBA 并在 [=32] 中使用 [TableName[ColumnHeader]] =] 或您的工作sheet 公式。当然,“TableName”和“ColumnHeader”将特定于您的 table 的名称和列 header.

中的实际文本