Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

bestimmt Zeilen mit Makro in neues Tabellenblatt





Frage

Hallo zusammen, ich möchte aus einer Tabelle mit Hilfe eines Makro´s Zeilen in ein neues, bereits vorhandenes Tabellenblatt (Fehlerprotokoll) kopieren. Diese Zeilen sollen kopiert werden, wenn in der Spalte J eine "1" steht. Sie sollen dann in das "Fehlerprotokoll" von oben nach unten kopiert werden. Die Reihenfolge ist dabei nicht wichtig. Wer weiss eine Lösung? PS: Ist es auch möglich nicht die ganze Zeile zu kopieren sondern nur bestimmte Felder? MFG Tobias

Antwort 1 von Saarbauer

Hallo

am besten die Tabelle in ein neues Blatt kopieren

und über das Blatt das nachfolgende Makro laufen lassen

Sub Finden()
´ Finden Makro
´ Makro am 04.07.2005 von Saarbauer
´Sheets("Bezeichnung Arbeitsblatt").Select
´Es wird vorausgesetzt, dass in Zeile 1 die Spaltennamen stehen und dass die zu überprüfenden Werte in Spalte j stehen.
Range("j2").Select
While IsEmpty(ActiveCell) = False
If ActiveCell.Value = 1 Then
Rows(ActiveCell.Row()).Select
ActiveCell.Offset(0, 9).Select
Selection.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
End Sub


In der Spale J muß in jeder Zeile ein Wert stehen sonst funktioniert es nicht, da die Abfrage

While IsEmpty(ActiveCell) = False

auf leere Zeilen erfolgt

Gruß

Helmut

Antwort 2 von master-t

Morgen,

ich hab das gerade versucht und irgendwie geht es nicht.

Er zeigt als Fehlermeldung:

"Fehler beim Kompilieren
While ohne Wend"

Damit kann ich leider nicht viel mit anfangen.

Woran liegt das?

MFG Tobias

Antwort 3 von Saarbauer

Hallo,

leider ist mir beim Übertragen ein Fehler unterlaufen.

es ist einzufügen :

End If
Wend
End Sub

Gruß

Helmut

Antwort 4 von master-t

HI,

funktioniert dieses Makro auch dann, wenn nicht nur Zahlen in der Spalte ist sondern auch Zahlen und Buchstaben zusammen?

Oder muss man es dan ganz anders machen?

MFG
Tobias

Antwort 5 von Saarbauer

Hallo,

das ganze funktioniert unabhängig vom Inhalt der Spalte J, das Programm hört auf sobald in der Spalte J keine Angabe ist. Dies wird über diese Angaben gesteuert

While IsEmpty(ActiveCell) = False
........
Wend


Bei Auswertung nach anderen Kriterien ist fogendes zu ändern

If ActiveCell.Value = 1 Then

Die 1 ist durch den aktuellen wert zu ersetzen.

Gruß

Helmut

Antwort 6 von master-t

HI,

die Probleme scheinen bei mir ja gar nicht zu enden.
Ich bin jetzt soweit, dass ich 2 Spalten der Tabelle in ein neues Blatt kopiert habe und über die Spalte A ( in der nur 1 und 2 stehen) das Makro laufen lasse. Das funktioniert auch, nur löscht das Makro nicht die Zeilen in denen eine 2 steht. Das irritiert mich.

Woran könnte das liegen?
Liegt es vielleicht daran, dassich in der ersten Zeile keine Zahlen stehen habe sondern die Bezeichnung der Spalte?

So sieht es aus: Eingebunden in ein größeres Makro


Range("A2").Select
While IsEmpty(ActiveCell) = False
If ActiveCell.Value = 1 Then
Rows(ActiveCell.Row()).Select
ActiveCell.Offset(0, 9).Select
Selection.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Wend

MFG

Tobias

Antwort 7 von Saarbauer

Hallo,

siehe Antwort 5

Bei Auswertung nach anderen Kriterien ist fogendes zu ändern

If ActiveCell.Value = 1 Then

Die 1 ist durch den aktuellen Wert zu ersetzen.

Gruß

Helmut

Antwort 8 von master-t

Hi,

danke.

Aber warum löscht er die Zeilen mit einer 2 nicht.
Er geht nur bis zur ersten 1 und dann endet das Makro.

Kannst du dir das erklären?
Bin ich zu doof dafür?


MFG
Tobias

Antwort 9 von Saarbauer

Hallo,

setzte ein Hochkomma vor

ActiveCell.Offset(0, 9).Select

dann müßte es funktionieren. Da bei dieser Funktion die aktive Zelle auf Spalte J gesetzt wird und dort eine leere Zelle ist.

Gruß

Helmut

Antwort 10 von master-t

Ich werd verrückt!!
Es funktioniert!

Vielen Dank!!!


MFG

Tobias

Antwort 11 von Saarbauer

Hallo,

mir ist aufgefallen, dass die Reihenfolge so nicht gut ist

Rows(ActiveCell.Row()).Select
ActiveCell.Offset(0, 9).Select
Selection.Delete

ändern in


Rows(ActiveCell.Row()).Select
Selection.Delete
ActiveCell.Offset(0, 9).Select

es wird sonst nur die Zelle und nicht dir Zeile gelöscht.

Gruß

Helmut