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

VBA-Schreibweise: [A1].Select

Forumthread: VBA-Schreibweise: [A1].Select

VBA-Schreibweise: [A1].Select
Günther
Hallo
Ich bin kürzlich über eine sehr kompakte Schreibweise zum Ansprechen von Zellen und Bereichen (aus einem Makro heraus) gestoßen. Neben dem bekannten Range("A1") oder Cells(1,1) stellen auch folgende Zeilen gültige Excel-VBA-Makro-Befehle dar:
[A1] = "Hallo!"
MsgBox [A1]
[A1:B3].Interior.Color = vbRed
Mich würde interessieren, ob diese Schreibweise irgendwelche Nachteile hat, denn in der üblichen Literatur und den meisten Makros wird (meines Wissens) standardmäßig meist nur mit Range und Cells gearbeitet.
Möglicherweise weiß auch jemand einen theoretischen Background, warum diese Schreibweise überhaupt existiert und funktioniert (z.B. „Kompatibilitätsmüll“ aus anno Schnee ö.ä.).
Grüße
Günther
Anzeige
AW: VBA-Schreibweise: [A1].Select
14.09.2011 18:50:24
mumpel
Hallo!
Diese Schreibweise ist nicht zu empfehlen, da zu langsam. Zellen sollten immer direkt referenziert werden. Also bitte vergiss diese Art der Programmierung sofort wieder.
Gruß, René
AW: VBA-Schreibweise: [A1].Select
14.09.2011 20:19:47
Günther
Hallo René,
Danke für die Info. Habs mal bezüglich Geschwindigkeit getestet und folgende Werte (im Vergleich zur Range-Anweisung) rausbekommen: (cells ist unwesentlich schneller als Range)
[A1] = "Hallo!" 'ca. 20% langsamer
[A1].Interior.Color = vbRed 'ca. 25% langsamer
[A1].select 'ca. 45% langsamer
Bei performancekritischen Makros sicher ein wesentliches Argument, aber bei den typischen Kurzmakros, die dann statt 1,5 Sekunden vielleicht 2 Sekunden dauern, scheint mir die langsamere Geschwindigkeit nicht so dramatisch ins Gewicht zu fallen.
Du schreibst, dass diese Schreibweise keine direkte Referenzierung der Zelle darstellt. Was meinst Du damit?
Grüße Günther
Anzeige
AW: VBA-Schreibweise: [A1].Select
14.09.2011 21:38:44
Gerd
Hallo Günther,
die eckigen Klammern stehen für Evaluate(Auswerten). Das wohl ein Relikt aus der xl4Makro-Zeit.
Kürzer ist nicht immer besser.
Gruß Gerd
AW: VBA-Schreibweise: [A1].Select
14.09.2011 23:47:25
Luschi
Hallo Excel-Fan's,
habe mehrfach folgende 3 Tests in Excel 2010 gemacht:

Sub test1()
Debug.Print Time
For i = 1 To 1000000
Evaluate ("[A" & i & "] = 9")
Next i
Debug.Print Time
End Sub
Sub test2()
Debug.Print Time
For i = 1 To 1000000
ActiveSheet.Range("B" & i) = 9
Next i
Debug.Print Time
End Sub
Sub test3()
Debug.Print Time
For i = 1 To 1000000
ActiveSheet.Cells(i, 3) = 9
Next i
Debug.Print Time
End Sub
Ergebnis:
test1: 14 ... 16 Sekunden
test2: 50 ... 55 Sekunden
test3: 40 ... 42 Sekunden
Bei mir ist also eindeutiger Testsieger die Prozedur 'test1' und kann deshalb Mumpels Aussage wegen der Langsamkeit von [A1] gegenüber Range("A1") nicht bestätigen.
Nachteil von [A1] : Es muß die richtige Tabelle aktiv sein
Vorteil von [A1] : Bei Verwendung von Arbeitsmappen-Bereichsnamen benötigt man keine weitere Referenzierung.
[meinName].Value = 12
kann also im Vba-Code an jeder Stelle so aufgerufen werden und der Wert wird in die richtige(n) Zelle(n) geschrieben. Wenn [meinName] den Zellbereich Workbooks("meineArbeitsmappe.xls").Worksheets("meineTabelle").Range("A1:A100") repräsentiert, dann steht in allen diesen Zellen der Wert '12'. Das funktioniert auch, wenn man diesen Vba-Code aus einem AddIn aufruft und in eine der geöffneten Arbeitsamappen gibt es diesen vergebenen Namen.
Was will man mehr.
Gruß von Luschi
aus klein-Paris
PS: mein Allerweltstest-PC:
Prozessor: E6600
RAM: 4 GB
BS: Windows7-32bit
Software: MS-Office 2010 Prof Plus
Anzeige
AW: VBA-Schreibweise: [A1].Select
15.09.2011 03:50:13
mumpel
Also doch schneller als immer behauptet wird?
Aber dennoch: Jeder Programmierer der was auf sich hält, nutzt diese alte Programmierweise nicht.
Falscher Test
15.09.2011 11:22:00
Rudi
Hallo,
in Test 1 ermittelst du ja nur, ob Ai=9 ist. In den anderen schreibst du 9 in die Zellen. Das ist doch was ganz anderes.
Gruß
Rudi
Anzeige
AW: Falscher Test
15.09.2011 11:36:59
Daniel
Genau so schauts aus, da werden völlig verschiedene Sachen mit einander verglichen.
ein Realistisches Szenario würde folgenden Befehl verwenden:
Schreiben: [A1] = 9 / Range("A1") = 9 / Cells(1,1) = 9
Lesen: x = [A1] / x = Range("A1") / x = Cells(1,1)
damit komme ich auf folgende Zeiten (bei 10.000 durchläufen)

