Nach dem Reset des Servers hier direkt meine Anwort.
Es reicht für deine Anwendung ein 2-dimensionales Array (x Zeilen, 5 Spalten). Es geht aber auch, wenn du für deine Daten im Code ein Range-Objekt festlegst. Die Daten des Range-Objektes kannst du genau so auslesen wie ein Array.
Hier ein Code-Beispiel für das Einlesen der Daten in ein Array und ein Beispiel für das Schreiben der Daten entsprechend einer Bedingung in eine Zieltabelle. Dabei habe ich das Array als Public deklariert, so dass der EinleseVorgang nur einmal gestartet werden muss. Anschließend können alle Prozeduren auf die Daten zugreifen.
Gruß
Franz
Option Explicit
Public Daten() As Variant
Sub DatenEinlesen()
Dim Bereich As Range, wksQ As Worksheet
Dim Zeile1 As Long, Spalte1 As Integer, ZeileL As Long, SpalteL As Integer, I As Long, J As Integer
Set wksQ = ActiveWorkbook.Worksheets("Tabelle1") 'Tabelle mit Quell-Daten
Zeile1 = 2 '1. Datenzeile
Spalte1 = 1 '1. Datenspalte
SpalteL = 5 'LetzteDatenspalte
With wksQ
ZeileL = .Cells(.Rows.Count, Spalte1).End(xlUp).Row 'Letzte Zeile mit Daten
Set Bereich = .Range(.Cells(Zeile1, Spalte1), Cells(ZeileL, SpalteL))
End With
ReDim Daten(1 To Bereich.Rows.Count, 1 To Bereich.Columns.Count)
For I = 1 To Bereich.Rows.Count
For J = 1 To Bereich.Columns.Count
Daten(I, J) = Bereich(I, J)
Next J
Next I
End Sub
Sub AusgabenSchreiben()
Dim wksZ As Worksheet, Zeile1 As Long, Spalte1 As Integer, I As Long, J As Integer, Zeile As Long
Set wksZ = ActiveWorkbook.Worksheets("Tabelle1") ' Zieltabelle
Zeile1 = 2 '1. Datenzeile die ausgefüllt werden soll
Spalte1 = 7 '1.Datenspalte die ausgefüllt werden soll
Zeile = Zeile1
With wksZ
'Löschen von vorhandene Daten im Zielbereich
.Range(.Cells(Zeile1, Spalte1), .Cells(.Rows.Count, Spalte1 + UBound(Daten, 2) - 1)).ClearContents
For I = 1 To UBound(Daten, 1)
If Daten(I, 1) = "Ausgabe" Then
For J = 1 To UBound(Daten, 2)
.Cells(Zeile, Spalte1 + J - 1) = Daten(I, J)
Next J
Zeile = Zeile + 1
End If
Next I
End With
End Sub