2017-08-18 18 views
0

Excelのスプレッドシートの各列のヘッダーの名前を付けようとしています。たとえば、列に "cat"というヘッダーがある場合は、その列の名前を "cat"にします。そうすれば、A:Aで列を指定するのではなく、式でcatを参照できます。テーブル内のすべての列の名前がexcel/vba

私はこれを1列でうまくやることができますが、私が多くの手順を実行しようとすると失敗します。ここに私のコードです。

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" 

私はことがしたいが、それはどちらか動作しません。誰かがアイデアを持っていますか?

+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 
関連する問題