Registriert seit: 02.02.2017
Version(en): 2011
Ich habe noch keine großen Erfahrungen mit der Programmierung von Macros und habe folgendes Problem: In einer Matrix von A1 bis X500 taucht an verschiedenen Stellen das Wort "Summe" in unterschiedlichen Textfolgen auf. Ich möchte alle Zeilen Löschen, in dem das Wort Teilwort "SUMM" vorkommt, egal in welcher Spalte. Kann mir hier jemand weiterhelfen.
Registriert seit: 31.01.2017
Version(en): 2010
Hey,
versuche es mal damit:
Code:
Sub DeleteRowsByTextInRange()
Dim rng As Range
For Each rng In ActiveSheet.Range("A1:X500")
If LCase(rng.Value) Like "*summ*" Then
Rows(rng.Row).Delete
End If
Next
End Sub
Es geht vermutlich auch einfacher mit der FIND Funktion, aber der Code tut es auch.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
06.02.2017, 12:00
(Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2017, 12:00 von atilla.)
Hallo,
ich würde es so lösen:
Code:
Sub DeleteRowsByTextInRange()
Dim i As Long, j As Long
Dim rngR As Range
With Sheets("Tabelle3")
For i = 1 To 500
For j = 1 To 24
If LCase(Cells(i, j).Value) Like "*summ*" Then
If rngR Is Nothing Then
Set rngR = Rows(i)
Else
Set rngR = Union(rngR, Rows(i))
End If
End If
Next j
Next i
End With
If Not rngR Is Nothing Then
rngR.Delete
Set rngR = Nothing
End If
End Sub
@Nitro
Dein Code muss nicht alles erfassen.
Test mal in dem Du drei Zeilen hintereinander Summe1 bis Summe3 schreibst.
Gruß Atilla
Registriert seit: 31.01.2017
Version(en): 2010
06.02.2017, 13:00
(Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2017, 13:18 von nitrosworld.)
@atilla Danke.
Dann aber lieber so:
Code:
Sub DeleteRowsByTextInRange()
Dim rng As Range
Dim i As Long
On Error Resume Next
Set rng = ActiveSheet.Range("A1:X500")
For i = rng.Count To 1 Step -1
If LCase(rng(i).Value) Like "*summ*" Then
Rows(rng(i).Row).Delete
End If
Next
End Sub
Registriert seit: 14.04.2014
Version(en): 2003, 2007
06.02.2017, 13:06
(Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2017, 13:06 von atilla.)
Hallo Nitro,
warum denn, "dann aber lieber so"?
Deine Variante löscht jede Fundzeile nach einander beginnend von der letzten Zeile.
Meine sammelt erst alle Fundzeilen und löscht sie in einem Rutsch.
Deswegen ist es bei mir auch egal, ob ich mit der ersten oder letzten Zeile anfange.
Gruß Atilla
Registriert seit: 14.04.2014
Version(en): 2003, 2007
06.02.2017, 13:17
(Dieser Beitrag wurde zuletzt bearbeitet: 06.02.2017, 13:17 von atilla.)
Hallo,
hier noch eine erweiterte Version, da es Blödsinn ist, noch weitere Zellen innerhalb einer Zeile abkzulappern, wenn sie bei einem Fund sowieso gelöscht wird.
Insofern ist der Einwand von Nitro berechtigt.
Code:
Sub DeleteRowsByTextInRange()
Dim i As Long, j As Long
Dim rngR As Range
With Sheets("Tabelle3")
For i = 1 To 500
For j = 1 To 24
If LCase(Cells(i, j).Value) Like "*summ*" Then
If rngR Is Nothing Then
Set rngR = Rows(i)
Else
Set rngR = Union(rngR, Rows(i))
End If
i = i + 1
End If
Next j
Next i
End With
If Not rngR Is Nothing Then
rngR.Delete
Set rngR = Nothing
End If
End Sub
Nur diese Zeile:
i= i +1 hinzugekommen
Gruß Atilla
Registriert seit: 31.01.2017
Version(en): 2010
Weil meine kürzer und schneller ist.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
(06.02.2017, 13:18)nitrosworld schrieb: Weil meine kürzer und schneller ist.
kürzer ja :19: , aber schneller mit der zuletzt geposteten Ergänzung sicher nicht.
(Man, man, man, Excel wird immer vers.....)
Gruß Atilla
Registriert seit: 29.09.2015
Version(en): 2030,5
Code:
cells.replace "*SUMM*",""
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo snb
(06.02.2017, 03:06)rums schrieb: Ich möchte alle Zeilen Löschen, in dem das Wort Teilwort "SUMM" vorkommt..
Gruß Atilla