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

Mehrdimensionale Arrays

Mehrdimensionale Arrays
18.04.2021 17:05:52
Jürgen
Hi Leute,
ich denke ich stehe mal wieder auf der Leitung.
Ist es in VBA möglich ein solches statisches Array zu erstellen.
Am liebsten als Konstante, eine Variable müsste ich wieder befüllen.
xDays = Array("Mo", "$B$2", 2, 2); "Mo_B", "$B$3", 3, 2;"Mo_E", "$B$4", 4, 2;"Mo_X", "$B$12", 12, 2)
In dem Beispiel wäre das dann xDays = Array(4,4), aber eben mit den unterschiedlichen Datentypen in den Elementen.
Ist das in VBA überhaupt möglich ?

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrdimensionale Arrays
18.04.2021 17:24:44
Oberschlumpf
Hi Jürgen,
exakt was für Datentypen soll denn dein Array enthalten?
Ich weiß auch nicht, ob es möglich ist: Inhalt Array = unterschiedl. Datentypen
Angenommen es ist nicht möglich:
Wieso verwendest du nicht die Datentypkonvertierungsfunktionen wie z Bsp CDate(), CStr(), CDbl() usw?
Dazu mögliche Antwort: Weil du vielleicht auf der Leitung stehst? :-)
Ciao
Thorsten
AW: Mehrdimensionale Arrays
18.04.2021 18:02:02
Jürgen
Hi Thorsten.
Ok, das ganze ist etwas umfangreicher.
Das 1. Array
("Mo", $B$2 , 2 ,2),("Mo_B", $B$3 , 3 ,2),("Mo_E", $B$4 , 4 ,2),("Mo_X", $B$12, 12,2), _
("Di", $B$14, 14,2),("Di_B", $B$15, 15,2),("Di_E", $B$16, 16,2),("Di_X", $B$24, 24,2), _
("Mi", $B$26, 26,2),("Mi_B", $B$27, 27,2),("Mi_E", $B$28, 28,2),("Mi_X", $B$36, 36,2), _
("Do", $B$38, 38,2),("Do_B", $B$39, 39,2),("Do_E", $B$40, 40,2),("Do_X", $B$48, 48,2), _
("Fr", $B$50, 50,2),("Fr_B", $B$51, 51,2),("Fr_E", $B$52, 52,2),("Fr_X", $B$60, 60,2), _
("Sa", $B$62, 62,2),("Sa_B", $B$63, 63,2),("Sa_E", $B$64, 64,2),("Sa_X", $B$66, 66,2), _
("So", $B$68, 68,2),("So_B", $B$69, 69,2),("So_E", $B$70, 70,2),("So_X", $B$72, 72,2)
2. Array
("SumTageWoche", $A$75, 75, 1, "=ANZAHL(A2:A74)"), _
("SumZeitWoche" , $A$77, 77, 1, "=A75*Time_Day"), _
("RealZeitWoche", $D$78, 78, 4, "=SUMME(Mo_X;Di_X;Mi_X;Do_X;Fr_X)"), _
("difZeitWoche" , $D$79, 79, 4, "= eine Formel, die wa zu lang "), _
("PauseZeitWoche", $D$80, 80, 4, "= eine Formel, die wa zu lang "), _
("'ÜberZeitWoche", $D$81, 81, 4, "= eine Formel, die wa zu lang "), _
("'Sum5Days", $G$78, 78, 7, "=SUMME(G60;G48;G36;G24;G12)"), _
("SumProj5Days", $J$78, 78,10, "=SUMME(J12;J24;J36;J48;J60)"), _
("Cnt_V", $D$84, 84,4, "=ZÄHLENWENN(A2:A72;""V"")"), _
("Cnt_SL", $D$85, 85,4, "=ZÄHLENWENN(A2:A72;""SL"")"), _
("Cnt_HO", $D$86, 86,4, "=ZÄHLENWENN(A2:A72;""HO"")")
Das sind alles Namen(String) / Referenzen(auch String) / Zeilen(Integer) / Spalten(Integer) / Formeln(String)" die ich in meinem Code verwende.
Wenn ich jetzt was ändere; z.B. an den Zahlen (Zeile / Spalte) oder eine Formel; will ich das nur an eine zentralen Stelle machen.
Gut ich könnte Konstanten verwenden, d.h. es wären bei Array1 4*4*7 Konstanten, das ist mir zu viel, und ich finde auch zu unübersichtlich.
Mit diesem Array möchte ich mehrere Sheets überprüfen, genauer gesagt alle benannten Zellen, das sind derzeit über 1800.
Anzeige
AW: Mehrdimensionale Arrays
18.04.2021 18:10:38
Oberschlumpf
Hi,
hmm?...und wer überträgt dein Umfangreicheres nun SO in eine Bsp-Datei, dass man anhand der Bsp-Datei mit Bsp-Daten dein Problem erkennen kann?
Und dann wäre ein Upload der Bsp-Datei auch shcön.
Ciao
Thorsten
AW: Mehrdimensionale Arrays
18.04.2021 18:12:11
onur
Schreibe diese doch so (neben- und utereinander) in Eine Tabelle, wobei die Formeln als Text formattiert sein müssen.
Dann kannst du sie in einem Rutsch in Arrays packen.
AW: Mehrdimensionale Arrays
18.04.2021 18:15:32
Oberschlumpf
Hi nochmal,
auf die Gefahr hin, dass du mich vielleicht falsch verstanden hast.
Bitte zeig uns in der Bsp-Datei - nicht - genau das, was du mir zuvor geantwortet hast.
Bitte zeig uns per Upload eine Bsp-Datei, die Bsp-Daten enthält, dass es in Art und Weise, Aufbau, usw genau so aussieht, wie in deiner Originaldatei.
Einziger Unterschied: die Originaldaten wurden durch Bsp-Daten ersetzt.
Ciao
Thorsten
Anzeige
MatrixKonstanten statt mehrdimensionalen Arrays
19.04.2021 03:40:26
Luc:-?
Leider hast du deine Bspp weder VBA.Array-gerecht noch als in definierten Xl-Namen verwendbare MatrixKonstanten geschrieben, Jürgen,
so dass ich trotz vorhandener Hilfsmittel noch etwas manuelle Arbeit investieren musste, um deine Vorgaben Xl- bzw VBA-tauglich zu machen. Auch ZellAdressen sind nämlich Texte und müssen deshalb auch so angegeben wdn. Eher sind die $$ verzichtbar. Als reine Adresse sind sie in MxKonstanten nicht verwendbar, da sie bzw ihre Zielwerte nicht als konstant gelten können. Auch für Range(…) mit ZellAdresse wdn sie in TextForm benötigt, übrigens ebenso wie in Xl definierte Namen.
Ich habe also MatrixKonstanten in US-Notation erzeugt, die mit der VBA-Methode Evaluate ausgewertet wdn können. Falls du sie lieber in Xl unter definierten Namen halten willst, musst du die Kommata durch Punkte ersetzen. Ansonsten wäre es ggf sinnvoll, die lokal-deutschen Fmln durch US-OriginalFmln zu ersetzen, dann könnten sie auch international verwendet wdn und sei es nur zum Vergleichen. Außerdem ließen sie sich so ebenfalls mit Evaluate auswerten.
defN-Vorschlag - 1.MatrixKonstanten:
MxK1_1 {"Mo","$B$2",2,2;"Mo_B","$B$3",3,2;"Mo_E","$B$4",4,2;"Mo_X","$B$12",12,2}
MxK1_2 {"Di","$B$14",14,2;"Di_B","$B$15",15,2;"Di_E","$B$16",16,2;"Di_X","$B$24",24,2}
MxK1_3 {"Mi","$B$26",26,2;"Mi_B","$B$27",27,2;"Mi_E","$B$28",28,2;"Mi_X","$B$36",36,2}
MxK1_4 {"Do","$B$38",38,2;"Do_B","$B$39",39,2;"Do_E","$B$40",40,2;"Do_X","$B$48",48,2}
MxK1_5 {"Fr","$B$50",50,2;"Fr_B","$B$51",51,2;"Fr_E","$B$52",52,2;"Fr_X","$B$60",60,2}
MxK1_6 {"Sa","$B$62",62,2;"Sa_B","$B$63",63,2;"Sa_E","$B$64",64,2;"Sa_X","$B$66",66,2}
MxK1_7 {"So","$B$68",68,2;"So_B","$B$69",69,2;"So_E","$B$70",70,2;"So_X","$B$72",72,2}
defN-Vorschlag - 2.MatrixKonstanten:
MxK2_01 {"SumTageWoche","$A$75",75,1,"=ANZAHL(A2:A74)"}
MxK2_02 {"SumZeitWoche","$A$77",77,1,"=A75*Time_Day"}
MxK2_03 {"RealZeitWoche","$D$78",78,4,"=SUMME(Mo_X;Di_X;Mi_X;Do_X;Fr_X)"}
MxK2_04 {"difZeitWoche","$D$79",79,4,"=eine zu lange Formel"}
MxK2_05 {"PauseZeitWoche","$D$80",80,4,"=eine zu lange Formel"}
MxK2_06 {"'ÜberZeitWoche","$D$81",81,4,"=eine zu lange Formel"}
MxK2_07 {"'Sum5Days","$G$78",78,7,"=SUMME(G60;G48;G36;G24;G12)"}
MxK2_08 {"SumProj5Days","$J$78",78,10,"=SUMME(J12;J24;J36;J48;J60)"}
MxK2_09 {"Cnt_V","$D$84",84,4,"=ZÄHLENWENN(A2:A72;""V"")"}
MxK2_10 {"Cnt_SL","$D$85",85,4,"=ZÄHLENWENN(A2:A72;""SL"")"}
MxK2_11 {"Cnt_HO","$D$86",86,4,"=ZÄHLENWENN(A2:A72;""HO"")"}
Man könnte zwar alle einzelnen MxKonstanten einer Art zu nur einer zusammenfassen, aber die wäre dann sowohl für definierte Namen als auch Evaluate zu lang. Die 1.MxKonstanten wären zusammengefasst eigentlich 3dimensional, können aber auch (wie hier angedeutet) als 2dimensionale Elemente eines 1dimensionalen Vektors, der dann einem Tensor(1,0) entsprechen würde (automatisch vertikal gerichtet), angelegt wdn. Die Einzelwerte müssten in VBA dann so indiziert wdn: MxK1(i)(j,k)
Die 2.MxKonstanten bilden zusammengefasst ein 2dimensionales Array, das aber ebenfalls in TensorForm aufgebaut wdn kann (Vorteil: leichter handhabbar). Den Elementen des Vektors wdn dann eben nur Kovektoren zugeordnet, so dass sich ein 2stufiger Tensor(1,1) ergibt, dessen EinzelWerte so indiziert wdn: MxK2(i)(j)
Die gezeigten MxKonstanten sind formal richtig und liefern mit entsprd Hilfsmitteln (wie bspw der UDF TensEx) auch reguläre Einträge in ZellBereiche.
Anmerkung: Natürlich kann es durchaus sein, dass man dein Vorhaben insgesamt auch anders und effizienter lösen könnte, aber dazu wissen wir zuwenig darüber…
Morhn, Luc :-?
Anzeige
AW: Mehrdimensionale Arrays
18.04.2021 17:35:13
Nepumuk
Hallo Jürgen,
als Konstante geht das nicht.
Gruß
Nepumuk
AW: Mehrdimensionale Arrays
18.04.2021 18:20:06
Jürgen
Hi Nepumuk,
Nö, das sind mir zu viele (Antwort siehe oben)
Eigentlich war meine Idee mit einem eigenen Datentyp.

