wie ihr seht gibt es mehrere Zeilen, diese sollen nach Spalte E (Parameter), auf neue Sheets sortiert werden. Das macht das Makro ja auch. nur leider statisch. Da nicht nur wie im Beispiel 3 verschiedene Paramter vorhanden sein können. sondern auch 23...
Jedenfalls bräuchte ich hilfe dies so hinzubekommen, dass das makro selber schaut ob ein neues Blatt mit dem Parameter vohanden ist. Wenn ja, dann einfach von unten her die komplette zeile anhängen. Wenn nein, dann neues blatt mit dem namen des parameter erzeugen und die zeile anhängen.
Ich hoffe ihr könnt mir helfen und meine beschreibung war halbwegs verständlich-
Hallo Rupi!
Willkommen im Forum! :19:
Bevor Du Dein Ziel weiter verfolgst (manche sagen, Dich in etwas verrennst):
Warum willst Du eine intakte Liste mutwillig zerstören?
Es gibt in Excel viel bessere Möglichkeiten!
- Autofilter
- Pivot-Tabelle
- Auswertung per Teilergebnis(), Aggregat() oder auch Summewenn() o.ä.
Meine Meinung:
Man KANN auf Blätter verteilen, sollte dann aber keine identische Struktur haben, sondern Excel mittel Schlüssel eine quasi-relationale Datenbank abbilden lassen.
Dies ist bei Deiner Liste aber nicht notwendig.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Ziel der ganzen Sache soll eine Art von Bericht sein. Ich habe zig dieser Paramter. Die Daten kommen bereits in dieser Form (Variiert aber von Parameter zu Parameter). Diese Daten sind quasi die Grundlage für spätere Diagramme. Diese sollen später als Boxplot, 3*Sigma und einer Unternehmensspezifischen Form dargestellt werden.
Stell dir vor ich hab später eine Rohdatei, ähnlich der beispieldatei hier. mit an die 15000 Zeilen, 50 verschiedene Paramter, über Zeitverlauf-X. Sicher geht es auch eleganter, nur man ist gewohnte Form gewohnt (im unternehmen), und will intern auch nicht davon abweichen. Sinn und Nutzen sei mal dahin gestellt. aber was Chef sagt, muss getan werden.
Ich habs ja wenigsten schon geschafft die Rohdaten in berechneter form zu bekommen. Vorher musste man alles noch selber berechnen.
Jedenfalls sind die einzelnen blätter nicht nur für die dias notwendig. sondern anhand dieser dias werden später auch maßnahmen im Unternehmen ergriffen. und dafür sind wiederrum die daten im detail wieder relevant. und so brauch ich immer nur die eine file an die kollegen verschicken, und die kollegen können sich dann die reiter für die sich zuständig sind anschauen.
Ist sicher keine tolle form. Aber es muss SO eben sein und ich brauch es so. Ich lass mich aber gern (leider eher zweitrangig) von dir über einen anderen weg leiten. Aber der müsste dann auch schon fast die "Eier-legende-Woll-Mich-Sau" sein ;)
Vllt kann man es ja auch einfach trennen?
Erst überprüfen ob die Parameter als Reit schon vorhanden sind, und dann die Daten jeweils von unten her anfügen?
wie Ralf schon sagte, gibt es bessere Lösungen, z.B. Pivot mit entsprechenden Diagrammen. Du kannst damit interaktiv die Daten filtern und das oder die zum gewählten Parameter gehörigen Diagramme aktualisieren. Falls Du was am Bildschirm "nebeneinander" legen willst, könntest Du die Datei 2x öffnen.
Hier mal ein code zum trennen. Es wird aber immer in A1 auf dem Zielblatt eingefügt, eventuelle Daten also überschrieben und wenn es mehr waren, bleibt unten was von den alten übrig...
Code:
Sub trennen()
'Variablendeklarationen
'Integer
Dim lParam As Integer, iCnt As Integer
'Array
Dim arrParam
'Collection
Dim colParam As Collection
'Collection setzen
Set colParam = New Collection
'Mit dem Rohdaten-Blatt
With ThisWorkbook.Worksheets("ROH")
'Parameter in Array uebernehmen
arrParam = .Range("E2:E" & .Cells(Rows.Count, 5).End(xlUp).Row).Value
'Bei Fehler mit naechster Anweisung weiter
On Error Resume Next
'Schleife ueber alle Arrayeintraege
For iCnt = 1 To UBound(arrParam)
'unterschiedliche Eintraege in Collection uebernehmen
colParam.Add arrParam(iCnt, 1), arrParam(iCnt, 1)
'Ende Schleife ueber alle Arrayeintraege
Next iCnt
'Ende Fehlerbehandlung
On Error GoTo 0
'Schleife ueber alle Collectioneintraege
For iCnt = 1 To colParam.Count
'Bei Fehler mit naechster Anweisung weiter
On Error Resume Next
'Datenblatt aktivieren
Sheets(colParam.Item(iCnt)).Select
'Bei Fehler neues Blatt hinzufuegen und benennen
If Err.Number <> 0 Then Sheets.Add: ActiveSheet.Name = colParam.Item(iCnt)
'Ende Fehlerbehandlung
On Error GoTo 0
'Autofilter setzen
.Range("E1").AutoFilter
'nach Parameter filtern
.Range("$A$1:$R$" & .Cells(Rows.Count, 5).End(xlUp).Row).AutoFilter Field:=5, Criteria1:=colParam.Item(iCnt)
'sichtbare Zellen einschl. Ueberschriften kopieren
.Range("E1").CurrentRegion.SpecialCells(xlVisible).Copy
'Auf Parameterblatt einfuegen
Sheets(colParam.Item(iCnt)).Range("A1").PasteSpecial
'Rohdatenblatt aktivieren
.Activate
'Ende Schleife ueber alle Collectioneintraege
Next iCnt
'Ende Mit dem Rohdaten-Blatt
End With
End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)