schreiben:  [A1]    1,6328125
Range() 1,5078125
Cells() 1,4296875
lesen:     [A1]    0,140625
Range() 0,09375
Cells() 0,0625 

was klar gegen die [..]-Schreibweise spricht.
des weiteren kann man hier nicht mit Variablen arbeiten, was die Verwendung weiter einschränkt.
Gruß, Daniel
Anzeige
Richtig, Daniel & Rudi! Und das war schon aus ...
15.09.2011 15:20:37
Luc:-?
…den 1.Tests zu erkennen! Warum Luschi da überhpt Evaluate einsetzt und Mumpel dann noch darauf reinfällt, ist mir völlig schleierhaft!
Gruß Luc :-?
AW: Richtig, Daniel & Rudi! Und das war schon aus ...
15.09.2011 16:46:58
mumpel
Das ist mir auf Arbeit dann auch eingefallen. Im Beispiel des TO taucht Evaluate nämlich gar nicht auf.
Na dann iss ja jut ... ;-) Gruß owT
15.09.2011 22:48:48
Luc:-?
:-?
Anzeige
;
Anzeige

Infobox / Tutorial

VBA-Schreibweise: [A1].Select und deren Alternativen


Schritt-für-Schritt-Anleitung

  1. Zelle ansprechen mit [A1]: Du kannst in deinem VBA-Code eine Zelle direkt ansprechen, indem du die Schreibweise [A1] verwendest:

    [A1] = "Hallo!"
  2. Zelle auswählen: Um die Zelle A1 auszuwählen, kannst du Folgendes verwenden:

    [A1].Select
  3. Zellenbereich ansprechen: Um einen Bereich wie A1:B3 zu formatieren, schreibe:

    [A1:B3].Interior.Color = vbRed
  4. Verwendung von Range: Im Gegensatz zur [A1]-Schreibweise, kannst du auch Range verwenden:

    Range("A1").Value = "Hallo!"
  5. Mit Cells: Alternativ kannst du die Cells-Methode nutzen:

    Cells(1, 1).Value = "Hallo!"

Häufige Fehler und Lösungen

  • Langsame Ausführung: Wenn du die [A1]-Schreibweise verwendest und die Performance leidet, kann es sinnvoll sein, auf Range oder Cells umzusteigen.

  • Aktives Blatt: Stelle sicher, dass das richtige Arbeitsblatt aktiv ist, wenn du [A1] verwendest. Ansonsten erhältst du möglicherweise einen Laufzeitfehler.

  • Variablenmissbrauch: Die [A1]-Schreibweise unterstützt keine Variablen. Nutze stattdessen Range oder Cells, wenn du mit Variablen arbeiten möchtest.


Alternative Methoden

  • Evaluate: Die Verwendung von Evaluate kann in bestimmten Situationen sinnvoll sein, wenn du dynamische Zellreferenzen benötigst:

    Evaluate("[A1] = 5")
  • Direktes Arbeiten mit Objekten: Du kannst auch direkt auf Zellen und Bereiche über die Worksheet-Objekte zugreifen:

    Worksheets("Sheet1").Range("A1").Value = "Hallo!"

Praktische Beispiele

  • Beispiel für die Verwendung von [A1] und Range:

    Sub Beispiel()
      [A1] = "Wert 1"
      Range("A2").Value = "Wert 2"
    End Sub
  • Performance-Test:

    Sub PerformanceTest()
      Dim i As Long
      For i = 1 To 1000000
          [A1] = i
      Next i
    End Sub

Die Geschwindigkeit der Ausführung kann variieren, also teste es in deinem Kontext.


Tipps für Profis

  • Vermeide [A1]: Nutze die konventionellen Methoden wie Range oder Cells, um die Lesbarkeit und Wartbarkeit deines Codes zu erhöhen.

  • Performance-Optimierung: Bei großen Datenmengen kann es sinnvoll sein, die Bildschirmaktualisierung und Berechnung vorübergehend auszuschalten:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

FAQ: Häufige Fragen

1. Warum sollte ich [A1] meiden? Die Verwendung dieser Schreibweise kann zu Performance-Problemen führen und ist nicht so weit verbreitet wie Range oder Cells.

2. Was sind die Vorteile der Verwendung von Range? Range ermöglicht eine klarere und lesbarere Code-Struktur, insbesondere wenn du mit Variablen und größeren Datenmengen arbeitest.

3. Ist [A1] langsamer als Range? Ja, in der Regel ist [A1] langsamer, insbesondere bei wiederholten Zugriffen auf Zellen in Schleifen. Es wird empfohlen, die konventionellen Methoden zu verwenden.

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