想象一下每行中有一些行和一些内容(即每行不同的列长度)的Excel工作表。Excel-VBA:在行中创建命名范围,直到单元格内容结束
在Excel-VBA中:如何在列X中创建一个从行 - 单元格2到此X列的内容末尾的范围-X?
即我想创建一个命名范围每列,每个范围应从第2行开始,直到每个列长的结尾!
感谢您的任何帮助!
想象一下每行中有一些行和一些内容(即每行不同的列长度)的Excel工作表。Excel-VBA:在行中创建命名范围,直到单元格内容结束
在Excel-VBA中:如何在列X中创建一个从行 - 单元格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
名称中的减号打败Excel的解析 –
@JohnColeman你是绝对正确的,我只是改变它以匹配Q格式(没有想到)。固定。 – Raystafarian
这里是另一个答案(由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
至E尝试各种事情在列A(包括留下空白列)然后对其进行测试像这样:
Sub test()
NameColumn "A"
NameColumn "B"
NameColumn "C"
NameColumn "D", "Bob"
NameColumn "E"
End Sub
你想创建它们设置为这些范围VBA范围变量或做你想做的,在VBA,创建工作簿(或工作表)名称的范围是多少?如果后者 - 这种事情很容易做到,尽管你可能遇到一个尴尬的事实,即不是每个列标题都是有效的名称(如果你试图使用“C”和“R”,某些奇怪的原因会被拒绝他们的界面,VBA *可能能够覆盖这个,尽管如此可能会有细微的副作用) –