2017-08-18 85 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