# [VBA in Excel] Zeilen sortieren/suchen und kopieren



## diabolo150973 (11 Juni 2012)

Hallo zusammen,

ich habe hier mein nächstes Projekt laufen und bin schon wieder an meinen Grenzen angekommen:

Wir haben 3 Messtaster (X-Achse, Y-Achse, Z-Achse), die mit einer Software (nicht meine!) abgefragt werden. Die gemessenen Werte kann man nun als *.CSV exportieren.
Schön wäre es gewesen, wenn diese CSV-Datei nun eine Spalte für die X-Werte, eine für Y und eine für Z hätte. Aber wo ich bin, gibt kein schön! ;-)
Deswegen wechseln sich nun die X-,Y- und Z-Werte in jeder Zeile ab.
Nun steht z.B. in Zelle 


A1= "X-Achse", in Zelle B1=der gemessene Wert, in Zelle C1=Datum und Uhrzeit der Messung
A2= "Y-Achse", in Zelle B2=der gemessene Wert, in Zelle C2=Datum und Uhrzeit der Messung
A3= "Z-Achse", in Zelle B3=der gemessene Wert, in Zelle C3=Datum und Uhrzeit der Messung
A4= "X-Achse", in Zelle B4=der gemessene Wert, in Zelle C4=Datum und Uhrzeit der Messung
...
...
...
Nun habe ich mir gedacht: Schmeiß mal den Makro-Recorder an und zeichne das Suchen, Sortieren und kopieren auf. Aber wie schon oben erwähnt: Es gibt kein schön! Das klappt nicht!

Nun meine Frage: Wie kann ich alle Zeilen, in denen in Spalte A "X-Achse" steht rausfiltern, markieren und in auf ein neues Blatt kopieren. Das Markieren und Kopieren bekomme ich hin, aber das Suchen und markieren aller "X-Achsen" schaffe ich nicht. Leider ist die Anzahl der Messwerte nicht immer die Selbe, sonst könnte ich ja einfach alles, was ich will mit "STRG+LM" markieren damit machen, was ich will.

Hat da jemand eine Idee?

Schönen Gruß,

dia


----------



## marlob (11 Juni 2012)

So auf die schnelle würde ich sagen mache einen AutoFilter.
Per Makro kannst du den so ansprechen

```
*
[LEFT]Sub StelleAutoFilterEin()
Selection.AutoFilter Field:=1, Criteria1:="[COLOR=#333333]X-Achse[/COLOR]"
End Sub
[/LEFT]
```


----------



## zotos (11 Juni 2012)

Du hättest besser eine Beispiel csv Datei in den Anhang gepackt. 
Die Aufgabe an sich klingt leicht lösbar aber eben nicht mit aufzeichnen, sondern klassisch programmiert.


----------



## marlob (11 Juni 2012)

Und dann evtl. mit 


```
*
ActiveSheet.Range("A2:C" & ActiveSheet.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Copy 
Workbooks("Messwerte.xls").Sheets("Sheet2").Activate 
Range("A2").Activate 
Activesheet.Paste
```
Wenn die Werte in Zeile 2 anfagen und in Zeile 1 die Überschriften stehen.
Ist ungetestet aus einem anderen Makro bei mir kopiert.
Musste evtl. noch was anpassen


----------



## diabolo150973 (11 Juni 2012)

Danke! Ich spiele damit mal etwas rum. Wenn es so klappt, kann ich es ja auf Y- und Z- erweitern. 
Das wäre ja super, wenn dieser 3-Zeiler reichen würde. Ich hatte schon Angst, dass irgendwas riesiges kommt.

Gruß,

dia


----------



## diabolo150973 (11 Juni 2012)

*Die CSV-Datei*

Ich habe das Ding hier mal nur mit X- und Z-Achse. Der dritte Taster wurde noch nicht geliefert...
Aber wenn es mit einem klappt, sollte der Rest kein Problem sein.

Anhang anzeigen export.zip


Danke nochmal!

Gruß,

dia


----------



## marlob (11 Juni 2012)

Hiermit sollte es gehen

```
*
Sub CopyXAchse()
'
' Macro1 Macro
'


'
     Selection.AutoFilter Field:=1, Criteria1:="M01 - X-Achse"
    ActiveSheet.Range("A1:C" & ActiveSheet.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
End Sub


Sub CopyZAchse()
'
' Macro1 Macro
'


'
    Selection.AutoFilter Field:=1, Criteria1:="M02 - Z-Achse"
    ActiveSheet.Range("A1:C" & ActiveSheet.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
End Sub
```


----------

