Mach deinen Code 10x schneller (Nutze Array statt Range) | Excel VBA

Mach deinen Code 10x schneller (Nutze Array statt Range) | Excel VBA

Kai Weissmann

3 года назад

34,912 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

Horst Power
Horst Power - 30.06.2023 19:49

Hey Top Video und besten Dank. Bin gerade mit 2 For-Schleifen durchs Array(16, 127) um die Daten in ein Range-Objekt zu füllen. Also die Version von dir war noch 30-mal schneller.🤓 Wie der Schleifenlose Transfer funktioniert habe ich aber dennoch nicht ganz begriffen. 😆

Ответить
User85
User85 - 30.03.2023 12:17

Top! Hat mir extrem geholfen, vielen Dank!
Ich konnte den Range auch ohne ReDim an den Array übergeben. Einfach: Arr=Range.Value. Hat das Nachteile, wenn ich es so mache? Die Dimensionierung des Arrays war dadurch identisch und nicht etwa maximal oder deutlich grösser.

Ответить
Stefan Krömer
Stefan Krömer - 16.03.2023 00:58

Naja.. natürlich kopierst du das Array in einen anderen Bereich, ansonsten würdest du deine formatierte Tabelle zerstören. Und wenn Formeln in der Tabelle stehen, werden auch diese durch die Werte ersetzt. Daher ist das lediglich nett..

Ответить
Stefan Frick
Stefan Frick - 08.03.2023 18:00

Vielen Dank für die Schritt für Schritt Erklärungen.
Mich würde interessieren wie ich für den Array-Bereich die Funktion Trim anwenden kann.
Ich habe regelmäßig Listen bei denen die Trim Funktion in Range ca. 5 s bis hin zu 3 Minuten dauert.

Ответить
Daniel Jäger
Daniel Jäger - 05.03.2023 11:25

Wo ist mein Kommentar hin? Egal, dickes Danke für Deinen Kanal, dem ich beruflich und privat nun schon einige Zeit (ver)folge. Ohne Deine tollen Videos wären meine Projekte nicht da, so sie jetzt stehen. Deine enstpannte Didaktik und netten Nebenerklärungen, wie der Editor und Zusatzfunktionen Anwendung finden, machen den Lernprozess sehr angenehm. Nun meine Frage: im Video erklärst Du, wie man das Array neben die Ursprungstabelle platziert, was als usecase Fragezeichen hinterlässt. Wie gelingt es, im Array manipulierte Spalten passend in die Urspungsrange/Tabelle zu schreiben? ich habe mal gehört, dass Excel dann im Prinzip nur 1x rechnet und nicht wie beim Auslesen via Schleifen jedesmal Rechenlast erzeugt wird.

LG Daniel

Ответить
M. Gläser
M. Gläser - 30.01.2023 01:22

Hey Kai, dieser Tipp mit der Range ist natürlich Gold wert wenn man ihn richtig einsetzen kann. Könntest du das ggf auch einmal zeigen, sofern es überhaupt geht, wie man genausowas in Word für nen excel sheet machen kann?

Also ich hab ne userform mit ner combobox in Word und die soll mit allen werten von einem excelsheet von der Range a1:a45 befüllt werden.
Daran hab ich mir heute 3h Zähne ausgebissen (auch ChatGPT hat’s net gelöst) und bin dann wieder beim for next loop anstatt for each loop gelandet :/

Sonst natürlich besten Dank mal wieder!🎉

Ответить
Stephanie Knuth
Stephanie Knuth - 27.01.2023 16:30

Hallo Kai, das Video ist super (wie all deine Videos) kannst du nochmal erklären warum die Ausgabe des Timers mit 0,3 Sekunden als langsamer bezeichnet wird als 2,7 Sekunden. Ich bin verwirrt :) Liebe Grüße

Ответить
Pascal Ittermann
Pascal Ittermann - 20.01.2023 17:34

Hi - wieder ein supper Video. Mal ne Frage - Variant verbraucht ja mehr speicher als eine String. Wenn man das Array als String definiert, dann funktioniert aber die zeille arr = rngData.Value nicht mehr. Wenn man nun beides verbinden will (Schnelligkeit und Speicherbedarf) Wäre es dann ratsam mit arr-Variant = rngData.Value alles in die Variable zu laden und dann per Schleife in ein arr-String zu überspielen und zum schluss mit Erase arr-Variant die Variant wieder zu löschen und mit der arr-string weiter zu arbeiten. Oder würde das vom Speicher her nichts bringen weil die arr-Variant bereits einmal dimensioniert wurde?

Ответить
SwissMarkus2021
SwissMarkus2021 - 14.01.2023 16:53

Kai, ein absoluter Hammerbeitrag ab sofort werde ich das Arbeiten mit Array nutzen ... vielen Dank

Ответить
LebenWerden
LebenWerden - 17.11.2022 20:50

Gibt es VBA Vererbung?

Ответить
Björn Berthold
Björn Berthold - 15.11.2022 00:23

Hallo, alles schön erklärt!
Aber wäre die Range -Methode nicht viel schneller, wenn man mit application.ScreenUpdating=false das Refreshen der Tabelle zur Makro-Laufzeit ausschaltet?

Ответить
Nachmacher
Nachmacher - 28.10.2022 13:31

Vielen Dank für das tolle Video.

Ответить
Da _Sie
Da _Sie - 15.10.2022 00:44

Top Video 💪🏽

Ответить
Da _Sie
Da _Sie - 15.10.2022 00:40

Kleiner Tipp,
Strg + h, dann ist man auch sofort beim Ersetzen 😉

Ответить
Kirito Kazugaya
Kirito Kazugaya - 12.10.2022 00:42

Schönes Video, sehr verständlich alles!
Ich arbeite sehr viel mit Formeln/Zellenbezügen und hauptsächlich der Zielwertsuche. Diese habe ich bisher immer in meinem Makro mit Range ausgeführt. Die Daten sind mitlerweile sehr viel geworden (ca. 7000 Zeilen) und es dauert dann schonmal 10 Minuten, um alles runter zu rechnen.
Soweit ich es verstanden habe übernimmt ein Array jedoch nur die Werte, die für den Benutzer zu sehen sind und arbeitet nicht mit Formeln, da es ja Zahlenwerte sind. Gibt es trotzdem eine Möglichkeit mein Programm schneller zu machen, egal ob mit oder ohne Array? "ScreenUpdating = False" hab ich schon drin. :)

Ответить
Volker Rehorn
Volker Rehorn - 17.09.2022 12:25

Hallo Kai, tolles Video und sehr effektiv.
Es müsste doch auch möglich sein, eine komplette Spalte einer intelligenten Tabelle über den Namen in ein Array zu schreiben, oder?
zB: ReDim arr("intelligenteTabelle[Spalte1])
Oder sieht das dann anders aus?

Ответить
Holger Hessling
Holger Hessling - 09.09.2022 12:51

Sehr gutes Video zum Thema – so wie alle Deine Videos sehr sehenswert sind.



Ich selbst nutze die hier vorgestellte Technik seit jeher. Datenmanipulationen auf einem Tabellenblatt werden über den ‚Umweg‘ mit dem Array ‚rasend‘ schnell. Aber wenn die Datenmenge nur groß genug ist, wird auch Excel merklich lange beschäftigt.



In meinem Fall kopiere ich ein 2D-Array mit etwas mehr als 15.000.000 Zellen auf ein Tabellenblatt. Da rührt sich Excel einige Sekunden lang gar nicht mehr.



With ThisWorkbook.Sheets(cMESDaten)

.Range("A3").Resize(UBound(vaAusgabeArray, 1) + 1, UBound(vaAusgabeArray, 2) + 1).Value = vaAusgabeArray

End With



Hast Du vielleicht einen Tipp, wie das beschleunigt werden kann?



Gruß

Holger

Ответить
Harald Mau
Harald Mau - 29.07.2022 04:39

Hallo Kai möchte einzelne Programme die du ins Netz gestellt hast verbinden schreibe mich an ďas ich das besser erklären kann

Ответить
Bugs Bunny
Bugs Bunny - 20.07.2022 19:25

Super,wie immer...herzlichen Dank für deine Mühe...

Ответить
Leroix
Leroix - 11.07.2022 13:33

Tolles Video!! Sehr informativ. Mache grad ein Fernstudium zum geprüften Programmierer und deine Videos sind eine super Ergänzung für mich zum lernen :) keep up the good work

Ответить
Roger Scorefun
Roger Scorefun - 17.06.2022 22:31

Super erklärt - Danke !
Mit (mehrspaltigen) Arrays stehe ich noch ein bisserl auf Kriegsfuß...Dein Video hat mir sehr geholfen, es besser zu verstehen

Ответить
J S
J S - 14.03.2022 01:58

Vielen Dank! Du bist ein echter VBA-Profi. Das merkt man daran, wie gut, einfach und schnell du es mit den schwierigen Arrays erklärt hast. Viele wagen dieses Wort nicht in den Mund zu nehmen. Ich habe das Gefühl gehabt, als wärst du der Excel-Entwickler. Komm gibs zu, du arbeitest bei Microsoft ;) Spaß! Also, dankeschön nochmal:)

Ответить
Rumo
Rumo - 10.03.2022 19:45

