Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in Array einlesen und nacheinander abarbeiten

Daten in Array einlesen und nacheinander abarbeiten
07.11.2019 18:58:07
Nils
Hallo Leute ,
diesen Code habe ich mühsam erstellt, vor ca. 2 wochen das erste mal mit VBA zu ttun gehabt und _ so langsam komme ich rein.

Sub Collect_Raw_Data_Test()
Dim Data_object As String
Dim Data_Char As String
Dim ITSys_Planned As String
Dim ITSys_Current As String
Dim Brand As String
Dim Max_Zeilen_Data_Object As Integer
Dim aktuelle_Zeile As Integer
Dim Max_Zeilen_ITSys_Current As Integer
Dim Max_Zeilen_ITSys_Planned As Integer
Dim Brand_counter As Integer
aktuelle_Zeile = 0
Brand_counter = 0
ITSys_Planned_counter = 0
With ActiveWorkbook.Worksheets("PRP_3a")
Max_Zeilen_Data_Object = .Range("No_Data_Objects")
Max_Zeilen_ITSys_Current = .Range("No_IT_Sys_Prev")
For j = 0 To Max_Zeilen_ITSys_Current - 1
For i = 0 To Max_Zeilen_Data_Object - 1
Brand = .Cells(47 + Brand_counter, 3).Value
ITSys_Current = .Cells(47 + j, 4).Value
ITSys_Planned = .Cells(47 + j, 5).Value
Data_object = .Cells(47 + i, 8).Value
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 3).Value = Brand
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 4).Value = ITSys_Current
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 5).Value = ITSys_Planned
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 6).Value = Data_object
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 7).Value = "Previous"
aktuelle_Zeile = aktuelle_Zeile + 1
Next i
Brand_counter = Brand_counter + 1
Next j
Max_Zeilen_ITSys_Current = .Range("No_of_IT_Sys_Plan")
For m = 0 To Max_Zeilen_ITSys_Current - 1
For p = 0 To Max_Zeilen_Data_Object - 1
Brand = .Cells(47 + m, 16).Value
ITSys_Current_succ = .Cells(47 + m, 14).Value
ITSys_Planned_succ = .Cells(47 + m, 15).Value
Data_object = .Cells(47 + i, 8).Value
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 3).Value = Brand
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 4).Value = ITSys_Current_succ
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 5).Value = ITSys_Planned_succ
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 6).Value = Data_object
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 7).Value = "Succeeding"
aktuelle_Zeile = aktuelle_Zeile + 1
Next p
Brand_counter = Brand_counter + 1
Next m
End With
End Sub

Nun möchte ich "With ActiveWorkbook.Worksheets("PRP_3a")" durch einen Array und schleife ersetzten. Leider hänge ich hier grad ziemlich krass.
Aktuell habe ich in meiner Datei das Arbeitsblatt "Raw Data" und PRP_3a, ich muss aber mehrere Arbeitsblätter hinzufügen, die immer mit "PRP_" beginnen. Durch den Array und den Loop möchte ich daher nach der reihe die Arbeitsblätte abarbeiten und mir alles nach "Raw Data" kopieren. Kann mir hier jemand paar Tipps geben bzw. mir Helfen?
LG,
Emil

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in Array einlesen und nacheinander abarbeiten
07.11.2019 21:32:17
Matthias
Moin!
Mit Schleife könnte es so aussehen. Dabei ist in Schleife zweimal das selbe Blatt. Dort also entweder anpassen oder eins rausschlöschen. Ist jetzt aber ungetestet.
Dim meine_Blaetter()
Dim blattindex As Long
meine_Blaetter = Array("PRP_3a", "PRP_3a")  'hier erweitern
For blattindex = 0 To UBound(meine_Blaetter)
With ActiveWorkbook.Worksheets(meine_Blaetter(blattindex))
Max_Zeilen_Data_Object = .Range("No_Data_Objects")
Max_Zeilen_ITSys_Current = .Range("No_IT_Sys_Prev")
For j = 0 To Max_Zeilen_ITSys_Current - 1
For i = 0 To Max_Zeilen_Data_Object - 1
Brand = .Cells(47 + Brand_counter, 3).Value
ITSys_Current = .Cells(47 + j, 4).Value
ITSys_Planned = .Cells(47 + j, 5).Value
Data_object = .Cells(47 + i, 8).Value
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 3).Value = Brand
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 4).Value = ITSys_Current
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 5).Value = ITSys_Planned
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 6).Value = Data_object
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 7).Value = "Previous"
aktuelle_Zeile = aktuelle_Zeile + 1
Next i
Brand_counter = Brand_counter + 1
Next j
Max_Zeilen_ITSys_Current = .Range("No_of_IT_Sys_Plan")
For m = 0 To Max_Zeilen_ITSys_Current - 1
For p = 0 To Max_Zeilen_Data_Object - 1
Brand = .Cells(47 + m, 16).Value
ITSys_Current_succ = .Cells(47 + m, 14).Value
ITSys_Planned_succ = .Cells(47 + m, 15).Value
Data_object = .Cells(47 + i, 8).Value
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 3).Value = Brand
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 4).Value = ITSys_Current_succ
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 5).Value = ITSys_Planned_succ
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 6).Value = Data_object
Worksheets("RawData").Cells(3 + aktuelle_Zeile, 7).Value = "Succeeding"
aktuelle_Zeile = aktuelle_Zeile + 1
Next p
Brand_counter = Brand_counter + 1
Next m
End With
Next

Ansonsten würde ich deine integer Variablen als Long deklarieren. Bspw. gibt es mehr Zeilen in einem Blatt, als die Integer Variable aufnehmen kann. Nach mehr habe ich jetzt erstmal nicht geschaut.
VG
Anzeige
AW: Daten in Array einlesen und nacheinander abarbeiten
07.11.2019 23:03:28
Daniel
HI
wenn alle Blätter, die mit "PRP_" beginnen, bearbeitet werden sollen, so:
ersetze die With-Klammer
With ActiveWorkbook.Worksheets("PRP_3a")
End with

durch folgendes, der restliche Code vor, nach und in der With-Klammer kann bleiben:
dim wsh as worksheet
for each wsh in activeworkbook.worksheets
with wsh
if .name like "PRP_*" then
hier dann der Code der ursprünglich in der WITH-Klammer stand
end wif
end with
Next
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen