MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 07.12.2018, 05:44   #1
catosan
Neuer Benutzer
Neuer Benutzer
Standard VBA - Wie kann ich diese Tabelle in ein Array einlesen und verarbeiten?

Guten Morgen miteinander,

ich bin neu hier in diesem Forum. Ich wuerde mich als Wald-und-Wiesen-Programmierer einstufen, weil ich fuer die folgende Fragestellung leider nur einen simplen Weg kenne. Zelle fuer Zelle einlesen und vergleichen.
Ein relativ einfach gestricktes Beispiel habe ich als Anhang hochgeladen. In Wirklichkeit sind die Tabellen sehr viel groesser.

Es geht um die Auswertung dieser Tabelle.
Wer hat noch wie viel Resturlaub? Wer mehr als 10 Tage hat soll die Zellenfarbe gruen bekommen.
Wer ist vor 1980 geboren? Das Ergebnis soll farbig (Zellefarbe rot) dargestellt werden.
usw.

Das sind jetzt willkuerliche Fragen, aber damit denke ich, kann ich Euch mein Wehwehchen darstellen.
Ich kann bis jetzt nur die For-Schleifen verschachteln und laufen lassen, mit If... abfragen und die Aktion dazu definieren. Fuer Tabellen die viel groesser sind, ist mein Weg einfach zu langsam. Und wenn dann noch komplexer wird, komme ich nicht mehr weit.
Kann ich mit Arrys die Berechnungszeit reduzieren?

Vielen dank vorab und ich hoffe auf zahlreiche Inspirationen.

Catosan
Angehängte Dateien
Dateityp: xlsm Mappe2.xlsm (8,7 KB, 12x aufgerufen)
catosan ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 05:49   #2
Werner.M
MOF User
MOF User
Standard

Hallo,

und warum nicht mit bedingter Formatierung?

Gruß Werner
Werner.M ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 08:42   #3
catosan
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Werner,

wie gesagt, das Beispiel ist simple.
Aber die reellen Daten sind viel mehr und auch die Auswertung ist extrem kompliziert. Daher scheidet die bedingte Formatierung aus.

VG

Catosan
catosan ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 08:54   #4
erpe
MOF Profi
MOF Profi
Standard

Hallo,

Zitat:

die reellen Daten sind viel mehr und auch die Auswertung ist extrem kompliziert

Oh wichtig! Geheimniskrämer!
Muss es denn unbedingt VBA sein?
Die meisten Aufgabenstellungen lassen sich mit Bordfunktionen berechnen.
Was hindert dich die Daten zu berechnen und mit dem Filter anzuzeigen?
Die Schritte können mit dem Rekorder aufgezeichnet werden.

Gruß
Rainer
erpe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 09:01   #5
Mc Santa
MOF Meister
MOF Meister
Standard

Hallo,

Folgendes musst du wissen: Werte aus Zellen lesen und in Zellen schreiben kostet Zeit. Formatierungen einer Zelle kostet Zeit. Allerdings dauert das Auslesen von 100000 Zellen gleichzeitig nur ein wenig länger als eine Zelle und auch die Formatierung von 100000 Zellen gleichzeitig dauert nur ein wenig länger als für eine einzelne Zelle.

Du gehst also wie folgt vor:
Zunächst alle Daten in einem Array einlesen:
Code:

arIn = Range("A1:Z1000")
und anschließend nur noch mit diesem Array arbeiten
Code:

If arIn(1, 2) = 5 then
Wenn du die Daten auch wieder zurück in die Tabelle schreiben musst, kannst du genauso vorgehen, allerdings werden dann _alle_ Werte neu geschrieben, also Achtung bei Formeln, die gehen dann verloren.

Formatierungen hingegen sind etwas aufwendiger, aber auch hier können wir über gleichzeitige Formatierung Zeit sparen:
Statt eine Zelle direkt zu färben, würdest du in der Schleife nur alle Bereiche in einer Variable speichern:
Code:

Dim rngSave as Range
For .....
If arIn(i, 5) = "Axel" Then
rngSave = Union(rngSave, Cells(i,5))
Next .....

rngSave.Format
Hilft dir diese grobe Beschreibung weiter?

VG, Santa

__________________

Nützliches
Wie erstelle ich eine Pivot-Tabelle? (Link)
Alternative (Link ohne YouTube)

Du kannst hilfreiche Beiträge bewerten (Symbol unten links)
Mc Santa ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 09:48   #6
catosan
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo miteinander,

es ist keine Geheimniskraemerei. Ihr versteht sicher, dass die Fragensteller im Forum keine echten Daten posten.
Aber es sind wirklich jede Menge Daten. Es sind ca. 60T-70T Zellen, die ich mit der Prozedur abarbeiten muss.
Daher kam mir in den Sinn, das ueber ein Array zu versuchen.
Das ist alles.

VG
catosan ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 09:50   #7
catosan
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Santa,

etwas komme ich weiter. Aber was bedeutet am Ende ...Format. Wozu dient dieser Befehl?

VG
catosan ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.12.2018, 10:02   #8
Mc Santa
MOF Meister
MOF Meister
Standard

Zitat: von catosan Beitrag anzeigen

etwas komme ich weiter. Aber was bedeutet am Ende ...Format. Wozu dient dieser Befehl?

Sorry, das ist kein echter Befehl, ich wollte andeuten, dass du an dieser Stelle den Code zum Formatieren einfügen sollst, also zb:

Code:

With rngSave.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With

__________________

Nützliches
Wie erstelle ich eine Pivot-Tabelle? (Link)
Alternative (Link ohne YouTube)

Du kannst hilfreiche Beiträge bewerten (Symbol unten links)
Mc Santa ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.12.2018, 03:51   #9
catosan
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Santa,

ich verstehe, dass die Formatierung bzw. das Lesen/Schreiben der Zellen eine gewisse Zeit benoetigt.
Was waere, wenn ich meine Daten gruppieren wuerde?
Also zB. Alle mit Resturlaub > 10 Tage in eine Gruppe.
Ich habe das Konstrukt im Kopf, dass ich
a) die ganze Tabelle in ein Array einlese
b) den Vergleich im Array mache
c) das Ergebnis in ein weiteres Array schreibe
d) zum Abschluss schreibe ich das Array in eine andere Tabelle und formatiere mit dem Range-Befehl.

Schritt D kann ich. Schritte A bis C leider nicht.
Hast Du einen Code mit dem so was funktioniert?
Danke vorab

VG

Catosan
catosan ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.12.2018, 09:58   #10
Klaus-Dieter
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

Zitat:

Ihr versteht sicher, dass die Fragensteller im Forum keine echten Daten posten.

natürlich. Allerdings sollten die Beispieldaten schon so strukturiert sein wie im Original, sonst ist es schwierig eine Lösung zu finden.

__________________


Viele Grüße Klaus-Dieter

Klaus-Dieter's Excel und VBA Seite
Klaus-Dieter ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.12.2018, 11:44   #11
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Wer hat noch wie viel Resturlaub? Wer mehr als 10 Tage hat soll die Zellenfarbe gruen bekommen.
Wer ist vor 1980 geboren? Das Ergebnis soll farbig (Zellefarbe rot) dargestellt werden.
usw.

Denkfrage: Die Summe aus grün und rot und weiteren Farben aus erfüllten Bedingungen ergibt was? Dein User kann diesen Regenbogen intuitiv auswerten, dies dann auch bei den 60.000 Zeilen im Überblick?

Pragmatisch wäre, eine geeignete Filterung und nachfolgende Sortierung auf die Gesamtliste aufzubauen, so dass man gleich und nur die Datensätze sieht, die einen im Augenblick interessieren.
Mit den richtigen Methoden geht das sehr schnell, auf Farbspielereien könnte man sicher in größtem Maße verzichten.
Power Query wäre für solche Datenbankaufgaben ein gutes Stichwort.

Meine Antwort berücksichtigt jetzt nicht, ob Du aus Prinzip und zur Übung Codespielereien in den genannten Bereichen anwenden willst.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (08.12.2018 um 12:33 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.12.2018, 12:57   #12
catosan
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo zusammen,
ich sehe ein, dass Ihr mehr Infos braucht, um zu verstehen, was ich benoetige.
Jede Woche bekomme ich 3x diese Daten zum bearbeiten. Dabei muss ich diese Daten je nach Kennzeichen in Spalte B in separate Tabellen kopieren. Zum Beispiel:
- Wenn Zelle B3 ein X enthaelt, wird die ganze Zeile 3 in die Tabelle X kopiert.
Danach muss ich diese aufgespaltene Daten weiterverarbeiten.
ZB. Wann sind diese Datensaetze in der Datenbank angelegt worden und wie lange sind die schon drin. Das ist eine der Aufgaben, die ich abarbeiten muss.
Daher ist ein Makro sehr nuetzlich. Die Aufgaben wiederholen sich 3x in der Woche und manuell einfach zu viel und vorallem zu langsam.
Die Daten enthalten also Datumsabgaben, Texte, Zahlen,...
Und jeder Datensatz enthaelt ca. 1500 Zeilen und um die 40 Spalten.
Ich habe fuer diese Aufgabenstellung bereits ein Makro geschrieben. Aber eben ohne Arrays. Und es dauert halt...
Ich wuerde so gerne das mittels Arrays umsetzen, falls es geht.

VG

Catosan
catosan ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.12.2018, 13:09   #13
Drogist
MOF Profi
MOF Profi
Standard

Moin,
ich denke, dass du da mit Power Query in Sachen GESAMT-Performance sehr gut bedient sein wirst ...
Ausprobieren kann ich es nicht, da ich keine VBA-behafteten Files aus dem Netz herunterlade.

__________________

Internette Grüße
Drogist

(Gut) Gefunden bei Storax: "This isn't a code writing service, you need to do some research and have a go at writing some of your own code."
Ich verwende Excel 2016. Wenn du keine Angaben über deine Version gemacht hast gehe ich davon aus, dass auch du mindestens diese Version hast.

¿¿ Wer schützt mich vor den Datenschützern ??
Drogist ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.