Sehr schöne Demonstration. Ich habe das auch feststellen müssen bei einer umfangreicheren Aufgabe. Da habe ich fast alles auf Array-Bearbeitung umgestellt bis auf eine Sache. Da bin ich mir leider nicht sicher, ob ich das so ohne weiteres in Arrays lösen kann, aber ich werde mal schauen, ob es doch irgendwie mit meinen Kenntnissen, die ich seit dem letzten Mal, dass ich an dem Projekt gearbeitet habe, erworben habe. Knackpunkt war damals glaube ich das Sortieren der Werte im Array, aber vielleicht brauche ich das gar nicht, wenn es im Array so viel schneller geht, dass ich einfach jedes Mal alle Werte durchgehen kann anstatt nur bestimmte.

Ответить
Steve Wichmann
Steve Wichmann - 31.01.2022 13:35

Super, das kann ich gut gebrauchen :)

Eine Frage hätte ich an dich. Könntest du mal ein Video über Multithread machen? Ich weiß, VBA kann das ja nicht nativ, aber es ist über ne API anscheinend doch möglich :)

Ответить
ThegrayBall
ThegrayBall - 30.01.2022 18:56

Hallo Kai,
danke dir fürs Video. Das war super erklärt!

Vor allem das Befüllen das Arrays was eine super Info für mich.

Kann es sein, dass der Datentyp Range ganz schön kompliziert ist? Ich komm mit dem Datentypen einfach nicht klar. Der Datentyp Date ist genau so schlimm finde ich ^^'.
Habe noch einen schönen Tag .).
LG

Ответить
falco1020301
falco1020301 - 20.01.2022 22:41

Mich würde nun der Hintergrund interessieren. Wieso ist diese Methode schneller ?

Ответить
Patrick Wüthrich
Patrick Wüthrich - 17.01.2022 00:41

Hallo Kai
Ich bin immer wieder auf diversen Kanelen unterwegs um mein Wissen über die VBA Thematik zu erweitern.
Die Gestaltung und Themenauswahl deiner Viedeos sind sehr ansprechen!
Gerade zu den Arrays, giebt es doch einiges zu erzählen.
Mich würde z.B interessieren wie ein befülltes Array sortiert werden kann…?

Vielen Dank nochmals für deine Videos!
Gruss Trick

Ответить
Portalius
Portalius - 12.12.2021 12:20

Hallo Kai,
danke für deine Videos. Besonders das Thema, wie kann ich die Berechnung beschleunigen, war für mich sehr interessant. Ich konnte dies auch zum Teil umsetzen, leider habe ich aber ein Problem, welches ich bisher nicht lösen konnte. In meinem Array sind auch Formeln enthalten. Diese lassen sich aber nicht einfach in einem "Rutsch" in eine Range schreiben. Kennst du dafür eine Lösung?
Danke & Grüße

Ответить
Zeta Reticulum
Zeta Reticulum - 12.12.2021 01:58

Ich dachte immer ich hab mich schone einigermaßen in die VBA Geschichte eingearbeitet.
Aber deine Videos zeigen mir das es noch viel zu lernen gibt... habe gleich geabot xD
Danke, super erklärt 👍

Ответить
Andreas Rudolph
Andreas Rudolph - 30.11.2021 20:16

Du hast immer eine interessante Themenauswahl und ich lerne aus deinen Tipps jedes mal was dazu. Super!

Ответить
Richard Panther
Richard Panther - 24.10.2021 18:04

Dankeschön! Seitdem ich deine Lernvideos für Excel VBA gefunden habe steigt meine Lernkurve steil an. Die englischsprachigen Lernvideos und Internettipps sind doch erheblich mühsamer. Jetzt kann ich meine "Jugendsünden" in meinen Makros endlich überarbeiten und professioneller gestalten. Supi

Ответить
Gerhard Grensemann
Gerhard Grensemann - 16.10.2021 20:37

Hallo,
Ich hab bisher mit Arrays nur meine Listbox befüllt, und das Thema
etwas vernachlässigt. es lohnt sich wie ich sehe da etwas genauer
draufzuschauen......
Wiedermal ein Super Video thx
Hier mal ein Bsp. wie ich ein Array bis jetzt nutze:

Dim intlRow as Integer, Arr

With tbl_Daten
intiRow = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range(A3:C" & intlRow)

With Me.lst_Daten
.ColumnCount = 3
.ColumnWidths = "50;60;20"
.List = Arr
end With
end With

Ответить
Ronny Krause
Ronny Krause - 11.08.2021 11:07

Moin sehr gut erklärt gefält mit gut vielen dank

Ответить
Froli7755
Froli7755 - 29.03.2021 00:39

Super hilfreich!! Danke für das sehr gute Video.

Ответить