Public Type tData
Name As String
Address As Range
Row As Integer
Col As Integer
End Type

Und das in einem Array, ist aber da dann scheinbar nur mit dynamischem Array möglich (ReDim),
d.h. ich müsste das erst initialisieren, also Werte eintragen.
Mein Problem, ich kenne div. andere Sprachen (C#,Pascal, ...), da ist das dann möglich, oder eben auch nicht.
Und das ist meine Kernfrage.
---
Ach, kann ich das über ein Klasse machen ?
Anzeige
AW: Mehrdimensionale Arrays
18.04.2021 18:38:48
Nepumuk
Hallo Jürgen,
am einfachsten, das Ganze in eine Tabelle schreiben und das dann auf einen Schlag in ein Variant-Array einlesen. Als benutzerdefinierter Datentyp bauchst du auch in einer Klassen ziemlich viele Programmzeilen. Minimum 4 pro Arrayelement.
Gruß
Nepumuk
AW: Mehrdimensionale Arrays
18.04.2021 18:53:28
Jürgen
Hier mal ein Beispiel-Code
On Error Resume Next
' prüfen, ob dieser Bereichsname existiert
If Range("Cnt_V") Is Nothing Then
' ... nein, dann neu anlegen
xSh.Names.Add Name:="Cnt_V", RefersTo:=xSh.Cells(84, 4)
End If
On Error GoTo 0
' hier verwende ich die beiden (in dem Fall) Konstanten 84 und 4 (je 2 mal)
' => wenn ich das irgend wie mal ändern muss, dann will ich das nicht im Code,
' sondern bei den zentralen "Deklarationen"
If Range("Cnt_V").Row <> 84 Or Range("Cnt_V").Column <> 4 Then _
xSh.Names("Cnt_V").RefersToLocal = "='" & xSh.Name & "'!" & Cells(84, 4).Address
' hier prüfe ich, ob die Formel in der Zelle auch noch richtig ist
' => bei Anderungen muss ich das hier jetzt 3 mal im Code anpassen/ändern,
' das wärte stark Fehleranfällig.
If Not Range("Cnt_V").HasFormula Then Range("Cnt_V").FormulaLocal = "=ZÄHLENWENN(A2:A72;""V"")"
If Range("Cnt_V").FormulaLocal <> "=ZÄHLENWENN(A2:A72;""V"")" Then Range("Cnt_V").FormulaLocal = "=ZÄHLENWENN(A2:A72;""V"")"
Anzeige
AW: Mehrdimensionale Arrays
18.04.2021 18:58:52
Jürgen
mit C# wäre das dann so
var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};
das ist dann ein 2 * 2 Array mit unterschidelichen Datentypen in den Items
geht sowas auch in VBA ?
AW: Mehrdimensionale Arrays
18.04.2021 21:07:36
Daniel
Hi
ja, sowas sollte auch in VBA gehen:

dim x as variant
x = Array(Array("apple", 1), Array("grape", 4))
Ist allerdings kein echtes 2-D-Array, sondern ein 1-D-Array mit weiteren 1-D-Arrays als Werten.
Dementsprechend erfolgt die Ansprache der Einzelwerte nicht mit x(1, 1) sondern mit x(1)(1)
Per Transponieren kann man dann ein echtes 2-D-Array daraus machen.
Wenn du dir ein solches Konstrukt als Code anschauen willst, kannst auch mal Text_in_Spalten ausführen und mit dem Recorder aufzeichnen.
Wenn du dabei die Einstellung "Feste Breite" wählst, werden die Spaltenbreiten und formatierungsarten in so einem Array hinterlegt.
Wenn es konstante Werte sein sollen die dieses Array bekommt, würde ich auch empfehlen, diese in einer Exceltabelle zu hinterlegen und von dort ins Array zu über nehmen.
Gruß Daniel
Anzeige
AW: Mehrdimensionale Arrays
18.04.2021 17:45:37
onur
xDays = Array("Mo", "$B$2", 2, 2); "Mo_B", "$B$3", 3, 2;"Mo_E", "$B$4", 4, 2;"Mo_X", "$B$12", 12, 2) ?
Ist die Klammer hinter "2,2" errnst gemeint?
"In dem Beispiel wäre das dann xDays = Array(4,4)" - Erläutere mal die Logik dieser Aussage.
Kannst du mal die einzelnen Elemente des Arrays neben- und untereinander schreiben, damit man weiss, was du meinst?
AW: Mehrdimensionale Arrays
18.04.2021 17:58:54
Oberschlumpf
Hi Jürgen,
...neben- und untereinander...am besten bitte in einer Excel-Datei per Upload - darin geht neben- und untereinander viel, viel besser als hier im Forum - danke.
Ciao
Thorsten
AW: Mehrdimensionale Arrays
18.04.2021 20:21:28
onur
Ignoriere doch einfach weiter Antworten, die du bekommst, und halte weiterhin Monologe, wo du nie gestellte Fragen beantwortest - das wird bestimmt helfen.
Anzeige
AW: Mehrdimensionale Arrays
19.04.2021 12:30:59
Jürgen
Hi Leute.
Erstmal Danke für die vielen Antworten.
Ich habs jetzt gelöst.
DAS IST IN VBA NICHT MÖGLICH !
Eigentlich war das von mir eine einfache Frage, die jedoch mit div. geforderten Beispielen (in einer Tabelle, was ja nicht meine Frage war) ausgeartet ist.
Einzig Daniel hat meine Frage soweit direkt verstanden,

