2017-08-18 113 views
0

我想通過它們的標題來命名Excel電子表格中的每一列。例如,如果一列有標題「貓」,我希望該列被命名爲「貓」。這樣我可以在公式中引用貓,而不是用A:A指定列。名稱表中的每一列excel/vba

我可以做到這一點很好,只有一列,但當我嘗試做很多我的程序失敗。這是我的代碼。

Sub defineName() 

Dim numColumns As Long 
Range("A1").Select 
numColumns = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column 



Columns("A:A").Select 
For cat = 0 To numColumns 
    Selection.Offset(0, I).Select 
    ActiveWorkbook.Names.Add Name:=cat1, RefersToR1C1:="activesheet.cat1" 
Next cat 
End Sub 

Im相當肯定我的問題是這部分

Name:=cat1, RefersToR1C1:="activesheet.cat1" 

,並沒有像迭代我覺得是。

我真希望我能

Name:=[cat]1, RefersToR1C1:="activesheet.[cat]1" 

但這並不工作。有人有想法嗎?

+1

您可以直接從公式菜單,使用從選擇中創建,並且當然可以轉換爲VBA。 – SJR

+3

我不認爲這是你想做的。你可能會注意到這樣做的巨大性能。當您在公式中使用「A:A」時,Excel會查找最後一行(如果它不是數組公式),並且只考慮數據範圍的開始和結束,而不是全部1048576個單元格;當您命名範圍時,將使用該範圍內的每個單元格進行計算。現在你可以做的就是將你的數據集轉換成表格。然後你可以像'Table1 [[#All],[cat]]一樣引用它''這也會自動執行你所要求的,所以不需要VBA – Tom

+0

我正在建議出現在XL97中的自然語言公式......但它在XL07中又一次消失了。 @Tom表示,這是表中較差的兄弟姐妹。 https://bettersolutions.com/excel/named-ranges/natural-language-formulas.htm –

回答

1

看到我上面的建議,但這裏是替代代碼。雖然命名整個列似乎並不高效。看過湯姆的建議後,我認爲這是一個更好的方法。

Sub defineName() 

Dim numColumns As Long, cat As Long 

numColumns = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column 

For cat = 1 To numColumns 
    Columns(cat).Name = Cells(1, cat) 
Next cat 

End Sub