Löschen von Zeilen mit bestimmen Wortsequenzen in Excel Macro
#1
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. Undecided
Top
#2
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.
[-] Folgende(r) 1 Nutzer sagt Danke an nitrosworld für diesen Beitrag:
  • rums
Top
#3
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
Top
#4
@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
Top
#5
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
Top
#6
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
Top
#7
Weil meine kürzer und schneller ist. Exclamation
Top
#8
(06.02.2017, 13:18)nitrosworld schrieb: Weil meine kürzer und schneller ist. Exclamation

kürzer ja :19: , aber schneller mit der zuletzt geposteten Ergänzung sicher nicht.
(Man, man, man, Excel wird immer vers.....)
Gruß Atilla
Top
#9
Code:
cells.replace "*SUMM*",""
Top
#10
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
Top


Gehe zu:


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