ja, sowas sollte auch in VBA gehen:
dim x as variant
x = Array(Array("apple", 1), Array("grape", 4))
Ist allerdings kein echtes 2-D-Array, sondern ein 1-D-Array mit weiteren 1-D-Arrays als Werten.
Dementsprechend erfolgt die Ansprache der Einzelwerte nicht mit x(1, 1) sondern mit x(1)(1)
Per Transponieren kann man dann ein echtes 2-D-Array daraus machen.
und der Ansatz mit der Matrix (was aber dann zu Kompliziert war), aber Danke nochmal an alle.
Aufgrund der div. Programiersprachen mit denen ich so arbeite, war ich mir nicht sicher ob das was
z.B. in Visual Basic machbar ist, auch in VBA so läuft.
NEIN, das tut es nicht, VBA ist halt kein VB oder C#.
Meine Lösung, oder das was in VBA machbar ist ...

Public Type tData
Name As String
Address As String
Row As Integer
Col As Integer
End Type
Public xDays(7, 4) As tData
Public x_Days As Variant
Sub set_Arrays()
' Variante 1
If (xDays(1, 1).Name) = "" Then
xDays(1, 1).Name = "Mo":   xDays(1, 1).Address = "$B$2":  xDays(1, 1).Row = 2:  xDays(1, 1). _
Col = 2 ' ("Mo"  , $B:$2 , 2 ,2)
xDays(1, 2).Name = "Mo_B": xDays(1, 2).Address = "$B$3":  xDays(1, 2).Row = 3:  xDays(1, 2). _
Col = 2 ' ("Mo_B", $B:$3 , 3 ,2)
xDays(1, 3).Name = "Mo_E": xDays(1, 3).Address = "$B$4":  xDays(1, 3).Row = 4:  xDays(1, 3). _
Col = 2 ' ("Mo_E", $B:$4 , 4 ,2)
xDays(1, 4).Name = "Mo_X": xDays(1, 4).Address = "$B$12": xDays(1, 4).Row = 12: xDays(1, 4). _
Col = 2 ' ("Mo_X", $B:$12, 12,2)
xDays(2, 1).Name = "Di":   xDays(2, 1).Address = "$B$14": xDays(2, 1).Row = 14: xDays(2, 1). _
Col = 2 ' ("Di"  , $B:$14, 14,2)
xDays(2, 2).Name = "Di_B": xDays(2, 2).Address = "$B$15": xDays(2, 2).Row = 15: xDays(2, 2). _
Col = 2 ' ("Di_B", $B:$15, 15,2)
xDays(2, 3).Name = "Di_E": xDays(2, 3).Address = "$B$16": xDays(2, 3).Row = 16: xDays(2, 3). _
Col = 2 ' ("Di_E", $B:$16, 16,2)
xDays(2, 4).Name = "Di_X": xDays(2, 4).Address = "$B$24": xDays(2, 4).Row = 24: xDays(2, 4). _
Col = 2 ' ("Di_X", $B:$24, 24,2)
xDays(3, 1).Name = "Mi":   xDays(3, 1).Address = "$B$26": xDays(3, 1).Row = 26: xDays(3, 1). _
Col = 2 ' ("Mi"  , $B:$26, 26,2)
xDays(3, 2).Name = "Mi_B": xDays(3, 2).Address = "$B$27": xDays(3, 2).Row = 27: xDays(3, 2). _
Col = 2 ' ("Mi_B", $B:$27, 27,2)
xDays(3, 3).Name = "Mi_E": xDays(3, 3).Address = "$B$28": xDays(3, 3).Row = 28: xDays(3, 3). _
Col = 2 ' ("Mi_E", $B:$28, 28,2)
xDays(3, 4).Name = "Mi_X": xDays(3, 4).Address = "$B$36": xDays(3, 4).Row = 36: xDays(3, 4). _
Col = 2 ' ("Mi_X", $B:$36, 36,2)
xDays(4, 1).Name = "Do":   xDays(4, 1).Address = "$B$38": xDays(4, 1).Row = 38: xDays(4, 1). _
Col = 2 ' ("Do"  , $B:$38, 38,2)
xDays(4, 2).Name = "Do_B": xDays(4, 2).Address = "$B$39": xDays(4, 2).Row = 39: xDays(4, 2). _
Col = 2 ' ("Do_B", $B:$39, 39,2)
xDays(4, 3).Name = "Do_E": xDays(4, 3).Address = "$B$40": xDays(4, 3).Row = 40: xDays(4, 3). _
Col = 2 ' ("Do_E", $B:$40, 40,2)
xDays(4, 4).Name = "Do_X": xDays(4, 4).Address = "$B$48": xDays(4, 4).Row = 48: xDays(4, 4). _
Col = 2 ' ("Do_X", $B:$48, 48,2)
xDays(5, 1).Name = "Fr":   xDays(5, 1).Address = "$B$50": xDays(5, 1).Row = 50: xDays(5, 1). _
Col = 2 ' ("Fr"  , $B:$50, 50,2)
xDays(5, 2).Name = "Fr_B": xDays(5, 2).Address = "$B$51": xDays(5, 2).Row = 51: xDays(5, 2). _
Col = 2 ' ("Fr_B", $B:$51, 51,2)
xDays(5, 3).Name = "Fr_E": xDays(5, 3).Address = "$B$52": xDays(5, 3).Row = 52: xDays(5, 3). _
Col = 2 ' ("Fr_E", $B:$52, 52,2)
xDays(5, 4).Name = "Fr_X": xDays(5, 4).Address = "$B$60": xDays(5, 4).Row = 60: xDays(5, 4). _
Col = 2 ' ("Fr_X", $B:$60, 60,2)
xDays(6, 1).Name = "Sa":   xDays(6, 1).Address = "$B$62": xDays(6, 1).Row = 62: xDays(6, 1). _
Col = 2 ' ("Sa"  , $B:$62, 62,2)
xDays(6, 2).Name = "Sa_B": xDays(6, 2).Address = "$B$63": xDays(6, 2).Row = 63: xDays(6, 2). _
Col = 2 ' ("Sa_B", $B:$63, 63,2)
xDays(6, 3).Name = "Sa_E": xDays(6, 3).Address = "$B$64": xDays(6, 3).Row = 64: xDays(6, 3). _
Col = 2 ' ("Sa_E", $B:$64, 64,2)
xDays(6, 4).Name = "Sa_X": xDays(6, 4).Address = "$B$66": xDays(6, 4).Row = 66: xDays(6, 4). _
Col = 2 ' ("Sa_X", $B:$66, 66,2)
xDays(7, 1).Name = "So":   xDays(7, 1).Address = "$B$68": xDays(7, 1).Row = 68: xDays(7, 1). _
Col = 2 ' ("So"  , $B:$68, 68,2)
xDays(7, 2).Name = "So_B": xDays(7, 2).Address = "$B$69": xDays(7, 2).Row = 69: xDays(7, 2). _
Col = 2 ' ("So_B", $B:$69, 69,2)
xDays(7, 3).Name = "So_E": xDays(7, 3).Address = "$B$70": xDays(7, 3).Row = 70: xDays(7, 3). _
Col = 2 ' ("So_E", $B:$70, 70,2)
xDays(7, 4).Name = "So_X": xDays(7, 4).Address = "$B$72": xDays(7, 4).Row = 72: xDays(7, 4). _
Col = 2 ' ("So_X", $B:$72, 72,2)
End If
' Variante 2
x_Days = Array(Array(1, Array("Mo", "$B$2", 2, 2), Array("Mo_B", "$B$3", 3, 2), Array("Mo_E",  _
"$B$4", 4, 2), Array("Mo_X", "$B$12", 12, 2)), _
Array(2, Array("Di", "$B$14", 14, 2), Array("Di_B", "$B$15", 15, 2), Array(" _
Di_E", "$B$16", 16, 2), Array("Di_X", "$B$24", 24, 2)), _
Array(3, Array("Mi", "$B$26", 26, 2), Array("Mi_B", "$B$27", 27, 2), Array(" _
Mi_E", "$B$28", 28, 2), Array("Mi_X", "$B$36", 36, 2)), _
Array(4, Array("Do", "$B$38", 38, 2), Array("Do_B", "$B$39", 39, 2), Array(" _
Do_E", "$B$40", 40, 2), Array("Do_X", "$B$48", 48, 2)), _
Array(5, Array("Fr", "$B$50", 50, 2), Array("Fr_B", "$B$51", 51, 2), Array(" _
Fr_E", "$B$52", 52, 2), Array("Fr_X", "$B$60", 60, 2)), _
Array(6, Array("Sa", "$B$62", 62, 2), Array("Sa_B", "$B$63", 63, 2), Array(" _
Sa_E", "$B$64", 64, 2), Array("Sa_X", "$B$66", 66, 2)), _
Array(7, Array("So", "$B$68", 68, 2), Array("So_B", "$B$69", 69, 2), Array(" _
So_E", "$B$70", 70, 2), Array("So_X", "$B$72", 72, 2)))
End Sub
Beide Versionen funktionieren, ich bevorzuge da aber dann Variante 1 (xDays).
Meine Erkenntnis, in VBA muss ich halt ein Array immer erst BEFÜLLEN, ist nicht STATISCH definierbat (incl. Werte),
und das war meine einfache Frage.
Danke, und Problem gelöst.
Anzeige
Dass viele Vorschläge (auch meiner) ...
19.04.2021 13:42:54
Luc:-?
…darauf hinauslaufen, Jürgen,
heißt nicht (Zitat) in VBA muss ich halt ein Array immer erst BEFÜLLEN, ist nicht STATISCH definierbar… Das ist es nämlich durchaus, nur nicht jeder Typ, sondern bevorzugt ein n-dimensionales, sog VBA-Array. Dagegen lassen sich n-stufige Tensoren (wie sie in den meisten Pgmmier­Sprachen verwendet wdn) nicht auf diese Art vordimensionieren, denn schließlich haben sie klassisch nur eine Dimension, dafür dann mehrere Stufen bzw Ränge, wobei in VBA auch Mischformen möglich sind. Dazu habe ich bereits viel geschrieben, was im Archiv dokumentiert ist.
Du solltest auch meinen obigen Beitrag lesen und seinen Ansatz verstehen, denn das dürfte dir ggf einiges an PgmmierArbeit ersparen. :-|
Luc :-?
Anzeige
AW: Mehrdimensionale Arrays
19.04.2021 17:03:59
Mullit
Hallo,
Quote Jürgen:

VBA muss ich halt ein Array immer erst BEFÜLLEN, ist nicht STATISCH definierbat (incl. Werte),
na ja gut, rein formal als Konstante nicht und darauf hatte ja z.B. Nepumuk geantw., aber Du kannst Dir eine Function oder Property Proc erstellen und auch von überall her aufrufen, hat quasi den gleichen Effekt:

Option Explicit
Public Sub Aufruf()
MsgBox MyArray(2)(0)
End Sub
Public Function MyArray() As Variant
MyArray = Array(Array("apple", 1), Array("grape", 4), Array("cherry", 6), Array("plum", 8))
End Function
Public Property Get MyArray() As Variant
MyArray = Array(Array("apple", 1), Array("grape", 4), Array("cherry", 6), Array("plum", 8))
End Property
Gruß, Mullit

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige