Microsoft Excel

Herbers Excel/VBA-Archiv

Welcher Datentyp um diese Daten zu speichern

Betrifft: Welcher Datentyp um diese Daten zu speichern von: BlackDevil
Geschrieben am: 05.09.2014 14:26:17

Hallo zusammen,

ich habe in meinem aktuellen Vorhaben noch ein weiteres Problem - in diesem Fall mit dem Speichern von Daten.

Der Benutzer lädt *.csv Dateien in ein Verzeichnis, welches sich im gleichen Ordner befindet wie die *.xlsm. Nach der Prüfung ob Ordner und Daten vorhanden sind und die Dateinamen stimmen les ich die *.csv nach und nach ein und schreibe sie in Tabellen. Während ich das mache extrahiere ich aus den Dateinamen "Kategorien". Jede dieser Kategorien (maximal 10) beinhalten verschieden viele Elemente (maximal 50). Nun bin ich kein Fan von starren Strukturen sondern davon, dass die Anwendung dynamisch auf ihre Umgebung reagiert. Sprich: Lädt der Nutzer statt 10 Kategorien nur 2 dann soll die Anwendung trotzdem funktionieren und das von sich aus erkennen und entsprechend verarbeiten/reagieren.

Ich suche nun eine möglichkeit eine Tabelle in VBA anzulegen welche die Kategorien und die Elemente beinhaltet. Das sieht dann ca so aus:

Tabelle= [A, (E1, E2, E3, E4)]; [B, (E1, E2, E3, E4, E5)]; [C, (E1, E2)]

In anderen Programmiersprachen, zum Beispiel C/C++/C# oder Matlab, würde ich mich wohl eines Structs bedienen. In einer Schleife würde ich für jede vorhandene Kategorie ein Struct erstellen welches den Namen der Kategorie und die Elemente als Liste beinhaltet. Alternativ ginge ein Array in einem Array. Aber beides scheint mit VBA nicht zu funktionieren.

Hat jemand eine Idee?

  

Betrifft: AW: Welcher Datentyp um diese Daten zu speichern von: BlackDevil
Geschrieben am: 05.09.2014 15:40:23

Manchmal klappts erst nach zwei weiteren Espressi ...

Public Type typeKategorie
Kategorie As String
Elements() As String
End Type

Sub TuWas()
    Dim KategorieSammler() As typeKategorie
'[...]
            ReDim Preserve KategorieSammler(i)
            KategorieSammler(i).Kategorie= KategorieList(i)
            With Worksheets(KategorieList(i))
            colNum = 2
            ReDim Preserve KategorieSammler(i).Elements(0)
            For j = 0 To .Cells(1, Columns.Count).End(xlToLeft).Column / 3 - 1
                ReDim Preserve KategorieSammler(i).Elements(j)
                KategorieSammler(i).Elements(j) = .Cells(1, colNum).Value
                colNum = colNum + 3
            Next j
End Sub
Das macht was es soll und zwar 1a. Ich habe das ganze minimal gelassen und die Deklaration von colNum und das Füllen der Arbeitsblätter bewusst rausgelassen (Symbolisiert durch ' [...] ).

Vielleicht stolpert ja jemand drüber und findet so eine Lösung für sein Problem.


Meta
Excel VBA dynamische Arrays Struct Struktur Typ


  

Betrifft: AW: Welcher Datentyp um diese Daten zu speichern von: fcs
Geschrieben am: 05.09.2014 15:52:26

Hallo BlackDevil,

der benutzerdefinierte Variablen-Type ist natürlich die optimale Lösung, da übersichtlicher in der Auswertung und Beschreibung der Daten. Es funktioniert aber auch mit jedem Variant-Datenfeld.
Zum Testen hab ich hier einfach mal 2 gleich große Arrays zu einem zusammengeführt.

Gruß
Franz

Sub bbTest()
 Dim varData(), intData As Integer, arrTemp(), intTemp
 Dim int1 As Integer, int2 As Integer, var1, var2, int3 As Integer
'Tabelle= [A, (E1, E2, E3, E4)]; [B, (E1, E2, E3, E4, E5)]; [C, (E1, E2)]
 var1 = Array("A", "B", "C")
 var2 = Array(Array("E1", "E2", "E3", "E4"), Array("E1", "E2", "E3", "E4", "E5"), Array("E1", " _
E2"))
 
 
 intData = 0
 For int1 = LBound(var1) To UBound(var2)
    intData = intData + 1
    ReDim Preserve varData(1 To 2, 1 To intData)
    varData(1, intData) = var1(int1)
  
    Erase arrTemp: intTemp = 0
    For int3 = LBound(var2(int1)) To UBound(var2(int1))
      intTemp = intTemp + 1
      ReDim Preserve arrTemp(1 To intTemp)
      arrTemp(intTemp) = var2(int1)(int3)
    Next int3
    
    varData(2, intData) = arrTemp
    Erase arrTemp
  Next int1
End Sub



  

Betrifft: AW: Welcher Datentyp um diese Daten zu speichern von: BlackDevil
Geschrieben am: 05.09.2014 16:27:59

Zugegeben, da ist die Lösung mit dem eigenen Typ etwas eleganter :D Ich bin eh ein Fan von Structs, die sind so schön übersichtlich :)


 

Beiträge aus den Excel-Beispielen zum Thema "Welcher Datentyp um diese Daten zu speichern"