Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vba: refersToR1C1 Namen erzeugen

Forumthread: Vba: refersToR1C1 Namen erzeugen

Vba: refersToR1C1 Namen erzeugen
01.10.2019 15:34:33
Christian
Grüßt euch,
Für meine Dropdownliste möchte ich per Vba einen Namen erstellen lassen.
Die Namen stehen im Tabellenblatt "Renditen" in Zeile A1. Die Überschriften erweitern sich regelmäßig, womit sich auch die Liste der Namen ständig vergrößert.
Nun habe ich mit dem Recorder den Code aufgenommen, für eine statische Namensliste von 5 Zellen funktioniert dieser auch.
Meine Frage nun, wie schreibe ich den dynamischen Zellbezug in den referToR1C1 Code.
Ich steig da noch nicht durch, als VBA Einsteiger.
Hier mein Code:
ActiveWorkbook.Names.Add name:="IndexNamen", RefersToR1C1:="=Renditen!R1C1:R1" & "C & letztespaltestart"
Besten Dank für eure Hilfe
Christian
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vba: refersToR1C1 Namen erzeugen
01.10.2019 15:48:32
Daniel
Hi
Bitte genau überlegen
Welche Teile in deinem Code sind fester Text, der genau so verwendet werden soll, wie er da steht, und welcher Teil ist deine Variable, deren Inhalt verwendet werden muss.
Der feste Text muss in Anführungszeichen, die Variable darf nicht in Anführungszeichen stehen.
Verkettet werden die Teile mit dem &, welches natürlich auch nicht innerhalb der Anführungszeichen stehen darf, sondern außerhalb stehen muss.
Gruß Daniel
Anzeige
AW: Vba: refersToR1C1 Namen erzeugen
01.10.2019 15:54:09
Christian
Hi Daniel,
danke wiedermals für deine Hilfe.
ich habe es etwas einfacher gelöst.
Renditen.Range(Renditen.Cells(1, 2), Renditen.Cells(1, letzteSpalteStart)).name = "IndexNamen"
Mit dem Code funktioniert es auch wunderbar.
Kannst du mir ggf. ganz kur erläutern, worin der Unterschied in der refersToR1C1 Methode und Range.Name liegt?
Für mich ist die Range.Name deutlich umgänglicher und verständlicher.
Vielen Dank Christian
Anzeige
AW: Vba: refersToR1C1 Namen erzeugen
01.10.2019 15:51:02
fcs
Hallo Christian,
    Dim letztespaltestart As Long
With ActiveWorkbook.Worksheets("Renditen")
letztespaltestart = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With
ActiveWorkbook.Names.Add Name:="IndexNamen", RefersToR1C1:="=Renditen!R1C1:R1C" &  _
letztespaltestart
LG
Franz
Anzeige
AW: Vba: refersToR1C1 Namen erzeugen
01.10.2019 15:56:01
Christian
Hallo Franz,
dank deiner und Daniels Hilfe habe ich nun die Syntax dahinter auch verstanden.
Besten Dank.
Ich habe es für mich einfacher "gelöst" mit folgendem Code
Renditen.Range(Renditen.Cells(1, 2), Renditen.Cells(1, letzteSpalteStart)).name = "IndexNamen"
Grüße Christian
Anzeige
gelöst, dann nicht mehr offen. o.w.T.
01.10.2019 16:03:39
Werner
Wenn du das Problem gelöst hast, warum setzt du
01.10.2019 16:03:47
Daniel
Die Frage dann noch auf offen?
;
Anzeige
Anzeige

Infobox / Tutorial

Vba: refersToR1C1 Namen in Excel erstellen


Schritt-für-Schritt-Anleitung

Um in Excel VBA einen dynamischen Namen mit RefersToR1C1 zu erstellen, kannst du folgenden Schritten folgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf VBAProject (deineArbeitsmappe), wähle Einfügen und dann Modul.

  3. Füge den folgenden Code ein:

    Sub ErstelleDynamischenNamen()
       Dim letztespaltestart As Long
       With ActiveWorkbook.Worksheets("Renditen")
           letztespaltestart = .Cells(1, .Columns.Count).End(xlToLeft).Column
       End With
       ActiveWorkbook.Names.Add Name:="IndexNamen", RefersToR1C1:="=Renditen!R1C1:R1C" & letztespaltestart
    End Sub
  4. Führe den Code aus: Drücke F5 oder wähle Run > Run Sub/UserForm, um den Code auszuführen.

Dieser Code erstellt einen dynamischen Namen, der sich automatisch an die Anzahl der Überschriften in deinem Arbeitsblatt "Renditen" anpasst.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 1004: Der Name ist ungültig.

    • Lösung: Stelle sicher, dass der Name, den du vergibst, keine Leerzeichen oder Sonderzeichen enthält.
  • Fehler: Referenzfehler in der Formel.

    • Lösung: Überprüfe, ob der Bezug in der RefersToR1C1-Formel korrekt ist und ob das Arbeitsblatt "Renditen" existiert.

Alternative Methoden

Falls du die RefersToR1C1-Methode als kompliziert empfindest, kannst du auch die Range.Name-Methode verwenden:

Renditen.Range(Renditen.Cells(1, 2), Renditen.Cells(1, letzteSpalteStart)).Name = "IndexNamen"

Diese Methode ist oft einfacher zu verstehen und anzuwenden, vor allem für Anfänger im VBA-Bereich.


Praktische Beispiele

Hier sind zwei Beispiele, die dir helfen, die Konzepte besser zu verstehen:

  1. Dynamischer Bereich: Wenn du eine Dropdown-Liste mit den Namen aus der ersten Zeile erstellen möchtest:

    Sub DropdownErstellen()
       Dim letztespaltestart As Long
       With ActiveWorkbook.Worksheets("Renditen")
           letztespaltestart = .Cells(1, .Columns.Count).End(xlToLeft).Column
           .Range("A1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=IndexNamen"
       End With
    End Sub
  2. Namen mit ActiveWorkbook.Names.Add: Um mehrere Namen auf einmal zu erstellen:

    Sub MehrereNamenErstellen()
       ActiveWorkbook.Names.Add Name:="Name1", RefersToR1C1:="=Renditen!R1C1"
       ActiveWorkbook.Names.Add Name:="Name2", RefersToR1C1:="=Renditen!R1C2"
    End Sub

Tipps für Profis

  • Verwende Debug.Print im Code, um Variablenwerte während der Ausführung zu überwachen.
  • Achte darauf, dass du die Variablen sauber benennst, um die Lesbarkeit deines Codes zu verbessern.
  • Nutze die With-Anweisung, um den Code zu optimieren und wiederholte Bezüge auf das gleiche Objekt zu vermeiden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen RefersToR1C1 und Range.Name?
RefersToR1C1 verwendet relative Zellbezüge, während Range.Name direkte Zellreferenzen verwendet. Letzteres ist oft einfacher zu verstehen.

2. Wie kann ich mehrere Namen gleichzeitig erstellen?
Du kannst die Methode ActiveWorkbook.Names.Add in einer Schleife oder einfach nacheinander verwenden, um mehrere Namen zu erstellen.

3. Welche Excel-Version benötige ich für VBA?
VBA ist in Excel-Versionen ab 2000 verfügbar, aber es ist ratsam, eine neuere Version zu verwenden, um die besten Funktionen und Sicherheitsupdates zu genießen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige