Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为表格excel/vba中的每一列命名_Vba_Excel_Loops_Named - Fatal编程技术网

为表格excel/vba中的每一列命名

为表格excel/vba中的每一列命名,vba,excel,loops,named,Vba,Excel,Loops,Named,我试图通过标题来命名excel电子表格中的每一列。例如,如果一列的标题为“cat”,我希望该列命名为“cat”。这样我就可以在公式中引用cat,而不是用a:a指定列 我只需要一列就可以很好地做到这一点,但当我尝试用许多列来实现这一点时,我的过程失败了。这是我的密码 Sub defineName() Dim numColumns As Long Range("A1").Select numColumns = ActiveSheet.Cells(1, Columns.Count).End(xlTo

我试图通过标题来命名excel电子表格中的每一列。例如,如果一列的标题为“cat”,我希望该列命名为“cat”。这样我就可以在公式中引用cat,而不是用a:a指定列

我只需要一列就可以很好地做到这一点,但当我尝试用许多列来实现这一点时,我的过程失败了。这是我的密码

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
我很确定我的问题是这部分

 Name:=cat1, RefersToR1C1:="activesheet.cat1"
它不像我想的那样迭代

我几乎希望我能

 Name:=[cat]1, RefersToR1C1:="activesheet.[cat]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

您可以直接从“公式”菜单使用“从选择创建”,当然也可以转换为VBA。我认为这不是您想要做的。您可能会注意到这样做会带来巨大的性能冲击。在公式中使用
A:A
时,Excel会查找最后一行(如果它不是数组公式),并且只考虑数据范围的开始到结束,而不是所有1048576单元格;命名范围时,它将使用该范围内的每个单元格进行计算。现在可以做的是将数据集转换为表。然后,您可以像
Table1[[#All],[cat]]
那样引用它,这也会自动满足您的要求,因此不需要VBAI就可以建议XL97中出现的自然语言公式。。。。但它在XL07中再次消失。这是@Tom建议的一个更穷的表兄弟。我不知道这个功能。谢谢你@tom