Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1584to1588
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Range-Syntax

VBA Range-Syntax
11.10.2017 14:31:50
Sven
Hallo Zusammen,
aus reiner Neugierde würde mich mal interessieren, was es für einen Unterschied macht, ob ich eine Zelle via VBA mit
tabelle1.range("A1").value

oder
tabelle1.[A1].value

anspreche.
Grüße
Sven

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Range-Syntax
11.10.2017 14:39:47
yummi
Hallo Sven,
viele Wege führen nach Rom, welchesn Du nimmst ist geschmacksache.
Ein unterschied der beiden schreibweisen: die eine ist kürzer, die andere dafür zeigt dir an welche methoden gelten (nach eingabe des .)
Gruß
yummi
AW: VBA Range-Syntax
11.10.2017 14:43:49
Sven
OK, das war auch das Einzige das ich nachvollziehen konnte... dachte vielleicht das die []-Variante klitzekleinig mehr Rechenanspruch benötigt, da diese eventuell erst während der Abfrage konvertiert werden muss, aber auch das ist nicht der Fall...
Geschmacksache
11.10.2017 14:52:22
Rudi
Hallo,
das stimmt nicht.
[A1] ist erheblich langsamer als Range("A1"), was wiederum langsamer als Cells(1,1) ist.
Nur sporadisch eingesetzt ist aber egal.
Gruß
Rudi
Anzeige
AW: Geschmacksache
11.10.2017 15:47:26
Sven
Hallo Rudi,
wie hast Du denn das gemessen? Also ich habe exakt die gleiche Laufzeit (jeweils 2 Sekunden) wenn ich 50.000 Zellen auslese und miteinander addiere...
Grüße
Sven
Es ist ja auch kein Syntax-Problem, ...
11.10.2017 18:30:32
Luc:-?
…Sven,
sondern eines der Verfahrensweise. [A1] wird evaluiert, d.h., Xl wird zusätzlich bemüht, was aber in diesem Fall auch sehr schnell ist, da es sich um einen reinen AdressBezug handelt, auch wenn hier Application.Evaluate verwendet wird (idR 4malige Berechnung, mit Worksheets(n).Evaluate nur 2malig). Folglich dürfte sich das nur bei wesentlich höherem DatenSatzUmfang bemerkbar machen. Diese Schreibweise kann aber auch in komplexeren Fällen benutzt wdn, bei denen dieser Nachteil eher zutage tritt. Desweiteren kommt der Nachteil hinzu, dass hierbei keine TextZusammensetzungen benutzt wdn können, bei Evaluate-Schreibung aber schon. Deshalb empfiehlt MS diese Schreibung auch nicht, sondern den allgemeingültigen VBA-Standard Range("…") oder oft besser Cells(z, s) bzw ggf Range(Cells(za, sa), Cells(ze, se)), im anderen Fall eben Evaluate-Schreibung. Es ist nämlich auch fraglich, ob VBA-Adapter anderer OOL-Basic-Varianten (zB von LO/OOcalc) dieses MS-VBA-[]-Extra unterstützen*.
* MS hatte bspw mit JScript auch eine JavaScript-Variante geschaffen, die zumindest in Teilen nicht dem allgemein-verbindlichen Standard ent­sprach, was im Zuge notwendiger Einheitlichkeit von PgmmierSprachen mehrheitlich abgelehnt wird.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Geschmacksache
11.10.2017 20:58:55
Daniel
Hi
also ich würde das so testen:

Sub test()
Dim t As Double
Dim i As Long
Const anz As Long = 10000
t = Timer
For i = 1 To anz
[C1] = [B1] + [A1]
Next
Debug.Print Timer - t,
t = Timer
For i = 1 To anz
Range("C1") = Range("B1") + Range("A1")
Next
Debug.Print Timer - t,
t = Timer
For i = 1 To anz
Cells(1, 3) = Cells(1, 2) + Cells(1, 1)
Next
Debug.Print Timer - t
Debug.Print
End Sub
der wichtigste Vorteil von Range und Cells ist, dass sich die Bezüge auch ganz oder teilweise durch Variablen darstellen lassen, was bei der []-Schreibweise nicht so einfach möglich ist.
dh Cells und Range braucht man sowieso in der Programmierung, und ob dann noch eine dritte Variante zum Beschreiben von Zellbezügen, welche aber zu den genannten Funktionen keinen Zusatznutzen hat, wirklich braucht, ist fraglich.
Gruß Daniel
Anzeige
[C1] deutlich langsamer
11.10.2017 21:42:23
KlausF
Hi Daniel,
ich habe noch eine 4. Variante dazu genommen:
Cells(1, "C") = Cells(1, "B") + Cells(1, "A")
anz steht bei mir auf 30000 und zusätzlich habe ich noch
Application.ScreenUpdating = False
vorangestellt.
Von oben nach unten:
[C1] = 12 Sekunden
Range("C1") = 9 Sekunden
Cells(1, 3) = 6 Sekunden
Cells(1, "C") = 7 Sekunden
[C1] ist tatsächlich deutlich am langsamsten
Gruß
Klaus
Codeoptimierung von Hans
11.10.2017 18:33:36
Hans
Hallo Sven,
Hans empfiehlt auch nicht die Schreibweise [A1]
https://www.herber.de/vbabasics/0016.html
Punkt Nummer 5
Gruß
Klaus
Anzeige
Tolle Begründung, Lupo...! ;-> owT
12.10.2017 19:28:03
Luc:-?
:-?
Man tut, was man kann :-)
13.10.2017 16:56:42
lupo1
[A1] oder [A1:B7] erinnert mich einfach mehr an einen Bereich, als das Wort Range. Und da eine Konstruktion fast nur statisch erfolgt: Warum nicht so schön kurz?
Wie gesagt: In Programmcode würde ich das auch nicht tun.
Anzeige
Na, dann... ;-) owT
14.10.2017 02:23:55
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige