Excel-VBA:在行中创建命名范围,直到单元格内容结束

Excel-VBA: create named Range in row until end of cell content

想象一个 Excel sheet 有一些行,每行有一些内容(即每行的列长不同)。

在 Excel-VBA 中:如何在 column-X 中创建一个从 row-cell-2 到此 X 列内容末尾的范围 X? ?

即我想为每列创建一个命名范围,每个范围应从第 2 行开始,直到每个列长度结束!

感谢您对此的任何帮助!

当然,您可以使用此代码段找到列中最后一个填充的单元格,并使用该行号设置您的 range.name - 只需将 "A" 替换为您想要的任何列。

Sub test()
Dim lastrow As Integer
 lastrow = Cells(Rows.Count, "A").End(xlUp).Row
 Range("A2:A" & lastrow).Name = "RangeColA"
End Sub

如果你想为每一列都这样做,你可以尝试这样的事情 -

Sub test()
Dim lastrow As Integer
Dim letter As String
Dim lastcol As Integer
lastcol = Cells(1, Columns.Count).End(xlToLeft).Column


For i = 65 To 65 + lastcol
 letter = Chr(i)
 lastrow = Cells(Rows.Count, letter).End(xlUp).Row
 Range(Cells(2, letter), Cells(lastrow, letter)).Name = "RangeCol" & letter
Next

End Sub

这是另一个答案(灵感来自 Raystafarian 的答案),它处理列中最后使用的单元格出现在第二行或第二行上方的情况,并且还提供了更大的名称灵活性:

Sub NameColumn(Col As String, Optional ColName As Variant)
    Dim n As Long
    Dim myName As String
    If IsMissing(ColName) Then ColName = "Range_" & Col
    n = Cells(Rows.Count, Col).End(xlUp).Row
    If n <= 2 Then
        Range(Col & "2").Name = ColName
    Else
        Range(Col & "2:" & Col & n).Name = ColName
    End If
End Sub

在 A 列到 E 列中尝试各种操作(包括留空列),然后像这样进行测试:

Sub test()
    NameColumn "A"
    NameColumn "B"
    NameColumn "C"
    NameColumn "D", "Bob"
    NameColumn "E"
End Sub