Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA-Nachhilfe Variablendeklaration
#1
Smile 
Vermutlich meintest Du statt Deiner höflicheren Eingangsfrage in Wirklichkeit: "Deklarierst Du etwa nicht?"  :19:

"As Integer" ist zwar weiterhin möglich, aber langsamer als Long, da es a) intern in Long konvertiert wird und b) trotzdem auf gültige Integer geprüft wird. Habe ich zumindest mal irgendwo gelesen.
Antworten Top
#2
Hallo Lupo,

Zitat:"As Integer" ist zwar weiterhin möglich, aber langsamer als Long, da es a) intern in Long konvertiert wird und b) trotzdem auf gültige Integer geprüft wird. Habe ich zumindest mal irgendwo gelesen.

Das habe ich mal ins Forum geschrieben. Ich habe das aus einem schlauen Buch,
weil Microsoft mich leider nicht über die Schulter schauen läßt  :05:


@ Günter,

Zitat:Dim i, j As Integer

... ist insofern falsch, da in dieser Form i = Variant ist und nur j = Integer

Dim i as integer, j as integer wäre richtig.
Wäre mir aber ab Excelversionen >= Excel2007 zu fehleranfällig.
Alleine schon darum würde ich anstatt Integer besser Long nutzen.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#3
Hallo Lupo, hi Peter,

danke für die VBA-Schulung (das ist nicht ironisch, sondern ehrlich gemeint!). Ich hatte vor Kurzem schon einmal einen ähnlichen Tipp gegeben und die VBA-Spezies um eine Hilfestellung zu Integer gebeten. Das ist aber vermutlich irgendwo in dem damaligen Beitrag untergegangen.

Ich stecke, was VBA angeht, nicht nur in Kinderschuhen sondern noch in Babyschühchen (meine eigene Einschätzung in meinem Profil: ich kann Makros aufzeichnen!! Wow!! Wink trifft absolut zu).

@Peter

Deine Erklärung hat mir sehr geholfen; die Schreibweise, die ich verwendet habe, habe ich, wie kann's anders sein, irgendwo gelesen und (unreflektiert) übernommen. Wieso ich überhaupt INTEGER verwendet habe, ist dieser Seite geschuldet: http://www.vba-tutorial.de/variablen/datentypen.htm und daraus speziell

[
Bild bitte so als Datei hochladen: Klick mich!
]

Nachtrag:

Zitat:Wäre mir aber ab Excelversionen >= Excel2007 zu fehleranfällig.


Kannst du mir das bitte noch etwas näher erläutern?
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#4
Hallo Günter,

Zitat:Kannst du mir das bitte noch etwas näher erläutern?

gerne und ganz einfach, wieviele Zeilen gibt es denn in den von mir angesprochenen Versionen?
Du hast es ja selbst rot eingerahmt. Da steigt Integer einfach aus.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#5
Hi Peter,


Zitat:[...]wieviele Zeilen gibt es denn in den von mir angesprochenen Versionen?

Du hast es ja selbst rot eingerahmt. Da steigt Integer einfach aus.

danke. Ich habe die 32Tsd und Zerquetschte nicht mit Zeilen in Verbindung gebracht. Blush
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#6
Moin!  :19:
Zitat:Ich habe das aus einem schlauen Buch, weil Microsoft mich leider nicht über die Schulter schauen läßt

Dann schauen wir MS doch mal in die Karten:
Lasst mal folgendes vollkommen sinnbefreite Makro laufen.
Sub Quatsch()
Dim Start As Double
Dim i As Integer, j As Integer, k As Long, l As Integer
Dim x As Long, y As Long, z As Long
Start = Timer
'long-Variable k wird 3276600mal mit Integer-Wert gefüllt 
For i = 1 To 100
   For j = 1 To 32766
      k = j
   Next j
Next i
Debug.Print "Integer to Long: " & Timer - Start
Start = Timer
'Integer-Variable l wird 3276600mal mit Integer-Wert gefüllt 
For i = 1 To 100
   For j = 1 To 32766
      l = j
   Next j
Next i
Debug.Print "Integer to Integer: " & Timer - Start
Start = Timer
'Long-Variable z wird 3276600mal mit Long-Wert gefüllt 
For x = 1 To 100
   For y = 1 To 32766
      z = y
   Next y
Next x
Debug.Print "Long to Long: " & Timer - Start
End Sub
Direktfenster meiner alten Möhre schrieb:Integer to Long: 0,19140625
Integer to Integer: 0,1484375
Long to Long: 0,140625
Wie man sieht, dauert die Konvertierung zwischen zwei Datentypen ca. 30% länger als wenn man eine Typ-zu-Typ-Zuweisung macht.
In der Verarbeitungsgeschwindigkeit habe ich keine Differenz zwischen Long und Integer ausmachen können.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
Hallo Günter,

Zitat:danke. Ich habe die 32Tsd und Zerquetschte nicht mit Zeilen in Verbindung gebracht. 

das mit den Zeilen war ja auch nur ein, aber offenbar leicht verständliches, Beispiel.
Es ist mir auch völlig klar, daß das Longgedöhns und ähnliches bei den Formelmenschen
so gar nicht bis überhaupt gar nicht zum Tragen kommt.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#8
Hallo zusammen,

ausgehend von diesem ursprünglichen Thread ( http://www.clever-excel-forum.de/thread-7527.html ) mache ich ein neues Thema auf, damit der Originalthread nicht unnötig mit nicht relevanten Beiträgen aufgebläht wird. Die bisher angefallenen Beiträge habe ich hierher verschoben.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#9
Hi Ralf,

Zitat:Wie man sieht, dauert die Konvertierung zwischen zwei Datentypen ca. 30% länger als wenn man eine Typ-zu-Typ-Zuweisung macht.

In der Verarbeitungsgeschwindigkeit habe ich keine Differenz zwischen Long und Integer ausmachen können.

*vorsichtigkopfkratz* (damit ich mir keine Spreißl einziehe :32: )

Das sagt meine Direktauswertung, wobei ich nicht die Geschwindigkeit im allgemeinen meine, sondern die Konvertierung zwischen den unterstrichenen Datentypen:

[
Bild bitte so als Datei hochladen: Klick mich!
]



Hier ist doch lediglich INTEGER zu INTEGER schneller als die anderen. Huh
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#10
Hi Günter!
1. Finde ich richtig, dass dieser offtopic abgetrennt wurde.
2. Ich habe meinen Code noch nachträglich geändert (c&p-Teufelchen hatte zugeschlagen)
3. Wollen wir die PCs tauschen?  :21:
4. Bei 32.766.000 Durchläufen bei mir:
Zitat:Integer to Long: 1,609375

Integer to Integer: 1,4765625
Long to Long: 1,5546875

Einigen wir uns auf marginale Unterschiede?  :19:
Ich will damit auch sagen, dass manche Behauptungen (Geschwindigkeit, Speicherplatz) eher im homöopathischen Bereich Veränderungen bringen.
Ich nutze im übrigen häufig auch Variant, zumal dann, wenn ich keine Nachteile MESSEN kann.
(snb ist da so ein spezieller Guru, der verzichtet dreist auf Deklaration und nutzt somit grundsätzlich Variant, ist bei ihm aber egal, da sein Code extrem durchdacht ist)

Bis hierher erstmal genug;
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste