Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Range-Syntax


Betrifft: VBA Range-Syntax von: Sven Söllner
Geschrieben am: 11.10.2017 14:31:50

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

  

Betrifft: AW: VBA Range-Syntax von: yummi
Geschrieben am: 11.10.2017 14:39:47

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


  

Betrifft: AW: VBA Range-Syntax von: Sven Söllner
Geschrieben am: 11.10.2017 14:43:49

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...


  

Betrifft: Geschmacksache von: Rudi Maintaire
Geschrieben am: 11.10.2017 14:52:22

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


  

Betrifft: AW: Geschmacksache von: Sven Söllner
Geschrieben am: 11.10.2017 15:47:26

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


  

Betrifft: Es ist ja auch kein Syntax-Problem, ... von: Luc:-?
Geschrieben am: 11.10.2017 18:30:32

…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 …


  

Betrifft: AW: Geschmacksache von: Daniel
Geschrieben am: 11.10.2017 20:58:55

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


  

Betrifft: [C1] deutlich langsamer von: KlausF
Geschrieben am: 11.10.2017 21:42:23

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


  

Betrifft: Codeoptimierung von Hans von: KlausF
Geschrieben am: 11.10.2017 18:33:36

Hallo Sven,
Hans empfiehlt auch nicht die Schreibweise [A1]

https://www.herber.de/vbabasics/0016.html
Punkt Nummer 5

Gruß
Klaus


  

Betrifft: für nichtoptimierten Code immer [A1] von: lupo1
Geschrieben am: 12.10.2017 19:16:02

z.B. Konstruktionsmakros, wie am Ende von

http://www.office-hilfe.com/support/showthread.php/21725
http://www.office-hilfe.com/support/showthread.php/22254
http://www.office-hilfe.com/support/showthread.php/22312

Begründung: Es sieht so klar und einfach aus.


  

Betrifft: Tolle Begründung, Lupo...! ;-> owT von: Luc:-?
Geschrieben am: 12.10.2017 19:28:03

:-?


  

Betrifft: Man tut, was man kann :-) von: lupo1
Geschrieben am: 13.10.2017 16:56:42

[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.


  

Betrifft: Na, dann... ;-) owT von: Luc:-?
Geschrieben am: 14.10.2017 02:23:55

:-?