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

  Рет қаралды 38,676

Kai Weissmann

Kai Weissmann

Күн бұрын

Пікірлер: 77
@Peter-ze1dj
@Peter-ze1dj Ай бұрын
Unglaublich. Man kommt sich wie ein Anfänger vor. Das muss ich erst einmal verinnerlichen und dann produktiv umsetzen! Vielen Dank für die tollen Videos!
@Peter-ze1dj
@Peter-ze1dj Ай бұрын
Warum benutzt Du rngData.Cells(i, 1) = rngData.Cells(i, 1) + 10 nicht Tabelle1.Cells(i, 1) = Tabelle1.Cells(i, 1) + 10?
@luckymr74
@luckymr74 9 ай бұрын
Genial einfach....einfach Genial! - Herzlichen Dank!
@SwissMarkus
@SwissMarkus Жыл бұрын
Kai, ein absoluter Hammerbeitrag ab sofort werde ich das Arbeiten mit Array nutzen ... vielen Dank
@KaiWeissmann
@KaiWeissmann Жыл бұрын
Viel Erfolg!
@bugsbunny4329
@bugsbunny4329 2 жыл бұрын
Super,wie immer...herzlichen Dank für deine Mühe...
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hey Bugs Bunny! Sehr gerne! Lg, Kai
@nachmacher82
@nachmacher82 2 жыл бұрын
Vielen Dank für das tolle Video.
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Sehr gerne :)
@Froli-ze1qp
@Froli-ze1qp 3 жыл бұрын
Super hilfreich!! Danke für das sehr gute Video.
@KaiWeissmann
@KaiWeissmann 3 жыл бұрын
Danke für das Feedback :)
@richardpanther2153
@richardpanther2153 3 жыл бұрын
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
@KaiWeissmann
@KaiWeissmann 3 жыл бұрын
Hallo Richard, vielen Dank für deinen netten Kommentar und viel Spaß beim Überarbeiten der Makros! LG Kai
@andreasrudolph7385
@andreasrudolph7385 3 жыл бұрын
Du hast immer eine interessante Themenauswahl und ich lerne aus deinen Tipps jedes mal was dazu. Super!
@KaiWeissmann
@KaiWeissmann 3 жыл бұрын
Hallo Andreas, vielen Dank für dein Feedback. Es freut mich sehr, dass dir die Themenauswahl gefällt :)
@Zeta_Reticulum
@Zeta_Reticulum 3 жыл бұрын
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 👍
@KaiWeissmann
@KaiWeissmann 3 жыл бұрын
Freut mich, dass du aus den Videos noch etwas mitnehmen kannst Zeta :)
@ThisIsScorefun
@ThisIsScorefun 2 жыл бұрын
Super erklärt - Danke ! Mit (mehrspaltigen) Arrays stehe ich noch ein bisserl auf Kriegsfuß...Dein Video hat mir sehr geholfen, es besser zu verstehen
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hey Roger, ja, die Arbeit mit Arrays ist anfangs etwas schwierig. Es lohnt sich aber, weil sie einfach so viel schneller sind. LG Kai
@leroix6422
@leroix6422 2 жыл бұрын
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
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hey Leroix! Danke für dein Feedback! Alles Gute beim Studium! Lg, Kai
@SvenSchulteHillen
@SvenSchulteHillen 6 ай бұрын
Super gut. Klar und echt hilfreich. danke
@KaiWeissmann
@KaiWeissmann 6 ай бұрын
Vielen Dank für dein Lob! Alles Gute bei deinen Projekten.
@gerhardgrensemann2787
@gerhardgrensemann2787 3 жыл бұрын
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
@KaiWeissmann
@KaiWeissmann 3 жыл бұрын
Hallo Gerhard, vielen Dank für deinen Kommentar und vorallem für deinen Beispielcode, der sicher einigen helfen kann! LG Kai
@JS-rn8tb
@JS-rn8tb 2 жыл бұрын
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:)
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Da hast du mich erwischt 😅 Danke für deinen Kommentar!
@ronnykrause6371
@ronnykrause6371 3 жыл бұрын
Moin sehr gut erklärt gefält mit gut vielen dank
@KaiWeissmann
@KaiWeissmann 3 жыл бұрын
Hi Ronny, vielen Dank für dein Feedback :)
@vitez19881
@vitez19881 2 жыл бұрын
Top Video 💪🏽
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Danke dir :)
@DerRumo
@DerRumo 2 жыл бұрын
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.
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Freut mich, dass es dir gefällt! Ansonsten kannst du natürlich auch im Array sortieren. LG Kai
@vornamenachname2260
@vornamenachname2260 2 жыл бұрын
Ich schreibe mehrdimensionale Arrays einfach in ein leeres Tabellenblatt. Da wird dann sortiert und wieder eingelesen. Ist schnell programmiert und lässt sich gut kontrollieren.
@ThomasBurger-tp7pj
@ThomasBurger-tp7pj 8 ай бұрын
Hallo Kai Super Sache :-). Kann ich auch Formatierungen über das Array verändern? z.B. die Zellenhintergrundfarbe?
2 жыл бұрын
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?
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hallo Björn, freut mich, dass dir die Erklärungen gefallen. Meines Wissens nach bleibt der Array gerade bei großen Datenmengen wesentlich schneller. LG Kai
@MrStefanFrick
@MrStefanFrick Жыл бұрын
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.
@stevewichmann5148
@stevewichmann5148 2 жыл бұрын
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 :)
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Freut mich, dass dir das Video gefällt. Ich nehme das Thema mal auf. Falls das noch mehr Leute interessiert, mache ich dazu ein Video. LG Kai
@GeniusAtWork-s7f
@GeniusAtWork-s7f 8 ай бұрын
Hallo, habe ich bei mir getestet. Leider erhalte ich in meiner Zieltabelle nicht alle Daten (Spalte A (Datum)) ist teilweise leer. Beim Array Transponieren tritt ein Fehler auf?. Die SQL Lösung finde ich interessant. Gibt es dafür noch Beispiele (Update, Delete, insert?). Ferner auch ein Video für die Arraybearbeitung? Würde diesen Ansatz gerne vervollständigen - sehr schnell. Helmut
@vitez19881
@vitez19881 2 жыл бұрын
Kleiner Tipp, Strg + h, dann ist man auch sofort beim Ersetzen 😉
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Super, danke für den Tipp!
@Tedrayn
@Tedrayn 2 жыл бұрын
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
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hallo Trick, freut mich, dass dir meine Videos gefallen und danke für deine Videoidee! LG Kai
@djaeger1978
@djaeger1978 Жыл бұрын
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
@User85306
@User85306 Жыл бұрын
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.
@luckymr74
@luckymr74 9 ай бұрын
Meine bisherige Lösung war die Berechnung und Bildschirm-Aktualisierung während der Ausführung abzuschalten. Das brachte auch etwas an Geschwindigkeit 'Am Anfang Application.Calculation = xlCalculationManual Application.ScreenUpdating = False eigentliches Skript 'Am Ende Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True
@NiceDevil
@NiceDevil Жыл бұрын
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!🎉
@stephanieknuth5703
@stephanieknuth5703 Жыл бұрын
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
@joeberchtold9392
@joeberchtold9392 Жыл бұрын
Hallo Kai. Super Videos :) 😌 Ist es nicht so, dass bei, vorallem grossen Arrays, von Excel viel mehr Speicher zur Verfügung gestellt bzw.reserviert werden muss? Ich habe ein grösseres Projekt, wo möglich, alle Range Anweisungen durch Arrays ersetzt. Nun habe ich das Gefühl, dass Excel vermehrt "keine Rückmeldung" meldet. Die einzelnen Prozeduren laufen jedoch wesentlich schneller. Danke für die Tipps.
@PascalIttermann
@PascalIttermann Жыл бұрын
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?
@ThegrayBall
@ThegrayBall 2 жыл бұрын
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
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Ja, Date und Range dauern etwas länger, bis man sich damit auskennt :) LG Kai
@haraldmau9503
@haraldmau9503 2 жыл бұрын
Hallo Kai möchte einzelne Programme die du ins Netz gestellt hast verbinden schreibe mich an ďas ich das besser erklären kann
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hallo Harald, freut mich, dass dir meine Videos gefallen. Aktuell biete ich eine Zusammenarbeit im Rahmen meiner Coachings an. Falls dich das interessiert, dann schau gerne hier vorbei: vbatrainer.de/coaching/ LG Kai
@kiritokazugaya5871
@kiritokazugaya5871 2 жыл бұрын
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. :)
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hallo Kirito, freu mich, dass dir das Video gefällt. Du könntest dein Programm schneller machen, wenn du die Formeln durch VBA Code ersetzt. Die Ergebnisse der Berechnung speicherst du dann im Array und fügst das Array auf das Tabellenblatt ein. LG Kai
@TheWolke0707
@TheWolke0707 2 жыл бұрын
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?
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hallo Volker, freut mich, dass dir das Video gefällt! Du kannst eine Range in einen Array einlesen über Dim arr as Variant arr = Range("intTabelle[Spalte1]") LG Kai
@PortaliusDe
@PortaliusDe 3 жыл бұрын
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
@yeahnick4260
@yeahnick4260 2 жыл бұрын
Ich habe die Microsoft Liste auch gedownloadet. habe (fast) den selben Code wie du, aber bei mir gibt Ubound an exakt dieser Stelle 9:31 den Wert 700 her und nicht 701. Der einzige Unterschied den wir haben ist, dass meine Range Variable ab Zeile 2 bis "last" arbeitet. Also: Dim arr as Variant Dim Bereich as Range LastX = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row LastY = Tabelle1.Cells(1, 1).End(xlToRight).Column set Bereich = ( Cells(2, 1) , Cells( LastX , LastY) ) Redim arr ( 2 to lastX , 1 to LastY ) arr = Bereich.Value Debug.print LastX = 701 Debug.print Ubound(arr, 1) = 700 Warum ist das so?
@Treti18
@Treti18 Жыл бұрын
Du hast im Array eine Zeile weniger, da du ab Zeile 2 eingelesen hast.
@holgerhessling9481
@holgerhessling9481 2 жыл бұрын
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
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Hallo Holger, freut mich, dass dir das Video gefällt. In deinem Codeausschnitt sehe ich keine Verbesserungsmöglichkeit. Bei vielen Einträgen braucht Excel einfach ein bisschen Zeit. Evtl. kannst du dem Benutzer das aber mit einem Fortschrittsbalken zeigen (erkläre ich hier: kzbin.info/www/bejne/hJq8ZmiCqtJ7aZo). Ich hoffe das hilft dir weiter. LG Kai
@holgerhessling9481
@holgerhessling9481 2 жыл бұрын
@@KaiWeissmann Vielen Dank für Deine rasche Antwort. Die Idee mit dem Fortschrittsbalken funktioniert an dieser Stelle leider nicht, denn der Kopiervorgang bremst/blockiert Excel selbst aus und man verliert die Kontrolle. Man muß einfach abwarten, bis die Sanduhr wieder verschwindet ;-)
@falco1020301
@falco1020301 2 жыл бұрын
Mich würde nun der Hintergrund interessieren. Wieso ist diese Methode schneller ?
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Der Array wird nur im Arbeitsspeicher gespeichert. Änderungen auf dem Tabellenblatt sind immer recht aufwändig für den Computer
@falco1020301
@falco1020301 2 жыл бұрын
@@KaiWeissmann perfekt danke dir :) gibt es denn schon das video was ich letztens gewünscht habe mit den tabellenköpfen direkt ansprechen bei intelligenten Tabellen?
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
@@falco1020301 ein Video zu intelligenten Tabellen gibt es noch nicht. Videos werden bei mir ein paar Monate im voraus geplant. Du kannst hier mal reingucken: kzbin.info/www/bejne/i5-9XqV8ndNgnck&ab_channel=KaiWeissmann Bei 56:50 zeige ich, wie du Tabellenheader einer intelligenten Tabelle ansprechen kannst
@LebenWerden
@LebenWerden 2 жыл бұрын
Gibt es VBA Vererbung?
@KaiWeissmann
@KaiWeissmann 2 жыл бұрын
Klassen können einmal vererben in VBA
@LebenWerden
@LebenWerden 2 жыл бұрын
@@KaiWeissmannGilt das auch für selbsterstellte Klasen?
@yeahnick4260
@yeahnick4260 2 жыл бұрын
Hi Kai, warum machen die meisten Leute auf KZbin ein Array als Variant Datentyp? Reicht String nicht?? LG
@ungetuemer
@ungetuemer 2 жыл бұрын
Schätze die Flexibilität des Variant! 😁
@stefankroemer
@stefankroemer Жыл бұрын
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..
@KaiWeissmann
@KaiWeissmann Жыл бұрын
Vielen Dank für dein Kommentar. Natürlich kommt es immer auch auf den Anwendungsfall an.
Makro ausführen aus externer Datei | Excel VBA
11:39
Kai Weissmann
Рет қаралды 15 М.
Tabelle filtern und kopieren mit dem Autofilter | Excel VBA
12:49
Kai Weissmann
Рет қаралды 28 М.
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 12 МЛН
Watch these 28 minutes if you want to become an Advanced VBA user...
29:01
Excel Macro Mastery
Рет қаралды 55 М.
Variablen und Datentypen: Verwende DIM & SET richtig! | Excel VBA
13:24
How to Use Arrays Instead of Ranges in Excel VBA
10:20
Excel Macro Mastery
Рет қаралды 205 М.
Eigene Messagebox erstellen (mit modernem Design!) | Excel VBA
24:37
EXCEL 10x so schnell durch ChatGPT 🚀
13:26
Programmieren lernen
Рет қаралды 64 М.