Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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 ohne Column?

VBA Range ohne Column?
09.07.2022 16:26:35
Joschi
Hallo Forum.
wie kann ich an einer Range wie der folgenden einfach erkennen, dass keine Spalte angegeben ist?
Mein Range: $20:$22
Gruß Joschi

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Range ohne Column?
09.07.2022 16:57:32
Sulprobil

Function IsEntireRow(r As Range) As Boolean
IsEntireRow = r.Address = r.EntireRow.Address
End Function

AW: VBA Range ohne Column?
09.07.2022 17:02:32
Daniel
Hi
naja, "keine Spalte" gibt es nicht.
das sind alle Spalten.
zur Prüfung vielleicht so:
If Range("$20:$22").columns.count = Rows(1).Columns.Count then
Gruß Daniel
AW: VBA Range ohne Column?
09.07.2022 17:25:24
Joschi
Hallo Sulprobil, hallo Daniel.
Ich habe beide Vorschläge getestet, und beide erfüllen den gewünschten Zweck.
Mein Problem ist damit erledigt. Vielen Dank
Gruß Joschi
AW: Kleine abschließende Preisfrage
10.07.2022 01:09:03
Sulprobil
Was ist teurer?
.Count oder .Address?
Have fun,
Bernd
in welcher Währung?
10.07.2022 01:41:46
Daniel
Rechenzeit?
Anzeige
AW: Ja, Rechenzeit
10.07.2022 01:55:38
Sulprobil
nach meinen Testes ist
10.07.2022 02:14:48
Daniel
.columns.count ist schneller als .Address
wobei in Reallife die unterschiede hier keine Rolle spielen, also eher akadmischer Schwanzvergleich.
damit habe ich getestet, Kritik und Verbesserungsvorschläge an und für diese Methode sind gerne willkommen.

Sub test()
Dim x As Boolean
Dim i As Long
Const anz As Long = 10000
Dim t  As Double
Dim rng As Range
Set rng = Range("A1:Mno50000")
t = Timer
For i = 1 To anz
x = A(rng)
Next
Debug.Print Timer - t,
t = Timer
For i = 1 To anz
x = C(rng)
Next
Debug.Print Timer - t
End Sub
Function C(rng As Range) As Boolean
C = rng.Columns.Count = rng.EntireRow.Columns.Count
End Function
Function A(rng As Range) As Boolean
A = rng.Address = rng.EntireRow.Address
End Function

Anzeige
AW: Das geht genauer, denke ich
10.07.2022 09:44:37
Sulprobil
Hallo Daniel,
ich stimme Dir zu: in der Praxis sind beide Methoden so schnell, dass der Unterschied kaum jemals relevant sein wird.
Rein intuitiv dachte ich, dass .Address schneller sein muss.
Gemäß folgendem Test ist es das auch, aber lediglich zu ~12%.
Siehe anliegende Datei (ohne jegliche Gewährleistung, aber ich verwende einen aktuellen Virenscanner).
https://www.herber.de/bbs/user/154077.xlsm
JKP hat eine sehr schöne Klasse zur Performancemeesung veröffentlicht, die ich gern verwende: https://jkp-ads.com/Articles/performanceclass.asp
Ich habe .Count, .Address, und eine Basis (ohne jede Rangeprüfung, damit man den Systemoverhead sieht) gemessen.
Ich denke, dass man in der Simulationsschleife die Range ändern muss, sonst optimiert VBA die Schleife und der Erkenntnisgewinn ist Null.
Viele Grüße,
Bernd
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige