Supportnet / Forum / Tabellenkalkulation
In einer Spalte nach "X" suchen und zeilen kopieren.
Frage
Hallo,
Ich habe den unten stehenden VBA-Code im Einsatz, den
möchte ich so abändern das nur kopiert wird wenn in der
Spalte14 ein kleines oder ein großes X steht.
´kopiert alle Zeilen mit einem Inhalt in Spalte 14, nach Tabelle2.
Dim lRow As Long, lRowL As Long, lRowT As Long, bln As Boolean
Application.StatusBar = "Aktualisierung läuft !!!"
Sheets("Tabelle1").Activate
lRowL = Cells(Rows.Count, 14).End(xlUp).Row
lRowT = 1
For lRow = 2 To lRowL
If Not IsEmpty(Cells(lRow, 14)) Then
lRowT = lRowT + 1
Sheets("Tabelle2").Rows(lRowT).Value = Rows(lRow).Value
End If
Next lRow
End Sub
Ein Danke an alle Helfer !!!
Antwort 1 von CaroS
Hallo Zappa,
ich habe das jetzt mal so verstanden, dass nur dann kopiert werden soll, wenn genau ein einzelnes kleines oder großes X in Spalte 14 steht, und nicht wenn es innerhalb einer Zeichenfolge vorkommt. Allerdings habe ich noch ein Trim() (= Variante 2) verwendet, so dass vor und hinter dem X noch Leerzeichen stehen können und trotzdem kopiert wird. Wenn das nicht so sein soll, dann tauschst Du die If-Zeile aus. In den Rem-Kommentarzeilen sind beide Varianten angegeben.
Gruß,
CaroS
ich habe das jetzt mal so verstanden, dass nur dann kopiert werden soll, wenn genau ein einzelnes kleines oder großes X in Spalte 14 steht, und nicht wenn es innerhalb einer Zeichenfolge vorkommt. Allerdings habe ich noch ein Trim() (= Variante 2) verwendet, so dass vor und hinter dem X noch Leerzeichen stehen können und trotzdem kopiert wird. Wenn das nicht so sein soll, dann tauschst Du die If-Zeile aus. In den Rem-Kommentarzeilen sind beide Varianten angegeben.
Sub X_in_Sp14_kopieren()
Rem Kopiert alle Zeilen mit "x" oder "X" in Spalte 14, nach Tabelle2
Dim lRow As Long, lRowL As Long, lRowT As Long, bln As Boolean
Application.StatusBar = "Aktualisierung läuft !!!"
Sheets("Tabelle1").Activate
lRowL = Cells(Rows.Count, 14).End(xlUp).Row
lRowT = 1
For lRow = 2 To lRowL
Rem Wahlweise eine der beiden If-Zeilen - ohne Rem - verwenden
Rem 1) Nur kleine oder große X sind erlaubt
Rem If LCase(Cells(lRow, 14).Value) = "x" Then
Rem 2) Leerzeichen vor/hinter dem X sind erlaubt
Rem If Trim(LCase(Cells(lRow, 14).Value)) = "x" Then
If Trim(LCase(Cells(lRow, 14).Value)) = "x" Then
lRowT = lRowT + 1
Sheets("Tabelle2").Rows(lRowT).Value = Rows(lRow).Value
End If
Next lRow
End SubGruß,
CaroS
Antwort 2 von nighty
hi all
noch eine variante ohne schleife
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("B1:B100").AutoFilter field:=1, Criteria1:="x", VisibleDropDown:=False
Sheets(1).Rows(2 & ":" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Copy _
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
Sheets(1).Cells(1, 2).AutoFilter field:=1
End Sub
noch eine variante ohne schleife
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("B1:B100").AutoFilter field:=1, Criteria1:="x", VisibleDropDown:=False
Sheets(1).Rows(2 & ":" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Copy _
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
Sheets(1).Cells(1, 2).AutoFilter field:=1
End Sub
Antwort 3 von nighty
hi all :)
idee von schnallgonz :))
gruss nighty
idee von schnallgonz :))
gruss nighty
Antwort 4 von nighty
hi all
ups korrigiert
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("B1:B" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).AutoFilter field:=1, Criteria1:="x", VisibleDropDown:=False
Sheets(1).Rows(2 & ":" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Copy _
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
Sheets(1).Cells(1, 2).AutoFilter field:=1
End Sub
ups korrigiert
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("B1:B" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).AutoFilter field:=1, Criteria1:="x", VisibleDropDown:=False
Sheets(1).Rows(2 & ":" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Copy _
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
Sheets(1).Cells(1, 2).AutoFilter field:=1
End Sub
Antwort 5 von Zappa
Hallo CaroS
habe deine Variante probiert, leider funzt es bei mir
nicht !
Egal was in der Spalte 14 steht, sie wird immer kopiert.
Gruß
Zappa
habe deine Variante probiert, leider funzt es bei mir
nicht !
Egal was in der Spalte 14 steht, sie wird immer kopiert.
Gruß
Zappa
Antwort 6 von nighty
hi zappa
ab zeile 2 spalte 14 (N)
das 2 sheet dient der darstellung zur zeit
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("N2:N" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).AutoFilter field:=1, Criteria1:="x", VisibleDropDown:=False
Sheets(1).Rows(2 & ":" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Copy _
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
Sheets(1).Cells(1, 14).AutoFilter field:=1
End Sub
ab zeile 2 spalte 14 (N)
das 2 sheet dient der darstellung zur zeit
gruss nighty
Option Explicit
Sub test()
Sheets(1).Range("N2:N" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).AutoFilter field:=1, Criteria1:="x", VisibleDropDown:=False
Sheets(1).Rows(2 & ":" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Copy _
Sheets(2).Rows(Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
Sheets(1).Cells(1, 14).AutoFilter field:=1
End Sub
Antwort 7 von CaroS
Hallo Zappa,
fällt mit schwer das zu glauben, aber was kann man jetzt machen? Startest Du denn das richtige Makro? Ich könnte Dir zwar noch empfehlen, das Makro schrittweise mit F8 abzuarbeiten, dabei Variablen zu überwachen, aber eigentlich sehe ich keinen Fehler.
Spalte 14 ist Spalte N, sind da bei Dir irgendwelche Spalten verdeckt (Breite = 0)? Wenn in N2, N3 usw. nichts oder etwas beliebiges außer x oder X steht, musst Du im Makro mit F8 von der Zeile
If Trim(LCase(Cells(lRow, 14).Value)) = "x" Then
(nach unten) direkt zur Zeile
Next lRow
und mit dem nächsten F8 (nach oben) zur Zeile
For lRow = 2 To lRowL
springen. Überprüfe das bitte mal.
Gruß,
CaroS
fällt mit schwer das zu glauben, aber was kann man jetzt machen? Startest Du denn das richtige Makro? Ich könnte Dir zwar noch empfehlen, das Makro schrittweise mit F8 abzuarbeiten, dabei Variablen zu überwachen, aber eigentlich sehe ich keinen Fehler.
Spalte 14 ist Spalte N, sind da bei Dir irgendwelche Spalten verdeckt (Breite = 0)? Wenn in N2, N3 usw. nichts oder etwas beliebiges außer x oder X steht, musst Du im Makro mit F8 von der Zeile
If Trim(LCase(Cells(lRow, 14).Value)) = "x" Then
(nach unten) direkt zur Zeile
Next lRow
und mit dem nächsten F8 (nach oben) zur Zeile
For lRow = 2 To lRowL
springen. Überprüfe das bitte mal.
Gruß,
CaroS
Antwort 8 von Zappa
Sorry CaroS,
ich hatte vergessen das ich das Makro auch noch im
"Workbook_open" laufen hatte.
Deine Lösung des Problems funktioniert super.
Ein Danke an alle die geholfen haben.
(Die Lösung von Nighty werde ich auch mal testen)
ich hatte vergessen das ich das Makro auch noch im
"Workbook_open" laufen hatte.
Deine Lösung des Problems funktioniert super.
Ein Danke an alle die geholfen haben.
(Die Lösung von Nighty werde ich auch mal testen)

