Dynamische Arrays

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Irena.

    Dynamische Arrays

    Hallo,

    ich versuche ein Programm in excel vba zu erstellen, dafür bräuchte ich Ihre hilfe.
    Ich habe ein 2dArray erstellt (Matrix). Leider weiss ich nicht, wie man auf die Indizes dieser Matrix zugreifen kann, also auf die Spalten. Ich muss ein neues Array erstellen mit den Indizes dieser Matrix.
    In der Matrix stehen die Aufträge 1 bis maxAuftrag (Spalten) und die Artikeln 1 bis maxArtikel (Zeilen), also die Werte. Den folgenden Code habe ich:

    'hier wird die Matrix erstellt (funktioniert auch)

    For j = 1 To maxAuftrag
    For i = 1 To maxArtikel
    ReDim Preserve AlleAufträge(maxAuftrag, maxArtikel)

    AlleAufträge(j, i) = Worksheets("H").Cells(i + 4, j + 1).Value

    Next i
    Next j

    'hier möchte ich ein neues Vektor a1IndexRestAuftrag erstellen, wo die indizes von den Aufträgen stehen sollen(Spalten), damit ich auf die obere Matrix zugreifen kann

    Dim a1DIndexRestAuftrag()
    Dim i As Long
    Dim j As Long
    Dim maxArtikel As Integer
    Dim maxAuftrag As Integer

    For j = 1 To maxAuftrag
    ReDim a1IndexAktBeaAuftrag(maxAuftrag)
    a1IndexAktBeaAuftrag(j) = AlleAufträge(maxAuftrag, maxArtikel).Columns.Count

    Next j

    Der untere Code funktioniert nicht. Über Ihre Hilfe würde ich mich sehr freuen. Danke im voraus.
    1) Wenn du deine Dimensionen schon kennst, brauchst du nicht in jedem Schleifendurchgang den ReDim-Befehl abzusetzen.
    Nimm das vor die Schleifen!

    2)

    Visual Basic-Quellcode

    1. AlleAufträge(j, i) = Worksheets("H").Cells(i + 4, j + 1).Value
    Hier schreibst du einen Wert in das Array.

    Visual Basic-Quellcode

    1. a1IndexAktBeaAuftrag(j) = AlleAufträge(maxAuftrag, maxArtikel).Columns.Count
    Hier willst du ein Range-Objekt ansprechen.
    Das passt nicht zusammen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo, erstmal danke für die Antwort.

    a1IndexAktBeaAuftrag(j) = AlleAufträge(maxAuftrag, maxArtikel).Columns.Count

    Das das nicht passt habe ich mir schon gedacht. Ich möchte gerne die Spalten der oberen Matrix in einem 1DArray speichern, also die Indizes (Also damit ich die Spalten der Matrix ansprechen kann). Mit dem zweitem Code habe ich das versucht, aber ohne Erfolg. Z.B. ist die Matrix 3x3, so sollte 1DArray 3 Indizes haben, also für 3 Spalten der Matrix. Habe im Internet nach der Antwort gesucht, aber ohne Erfolg. Und ohne diesen Schritt kann ich das Programm nicht weiter schreiben.

    Danke im Voraus.
    ja, die Arrays brauche ich für meine Schleife.
    Meine Aufgabenstellung ist: In einer Matrix (2dArray) speichere ich die Werte. Das sind Aufträge und Artikeln (Zeilen). Die Aufträge werden am Kommissionierplatz bearbeitet, doe Anzahl von der Kommissionierplätze ist begrenzt. D.h. wenn ich insgesammt 7 Aufträge in dieser Matrix habe, kann ich sie nicht alle sofort bearbeiten, da ich z.B. nur 3 Kommissionierplätze habe, also nur für 3 Aufträge.
    Also muss ich das so machen: zuerst wirden die Kommissionierplätze mit 3 Aufträgen besetzt, soweit ein Auftrag fertig ist, kommt ein neuer dazu (aus dieser 2dMatrix) usw. Deswegen wollte ich in dem 1dArray die Auftäge speichern, aber nicht die Werte, sondern die Indizes für die Spalten(Aufträge) der Matrix.