2015-06-22 68 views
0

想象一下每行中有一些行和一些內容(即每行不同的列長度)的Excel工作表。Excel-VBA:在行中創建命名範圍,直到單元格內容結束

在Excel-VBA中:如何在列X中創建一個從行 - 單元格2到此X列的內容末尾的範圍-X?

即我想創建一個命名範圍每列,每個範圍應從第2行開始,直到每個列長的結尾!

感謝您的任何幫助!

+0

你想創建它們設置爲這些範圍VBA範圍變量或做你想做的,在VBA,創建工作簿(或工作表)名稱的範圍是多少?如果後者 - 這種事情很容易做到,儘管你可能遇到一個尷尬的事實,即不是每個列標題都是有效的名稱(如果你試圖使用「C」和「R」,某些奇怪的原因會被拒絕他們的界面,VBA *可能能夠覆蓋這個,儘管如此可能會有細微的副作用) –

回答

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 
+0

名稱中的減號打敗Excel的解析 –

+0

@JohnColeman你是絕對正確的,我只是改變它以匹配Q格式(沒有想到)。固定。 – Raystafarian

1

這裏是另一個答案(由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 
相關問題