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

Forumthread: Absoluter Zellbezug mit VBA

Absoluter Zellbezug mit VBA
29.09.2017 11:21:13
Daniel
Hallo Forum,
leider komm ich selber und nach langer Suche nicht weiter.
Ich möchte ein VBA Skript schreiben das eine Index/Vergleich Formel in Zellen einer Spalte einfügt. Diese Formel beinhaltet einen absoluten Bezug auf einem anderen Tabellenblatt. Ich bekomme immer den Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler. Der Sinn und Zweck der Formel ist die Übersetzung von Kürzeln ins Text während einer Auswertung zu automatisieren.
Hier ist mein Skript:
Sub test()
Dim lz As Long
Dim i  As Long
lz = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To lz
Cells(i, "C").Formula = "=INDEX(Kürzel!$B$2:$B$6;VERGLEICH(A2;Kürzel!$A$2:$A$6;0))"
Next i
End Sub
Die Excel-Datei ist unter diesem Link hochgeladen:
https://www.herber.de/bbs/user/116623.xlsx
Wenn ich einen Apostroph "'" vor dem "=" Zeichnen einfüge dann schreibt das VBA Skript die Formel in der Zelle rein. Ich habe danach versucht den Apostroph mit VBA zu entfernen, aber dann bekomme ich wieder den gleichen Fehler. Die Index/Vergleich Formeln funktioniert im Tabellenblatt einwandfrei. Was mache ich mit meinem Skript falsch?
Vielen Dank im Voraus für die Hilfe!
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Absoluter Zellbezug mit VBA
29.09.2017 11:24:32
ChrisL
Hi Daniel
Entweder verwendest du "FormulaLocal" oder besser du verwendest die englische Schreibweise:
"=INDEX(Kürzel!$B$2:$B$6,MATCH(A2,Kürzel!$A$2:$A$6,0))"
cu
Chris
AW: Absoluter Zellbezug mit VBA
29.09.2017 11:27:11
ChrisL

Sub test()
With Range("C2:C" & Cells(Rows.Count, "A").End(xlUp).Row)
.Formula = "=INDEX(Kürzel!$B$2:$B$6,MATCH(A2,Kürzel!$A$2:$A$6,0))"
End With
End Sub
cu Chris
Anzeige
AW: Absoluter Zellbezug mit VBA
29.09.2017 11:31:50
Daniel
Hi
bei .Formula musst du die Formel in Englisch mit A1-Zellbezügen schreiben, dh englische Funktionsnamen und das Komma als Trennzeichen für die Parameter.
wenn du auch im Code die Formel in deutsch angeben willst, kannst du das tun mit .FormulaLocal
allerdings läuft dann dein Code nur mit einem deutschen Excel, während die .Formula-Variante in allen Sprachvarianten läuft.
Wenn du nicht weißt, wie die Formel für .formula lauten muss dann kannst du dir so behelfen:
- Schreibe die Formel normal in eine Zelle
- lasse dir im Direktfenster den Formeltext in der gewünschten Schreibweise anzeigen mit dem Befehl: ?Selection.Formula oder ?Selection.FormulaLocal
für die Programmierung ist meiner Erfahrung nach die .FormulaR1C1-Schreibweise die beste.
du brauchst auch keine Schleife
du kannst auch die Formel in einem Rutsch in alle Zellen gleichzeitig schreiben.
Range("C2:C" & lz).FormulaLocal = "=INDEX(Kürzel!$B$2:$B$6;VERGLEICH(A2;Kürzel!$A$2:$A$6;0))"

Gruß Daniel
dann wird auch dein Zellbezug auf A2 ein relativer Zellbezug.
Wenn du das mit der Schleife machst, dieser Bezug in jeder Zeile auf die Zelle A2, und ich vermute mal, dass du das nicht willst.
Anzeige
AW: Absoluter Zellbezug mit VBA
29.09.2017 11:45:45
Daniel
Vielen Dank an alle für die super schnellen Antwörte! Jeder Vorschlag hat funktioniert! Vielen Dank auch an Daniel für die Beschreibung, das Hilft mir unglaublich viel weiter VBA zu verstehen. Das mit der Übersetzungen von "," und ";" habe ich manchmal auch ohne VBA übersehen. Jetzt weiß ich wie man damit umgeht. Danke nochmals!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Absoluter Zellbezug mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um einen absoluten Zellbezug in einem VBA-Skript zu verwenden, gehe wie folgt vor:

  1. Öffne den VBA-Editor in Excel mit ALT + F11.

  2. Erstelle ein neues Modul.

  3. Füge folgenden Code in das Modul ein:

    Sub test()
       Dim lz As Long
       lz = Cells(Rows.Count, "A").End(xlUp).Row
       With Range("C2:C" & lz)
           .Formula = "=INDEX(Kürzel!$B$2:$B$6,MATCH(A2,Kürzel!$A$2:$A$6,0))"
       End With
    End Sub
  4. Führe das Skript aus, um die absoluten Bezüge in die Zellen einzufügen. Dabei wird Kürzel!$B$2:$B$6 als fester Zellbezug verwendet.


Häufige Fehler und Lösungen

  1. Laufzeitfehler '1004': Dieser Fehler tritt häufig auf, wenn die Formel nicht korrekt formatiert ist. Stelle sicher, dass du die englische Notation für die Funktionen und die richtigen Trennzeichen verwendest.

  2. Formel wird als Text eingefügt: Wenn du ein Apostroph vor dem Gleichheitszeichen setzt, wird die Formel als Text behandelt. Vermeide dies, wenn du die Formel direkt einfügen möchtest.

  3. Falsche Spracheinstellungen: Achte darauf, dass die verwendete Excel-Version die Sprache unterstützt, die du in deinem Skript nutzt. Nutze .FormulaLocal, wenn du die Formel in der Sprache deines Excel angeben möchtest.


Alternative Methoden

Eine alternative Methode, um einen absoluten Bezug zu verwenden, ist die Nutzung von .FormulaR1C1. Hier ein Beispiel:

Sub test()
    Dim lz As Long
    lz = Cells(Rows.Count, "A").End(xlUp).Row
    Range("C2:C" & lz).FormulaR1C1 = "=INDEX(Kürzel!R2C2:R6C2,MATCH(RC[-2],Kürzel!R2C1:R6C1,0))"
End Sub

Hierbei wird die Formel in R1C1-Notation angegeben, was die Arbeit mit relativen Zellbezügen erleichtert.


Praktische Beispiele

Ein praktisches Beispiel für die Verwendung eines absoluten Zellbezuges in einer Excel-Tabelle könnte sein:

  • Du möchtest in einer Tabelle mit Kürzeln (z.B. in A2:A10) die vollständigen Begriffe aus einem anderen Tabellenblatt (Kürzel!B2:B10) abrufen. Verwende den oben angegebenen VBA-Code, um diese Werte automatisch einzufügen.

Tipps für Profis

  • Wenn du häufig mit absoluten Bezügen arbeitest, kannst du eine Funktion erstellen, die verschiedene Formeln automatisch anpasst. Dies spart Zeit und reduziert Fehlerquellen.
  • Teste deine Formeln zuerst in einer Excel-Zelle, um sicherzustellen, dass sie korrekt sind, bevor du sie ins VBA-Skript überträgst.
  • Nutze die Funktion ?Selection.Formula im Direktfenster, um die genaue Schreibweise deiner Formel zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich in VBA auch relative Bezüge verwenden?
Du kannst relative Bezüge in VBA verwenden, indem du die Zellen ohne $-Zeichen angibst, z.B. A2 statt $A$2.

2. Was ist der Unterschied zwischen .Formula und .FormulaLocal?
.Formula verwendet die englische Notation, während .FormulaLocal die aktuelle Sprache deines Excel verwendet. Das bedeutet, dass .Formula in verschiedenen Excel-Versionen universell funktioniert.

3. Kann ich die Formel auch für mehrere Spalten gleichzeitig einfügen?
Ja, du kannst eine Formel für mehrere Spalten gleichzeitig einfügen, indem du den Bereich entsprechend anpasst, z.B. Range("C2:D" & lz).

4. Was mache ich, wenn ich den Fehler "Anwendungs- oder objektdefinierter Fehler" bekomme?
Überprüfe die Syntax deiner Formel und stelle sicher, dass alle Zellbezüge korrekt sind. Achte auch auf die Spracheinstellungen deiner Excel-Version.

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