Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

Makro - Daten in neue Blätter sortieren
#1
Moin zusammen,

ich hab in der Beispieldatei folgendes:

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-

vielen viel dank im voraus.

Gruß, Rupi


Angehängte Dateien
.xlsm   Daten auf neues Worksheets sortieren.xlsm (Größe: 19,73 KB / Downloads: 5)
to top
#2
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
to top
#3
Danke fürs willkommen heißen! Das freut mich.

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 Wink

Grüße, Rupi
to top
#4
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?
to top
#5
Hallöchen,

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-2016)
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste