2017-08-18 2 views
0

Ich versuche, jede Spalte in einer Excel-Tabelle durch ihre Kopfzeile zu benennen. Zum Beispiel, wenn eine Spalte die Überschrift "Katze" hat, möchte ich, dass die Spalte "Katze" genannt wird. Auf diese Weise kann ich in einer Formel auf cat verweisen, anstatt die Spalte mit A: A anzugeben.Name jeder Spalte in einer Tabelle excel/vba

Ich kann das ganz gut mit einer einzigen Spalte, aber wenn ich versuche, es mit vielen meiner Prozedur schlägt fehl. Hier ist mein Code.

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 ziemlich sicher, dass mein Problem ist, dieser Teil

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

und es iteriert nicht, wie ich denke, es ist.

Ich wünschte fast, ich könnte

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

aber das funktioniert auch nicht. Hat jemand eine Idee?

+1

Sie können dies direkt aus dem Formelmenü mit Create from Selection tun und natürlich in VBA konvertiert werden. – SJR

+3

Ich glaube nicht, dass dies genau das ist, was Sie tun möchten. Sie werden wahrscheinlich einen enormen Leistungseinbruch bemerken. Wenn Sie 'A: A' in Formeln verwenden, findet Excel die letzte Zeile (wenn es sich nicht um eine Matrixformel handelt) und berücksichtigt nur den Anfang bis zum Ende Ihres Datenbereichs nicht alle 1048576-Zellen. Wenn Sie den Bereich benennen, wird er mit jeder Zelle in diesem Bereich berechnet. Jetzt können Sie Ihren Datensatz in eine Tabelle konvertieren. Sie können dann wie 'Table1 [[# All], [cat]] darauf verweisen.' Dies wird auch automatisch tun, was Sie fragen, also keine Notwendigkeit für VBA – Tom

+0

Ich würde vorschlagen, die natürliche Sprache Formel, die in XL97 erscheinen ... Es verschwand aber wieder in XL07. Es ist ein ärmerer Bruder der Tabellen, die @ Tom vorschlägt. https://bettersolutions.com/excel/named-ranges/natural-language-formulas.htm –

Antwort

1

Siehe meinen Vorschlag oben, aber hier ist alternative Code. Das Benennen der gesamten Spalte scheint jedoch nicht sehr effizient zu sein. Nachdem ich Toms Vorschlag gesehen habe, denke ich, dass das ein besserer Ansatz ist.

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 
Verwandte Themen