Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Stücklistenbereinigung mit Excel

Stücklistenbereinigung mit Excel
08.06.2019 19:13:31
Thomas
Hallo zusammen,
ich habe zur Verwaltung von Stücklisten ein relativ einfaches Programm zum Filtern erstellt. Das funktioniert, hat aber doch starke Einschränkungen, da ich z.B. im Code bereits festlege, wie viele Zeilen mein Datensatz maximal haben kann und ich zum Löschen der gesamten Zeile das genaue Wort eintragen muss.
Hier mal der Code:

Sub clearSL()
Dim i As Integer
Dim suche As String
Dim spalte As String
'Eingabe der betreffenden Spalte
spalte = InputBox("Eingabe der betreffenden Spalte", "Eingabe Spalte", "ACHTUNG! GROßBUCHSTABE") _
_
_
'Eingabe des zu entfernendes Begriffes
suche = InputBox("Eingabe des zu entfernenden Begriffes", "Eingabe Begriff", "ACHTUNG!  _
Schreibweise beachten")
For i = 10 To 300
If Range(spalte & i) Like suche Then
Tabelle1.Rows(i).Select
Tabelle1.Rows(i).Delete
i = i - 1
End If
Next i
End Sub
Das Ziel ist es, dass im ersten Eingabedialog mit dem ich die Spalte auswähle es egal ist, ob ein Groß- oder Kleinbuchstabe eingetragen wird. Das gleiche gilt für die Suche nach dem Wort das sich in dieser Spalte befindet. Außerdem wäre es richtig gut, wenn man auswählen kann ob das Wort 1:1 gleich sein soll oder ob er nach Zellen sucht, die das Wort beinhalten. Zu guter letzt sollte der gesamte Bereich erkannt werden, ohne dass ich in der Zählschleife eine Begrenzung setze.
Kann mir da jemand weiterhelfen?
Vielen Dank und liebe Grüße
Tom

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Stücklistenbereinigung mit Excel
08.06.2019 20:11:17
Sepp
Hallo Thomas,
Sub clearSL()
  Dim rng As Range, rngDelete As Range, rngFind As Range
  Dim suche As String, spalte As String, strFirst As String

  'Eingabe der betreffenden Spalte 
  spalte = InputBox("Eingabe der betreffenden Spalte", "Eingabe Spalte", "Spaltenbuchstabe")
  If Len(spalte) Then
    'Eingabe des zu entfernendes Begriffes 
    suche = InputBox("Eingabe des zu entfernenden Begriffes" & vbLf & "Teilbegriffe mit * eingrenzen!", "Eingabe Begriff", _
      "ACHTUNG!Schreibweise beachten")
    If Len(suche) Then
      Set rngFind = Range(spalte & "10:" & spalte & Application.Max(10, Range(spalte & Rows.Count).End(xlUp).Row))
      Set rng = rngFind.Find(What:=suche, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
      If Not rng Is Nothing Then
        strFirst = rng.Address
        Do
          If rngDelete Is Nothing Then
            Set rngDelete = rng
          Else
            Set rngDelete = Union(rngDelete, rng)
          End If
          Set rng = rngFind.FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> strFirst
      End If
      If Not rngDelete Is Nothing Then rngDelete.EntireRow.Delete
    End If
  End If
  Set rng = Nothing
  Set rngDelete = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Anzeige
AW: Stücklistenbereinigung mit Excel
09.06.2019 01:33:30
Daniel
Hi
dein Code lässt sich relativ einfach an deine Anforderungen anpassen.
da du LIKE schon verwendest, kannst du die Suchoption "enthält" über die Jokerzeichen "*" am Anfang und Ende des Suchbegriffs erreichen, dh gibst du "xyz" ein, werden die Zellen gefunden, in denen genau dieser Text steht, gibst du "*xyz*" ein, die Zellen die diesen Text enthalten
die letzte benutzte Zeile kannst du mit folgendem Code ermitteln:
letzteZeile = Range(Spalte & Rows.count).End(xlup).Row 
was du noch ändern musst ist folgendes:
beim Löschen von Zeilen solltest du immer rückwärts durch die Schleife laufen.
ansonsten überspringst du nach dem Löschen einer Zeile die nächste Zeile, weil diese ja auf den Platz der gelöschten Zeile rutscht und deren Nummer übernimmt, wärend dein Schleifenzähler weiter gezählt wird.
daher besser:
For i = letzteZeile to 10 step -1

aber ganz generell würde ich hier anders vorgehen, nämlich ohne Schleife.
es gibt da schnellere und einfahcherer Methoden:
bspw kannst du den gesuchten Text durch einen Wahrheitswert ersetzen, und dann über die SpecialCells (entspricht dem Inhalte auswählen im Excelmenü) die Zellen mit Wahrheitswert selektieren und löschen:
spalte = Inputbox(...)
suche = Inputbox(...)
With Range(Spalte & ":" & Spalte)
.Replace suche, True, lookat:=xlwhole, MatchCase:=false
.SpecialCells(xlcelltypeconstants, 4).EntireRow.Delete
End with
andererseits musst du das gar nicht programmieren, diese Funktion kannst auch in Excel direkt über die Menüfunktionen mit ein paar Klicks haben:
1. verwende die Menüfunktion SUCHEN von Excel. Dort kannst du in den Optionen einstellen, ob Groß/Kleinschreibung relevant sein soll, oder ob der gesamte Inhalt oder nur ein Teil übereinstimmen muss
2. wenn du die Suche ausführst, klicke auf "Alle Suchen"
3. es öffnet sich ein Fenster, in welchem alle gefundenen Zellen aufgelistet sind.
hier kannst du diese anklicken, dann werden sie auch in der Tabelle markiert, hierbei kannst du auch die mehrfachauswahl mit gedrückter SHIFT-Taste oder auch STRG-A als Tastenkombi verwenden
4. klicke dann mit der rechten Maustaste auf eine markierte Zelle, wähle "Zelle löschen" im Kontextmenü und dann die Option "ganze Zeile"
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige