Anzeige
Archiv - Navigation
1424to1428
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

Effizienter VBA Code / Multidimensionale Arrays

Effizienter VBA Code / Multidimensionale Arrays
21.05.2015 11:29:50
Moritz
Hallo,
ich stehe vor folgendem Problem, bei dem ein Excel-Sheet (B) von einem anderen Excel-Sheet (A) aus auf korrekten Inhalt geprüft werden soll. Zur Effizienz habe ich folgende Frage, was die elegantere Programmierung ist:
FRAGE 1:
Excel-Sheet (B) enthält zahlreiche Spalten, die überprüft werden müssen. Für jede Überprüfung (10 bis 30) möchte ich eine VBA Funktion anlegen, die jeweils bestimmte Spalten prüft und von einem Main Sub aufgerufen wird. Excel-Sheet (A) öffnet (B) und beginnt dann mit den Checks:
Variante 1 - Im Main Sub von (A) habe ich eine For-Schleife, die durch alle Zeilen (1.000 bis 10.000) von (B) läuft und für jede Zeile die Prüffunktion aufruft. Dabei werden nur die Werte von den relevanten Spalten der entsprechenden Zeile an die Funktion übergeben.
Variante 2 - Im Main Sub von (A) wird die Prüffunktion aufgerufen und in der Prüffunktion wird eine For-Schleife durchlaufen mit den einzelnen Zeilen. Der Zugriff erfolgt immer auf (B).
Variante 3 - Im Main Sub von (A) erstelle ich einen Multidimensionalen Array mit den relevanten Spalten von (B) und übergebe den Array an die Prüffunktion, die dann den Inhalt des Arrays prüft.
FRAGE 2:
Wenn ich in einer Funktion einen multidimensionalen Array erstelle, wie kann ich den im aufrufenden Sub wieder entgegen nehmen, wenn ich vorher nicht weiß, wie groß der Array ist und wie viel Dimensionen er hat? Wie muss ich den Array in der aufrufenden Sub deklarieren?
FRAGE 3:
Wenn ich einen 2 dimensionalen Array nutze mit:
Spalte A - 1
Spalte B - 2
Spalte C - 3
...
Gibt es die Möglichkeit die Zahlen in der "2. Spalte" durch den Namen in der "1. Spalte" direkt zu erhalten?
Bsp:
Array(1,1) = "Spalte A"
Array(1,2) = 1
Array(2,1) = "Spalte B"
Array(2,2) = 2
Array."Spalte A" sollte mir dann den Werte 1 geben. Geht so etwas?
Vielen Dank und viele Grüße
Moritz

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Effizienter VBA Code / Multidimensionale Arrays
21.05.2015 12:30:23
EtoPHG
Hallo Moritz,
Antwort 1: Variante 3
Antwort 2: Als Variant ohne Dimensionierung
Antwort 3: Ist mir nicht klar! Ev. mit Dictionary-Objekt
Gruess Hansueli

Etwas schwer verständlich, aber grundsätzlich ...
21.05.2015 12:40:45
Luc:-?
…gibt's 2 Typen von Arrays, Moritz:
1. normales n-dimensionales VBA-Array, bei dem immer nur die letzte Dimension ReDimensioniert wdn kann;
2. Variant mit einem Array, der 1- bzw n-dimensionale Arrays aufnehmen kann, deren Elemente ebenfalls aus (beliebig langen bzw dimensionierten) Arrays bestehen können.
Du könntest also ein 1dimensionales Typ2-Array anlegen, dessen Elemente aus Zeilen- bzw Spalten­Bereichen eines ZellBereichs bestehen. Mit bspArr(i) sprichst du dann ein solches Element dieses Haupt-Arrays (hier ein Vektor) an, das ebenfalls ein Array (hier auch ein Vektor) ist. Mit bspArr(i)(j) identifizierst du dann ein Element dieses Vektors.
Damit aus den grund­sätzlich 2dimensional vorliegenden Zell­Bereichen 1dimensionale horizontale (!) Vektoren wdn, musst du diese ggf transpo­nieren (Zeilen ggf 2×!). Worksheet­Function.Transpose ist dafür geeignet, hat aber Grenzen!
Mit Typ2 ist das oft vorgeschlagene assoziative Dictionary-Array verwandt; ein ParamArray entspricht Ersterem und mit bspArr = Array(Array(1, 2, 3), Array(4, 5)) kann ein Typ2-Array direkt erzeugt wdn. Außerdem käme für dein Problem evtl noch eine Collection von Range-Objekten infrage.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Effizienter VBA Code / Multidimensionale Arrays
21.05.2015 12:47:55
Daniel
Hi
zu frage 2:
Arrays, die durch das Einlesen von Excelzellen erzeugt werden, sind immer 2-Dimensional.
auch wenn sie mehrere Spalten haben. Das hat nichts mit Multi-dimensionalität zu tun
zu frage 3:
das ist im Prinzip der SVerweis.
funktioniert als Application.VLookUp auch mit Arrays:
Msgbox Application.VLookUp("SpalteA", Array, 2, 0)
Gruß Daniel

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige