Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
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

Mehrdimensionales Array mit Range-Funktion füllen | Herbers Excel-Forum"

Mehrdimensionales Array mit Range-Funktion füllen
29.07.2016 11:32:01
Christian

Hallo,
ich habe ein kleines Problem bei der Befüllung eines mehrdimensionalen Arrays. Kurz zum Hintergrund, ich habe eine Excel Tabelle mit 15 Spalten und einer variablen Anzahl an Zeilen. Aus dieser Tabelle möchte ich bestimmte Zeilen in ein Array schreiben und diese in ein neues Tabellenblatt einfügen. Dies stellt quasi eine Filterfunktion da. Das wollte ich so realisieren, dass ich die erste Spalte der Tabelle in ein Array schreibe und über eine For Each- Schleife ein If-Abfrage mache. Immer wenn die Abfrage wahr ist, dann soll diese Zeile in ein Array geschrieben werden. Somit soll das Array nach und nach gefüllt werden. Nur leider klappt es nicht ganz so, wie ich mir das vorstelle. Hier mein Ansatz, vllt könnt Ihr mir ja weiterhelfen.
arrSystemKey() = wbOpen.Sheets(1).Range("A1:A" & wbOpen.Sheets(1).Cells(wbOpen.Sheets(1).Rows.Count, 1).End(xlUp).row).Value
row = 0
x = 0
For Each element In arrSystemKey()
row = row + 1
If element = wsStart.Range("B2").Value Then
x = x + 1
ReDim Preserve arrShutdowns(1 To x, 1 To 15) As Variant
arrShutdowns(x) = wbOpen.Sheets(1).Range("A" & row & ":O" & row).Value
End If
Next

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrdimensionales Array mit Range-Funktion
29.07.2016 12:18:13
Daniel
Hi
mit ReDim Preserve kannst immer nur die letzte Dimension verändern (bei 2-D-Arrays die Spalten)
die anderen Dimensionen müssen so bleiben wie sie sind, wenn die Daten im Array erhalten bleiben sollen.
Wenn die Anzahl der Zeilen nachträglich geändert werden soll, wird's kompliziert.
Du hast folgende Möglichkeiten:
- man könnte, wenn man mit Preseve arbeiten will, Zeilen und Spalten tauschen (Worksheetfunction.Transpose).
- wenn möglich, ermittelt man vorher die Anzahl der benötigten Zeilen und dimensioniert gleich auf diese Anzahl.
In deinem Fall mit Worksheetfunction.CountIf(wbOpen.Sheets(1).Columns(1), wsStart.Range("B2").Value)

in deinem Fall würde ich das aber anders lösen, denn das zuweisen einzelner Bereiche des Arrays über Range funktioniert bei echten 2-D-Arrays nämlich nicht:
- sortiere die wbOpen.Sheets(1) nach Spalte A, so dass alle benötigten Werte direkt unternander stehen
- weise dann diesem Zellblock dem Array zu:
dim Zeile as Long
dim Zeilen as Long
With wbOpen.Sheets(1)
.Usedrange.Sort Key1:=Cells(1, 1), Order1:=xlascending, Header:=xlguess
Zeile = .Find(what:=wsStart.Range("B2").Value, lookat:=xlwhole).Row
Zeilen = Worksheetfunction.countif(.Columns(1), wsStart.Range("B2").Value)
arrShutDowns = .Cells(Zeile, 1).Resize(Zeilen, 15).Value
End with

eine Lösung, die deiner Idee am nächsten liegt, wäre dass du das Array arrShutdowns nicht als echtest 2-D-Array erstellst, sondern nur als "Pseudo"-2-D Array (ich nenns mal so).
Das wäre dann ein eindimensionales Array, bei dem du an stelle von Einzelwerten ein weiteres Array einsetzt:

dim arrShutDowns(1) as Variant
For Each element In arrSystemKey()
row = row + 1
If element = wsStart.Range("B2").Value Then
x = x + 1
ReDim Preserve arrShutdowns(1 To x) As Variant
arrShutdowns(x) = wbOpen.Sheets(1).Range("A" & row & ":O" & row).Value
End If
Next

gruß Daniel
Anzeige
Dein 'Pseudo'-Array ist seit langem als ...
29.07.2016 16:32:56
Luc:-?
Arrays im/n Array/s bekannt, Daniel,
und fällt unter den 2.VBA-Array-Typ Variant mit einem Array. In anderen PgmmierSprachen, in denen Arrays als Objekte gelten, ist das der Standard, weshalb für JScript das VBA-Array wohl ein besonderer Array-Typ ist. Man kann das auch beim Dictionary sehen, bei dem beides zutrifft - Objekt und mögliche Aufnahme von Arrays als Elemente; stammt ja ursprünglich auch nicht aus VBA (Stichwort: assoziatives Array).
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Dein 'Pseudo'-Array ist seit langem als ...
29.07.2016 16:38:35
Daniel
nein Luc, kein Pseudo-Array, sondern Pseudo-2D.
ist eigentlich ein eindimensionales Array, kann aber teilweise wie ein 2-dimensionales verwendet werden.
daher nicht "Pseudo-Array", sondern "Pseudo-2D".
Gruß Daniel
'Pseudo'-2D ist nur EINE Variante davon, ...
29.07.2016 17:09:35
Luc:-?
…die du auch nicht „erfunden“ hast (nur die Bezeichnung), Daniel,
denn nach deiner Bezeichnungsart gäbe es auch „Pseudo“-3D usw. Was du hier vorschlägst ist der klassische Fall eines vertikal gerichteten Vektors, der horizontal gerichtete Vektoren als Elemente enthält. Einen Spezialfall dazu kannst du hier nachlesen (inkl AbbildungsBesonderheiten). Dazu habe ich schon seit Jahren des Öfteren geschrieben.
Luc :-?
Anzeige
AW: 'Pseudo'-2D ist nur EINE Variante davon, ...
29.07.2016 19:26:34
Daniel
Hi Luc
natürlich hab ich das nicht erfunden, nur verwendet.
ioh habs eigentlich auch gar nicht vorgeschlagen, das Prinzip wurde ja schon verwendet, nur halt mit dem Fehler, das Übergeordnete Array als zweidimensional zu deklarieren, und nicht eindimensional.
Diesen Fehler habe ich korrigiert mehr nicht (und auch nie behauptet, irgendwas erfunden zu haben)
und natürlich gibt's auch ein Pseudo-3-D, warum auch nicht???
dann hängst du eben ein 2-Array als Wert ins übergeordnete Array, also was sollen jetzt deine Bemerkungen?
Ich finde halt, das die Beschreibung "Pseudo-2-D-Array" das Konstrukt vielleicht nicht unbedingt wissenschaftlich exakt, aber doch anschaulich beschreibt.
auch du hast das wahrscheinlich nicht erfunden, sondern auch nur wie ich irgendwann mal erlernt und später weitergegeben, also spiele dich bitte nicht so auf.
Gruß Daniel
Anzeige
Eben, deshalb verwende ich auch die übliche ...
29.07.2016 19:51:44
Luc:-?
…Bezeichnung, Daniel,
während du wohl meinst, das Rad unbedingt immer wieder neu „erfinden“ bzw entdecken zu müssen. Man kann keine VBA-Syntax neu „erfinden“, nur ihre Möglichkeiten entdecken.
Schön, dass du das auch hierbei geschafft hast, wenn auch noch etwas fehlt… :-]
Allerdings hast du das mit dem 3D falsch verstanden, ich meinte ein solches Element: x(i)(j)(k)
Da wäre alles 1dimensional. Du meinst x(i)(j, k), das wäre 1-/2-dimensional.
Luc :-?
AW: Eben, deshalb verwende ich auch die übliche ...
29.07.2016 22:30:59
Daniel
Hi Luc
als wenn du glaubst, dass ich, nur weil ich mir erlaubt habe, das "Rad" mal nicht "Rad" zu nennen, sondern einfach ein "rundes Ding", davon ausgehen würde dass ich es damit auch tatsächlich neu erfunden habe, dann hast du wirklich eine sehr blühende Phantasie.
und nur, weil ich bestimmte Schachen nicht explizit niederschreibe, heißt dass noch lange nicht, dass ich sowas nicht weiß, also lass bitte deine Unterstellungen.
Anzeige
Du neigst doch sonst dazu, alles bis fast ...
30.07.2016 00:25:21
Luc:-?
…auf atomare Ebene hin erklären zu wollen, dann solltest du aber auch die Fachbegriffe kennen… :->
Luc :-?
...bzw wenigstens verwenden! owT
30.07.2016 00:26:18
Luc:-?
:-?
AW: Du neigst doch sonst dazu, alles bis fast ...
30.07.2016 06:17:32
Daniel
Da ich kein Fachmann bin, muss ich auch keine Fachbegriffe verwenden.
Du bist Fachmann, deswege musst du auch immer Fachsprache wie "wdn" verwenden, damit auch alle sofort sehen, dass du Fachmann bist.
Wer nichts wesentlich Neues zu bieten und ...
31.07.2016 05:56:13
Luc:-?
…sonst keine Argumente hat, verlegt sich auf banale Kritik von persönlichen Gewohnheiten und Identifikatoren, dabei sollte man doch lt HWH „…die Eigenheiten eines Antworters respektieren…“. Ich rege mich ja auch nicht ständig über die Einfallslosigkeit deiner Betreffs, die mitunter an Nachäfferei oder zumindest Gedankenlosigkeit denken lassen, und deine relativ häufigen Orthografie­Feh­ler auf.
Wenn du etwas Neues entdeckst, das noch niemals erwähnt, geschweige denn benannt wurde, kannst du dem auch einen Namen geben. Ist es etwas AltBekanntes, verwirrt ein ohne ensthaften Grund vergebener neuer Name nur und schränkt Recherche­Mög­lich­keiten ein.
Morrn, Luc :-?
Anzeige
AW: Luc, deine Betreffs sind ein Einfallslosigkeit
31.07.2016 20:45:18
Daniel
... nicht zu überbieten, weil du eigentlich NIE eigenständige Betreffzeilen schreibst.
Du denkst dir überhaupt keine Betreffs aus, sondern beginnst einfach nur deinen Beitrag in der Betreffzeile beginnst, ohne einen Betreff zu schreiben.
ich habe warscheinlich schon mehr echte Betreffzeilen verfasst als du, denn wie gesagt, einfach nur den ersten Satz in die Betreffzeile zu schreiben ist kein echter Betreff.
Also bitte diesbezüglich Ball flach halten und das „…die Eigenheiten eines Antworters respektieren…“ auch mal selber praktizieren.
Gruß Daniel
Genau das habe ich von dir erwartet! :->
01.08.2016 04:00:53
Luc:-?
Du wirst immer berechenbarer, Allerwertester,
und vor lauter Wut hast du schon in deinem „eigenständigen Betreff“ einen deutlichen Patzer verbockt. Im Text geht's dann so weiter.
Noch'n bissken üben, dann schaffst du es viell irgendwann, Grammatik (und Orthografie) so durcheinander zu bringen, dass dein „Beitrag“ völlig unverständlich wird. :->
Aber ich kann gern, extra für dich, etwas mehr Fantasie aufbringen und auch dir mal einen Limerick widmen…
Übrigens haben oder hatten meine Betreffs auch Fans, nachzulesen im Archiv…
Luc :-?
Anzeige
AW: Genau das habe ich von dir erwartet! :->
01.08.2016 12:28:41
Daniel
gleiches von dir.
solange du nur auf meine Grammatik- und Rechtschreibfehler eingehst, muss ich davon ausgehen, dass du keine weitern Argumente hast und ich daher inhaltlich recht habe.
btw, die Bildzeitung hat auch viele Fans aufgrund ihrer Überschriften.
wenn du dich auf das gleiche Niveau begeben willst, dann darfst du das gerne tun.
Gruß Daniel
BILD-Zeitung, was ist das? Ich ziehe Text vor!
02.08.2016 05:02:57
Luc:-?
Ich hatte meinen Einspruch schon in den 1.BTen begründet, worauf du dann in Unsachlichkeit verfallen bist. Also kann ich deine Erwiderung genausogut auf dich anwenden, womit ich recht hätte und dir nichts anderes mehr einfällt. Und nebenbei (=deutsch für engl bytheway), ich habe damit durchaus recht, da kannst du nochsoviel rumeiern…
Nu iss jut! :-| Luc :-?
Anzeige
fast ein Limerick
02.08.2016 17:59:34
MB12
Zwei Herberianer, jeder einzelne gut,
Doch wenn sie sich kabbeln, erfasst mich die Wut.
Zwei Köpfe gescheit
Warum dann der Streit?
Ergänzt euch doch lieber – dann zög‘ ich den Hut.
Grüßle an Euch beide
Margarete, der man so einiges zutraut
und womit? Mit Recht
Mit 'nicht zutrauen' hatte ich weiland beides ...
02.08.2016 19:27:45
Luc:-?
…gemeint, Margarete,
sowohl technisch als auch absichtlich. Ansonsten traue ich dir ggf alles Mögliche zu… ;-]
Das Andere hat eine längere Vorgeschichte und Ergänzen wird nicht klappen wg grundsätzlich unterschiedlicher Ansichten zu bestimmten Xl-/VBA-Fragen…
Ansonsten, netter Limerick-Versuch… ;-)
Gruß, Luc :-?
Anzeige
Problem gelöst
03.08.2016 11:57:50
Christian
Vielen Dank für Eure zahlreichen Kommentare, es war sehr unterhaltsam. Mein Problem konnte ich übrigens lösen, nur so als Randbemerkung. Danke;-)
AW: Problem gelöst
03.08.2016 12:13:36
Daniel
Hi Christian
dass ich dir hier eine ausführliche Antwort zu deinem Problem gegeben habe, hasst du wahrscheinlich bei der Masse der anderen Beiträge übersehen.
Es wäre schön, wenn du auch dazu ein Feedback geben würdest und nicht zur zum unterhaltsamen Teil.
Gruß Daniel
Entschuldigung
03.08.2016 12:10:33
Christian
Hallo,
ich möchte mich auch hier nochmal für meine späte Rückmeldung und das Versäumen der Verlinkung zu der Lösung des Problems entschuldigen. Das war keine böse Absicht. Ich hoffe Ihr seid nachsichtig mit mir und es kommt auch nicht wieder vor.
Hier der Link:
http://www.ms-office-forum.net/forum/showthread.php?p=1753776#post1753776
Schönen Gruß
Christian

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige