Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

finde Zellenwert





Frage

Hallo, habe mal wieder eine Frage, und zwar will ich über ein Makro eine Zeile aus einem Tabellenblatt löschen. Allerdings muss die Zeile ersteinmal lokalisiert werden und dazu muß eine Spalte mit dem eingegebenen Wert (string) verglichen werden. Mein erster Ansatz sieht so aus: Abfrage "Name" Schleife 1 bis 1000 vergleiche Name mit Zelle Bx (es muß nur Spalte B vergleichen) wenn Name gleich Zellenwert dann Zeile der Zelle ausgeben und Zeile löschen wenn nicht gleich Schleifenwert um 1 erhöhen solange durchführen bis gleich oder 1000 erreicht Ist mein Ansatz richtig, wie würde das ungefähr in vba aussehen oder gibt es noch eine viel schöne und einfachere Lösung. Vielen Dank strongé

Antwort 1 von Ahnan

Hallo,

so ähnlich gestrikt, wie von dir beschrieben:

Dim i As Integer, erg As String, strMsg As String

Sub Suchen()
erg = InputBox("Bitte den Namen eingeben:")
If erg = "" Then Exit Sub
For i = 1 To 1000
If ActiveSheet.Cells(i, 2).Value = erg Then
strMsg = strMsg & ActiveSheet.Cells(i, 2).Address(False, False) & vbCrLf
ActiveSheet.Rows(i).Delete
End If
Next i
MsgBox "Hier gefunden u. gelöscht:" & vbNewLine & strMsg, vbOKOnly + vbInformation, "In den Zeilen wurde gefunden u. gelöscht !"
End Sub


Dabei wird der zu suchende Name in eine Inputbox eingegeben !

Gruss

Antwort 2 von stronge

Hallo Ahnan,

vielen Dank, sieht so aus als würde es funktionieren. Leider ist mir ein Problem für meinen Anwendungsfall aufgefallen. Und zwar bei dem Vergleich mit der Zelle (i,2). Mein Eintrag ist ein automatischer Verweis auf ein Datenblatt. Sieht so aus: =Name!Z(x)S(y)
Bei der Abfrage gibt der Benutzer natürlich nur den Namen ein und die Zeile muss trotzdem gefunden werden. Eine Idee wie man das macht?
Kann man quasi mit dem Vergleichen, was in der Zelle angezeigt wird?

Vielen Dank erstmal, gruß strongé

Antwort 3 von Ahnan

Hallo,

meinst du Namen die über eine Formel "eingelesen" werden ? Ob diese mit einer Formel (Verweis) oder händisch eingelesen/eingegeben wurden, spielt keine Rolle. Beide werden gefunden. Oder meinst du, dass dann "das Finden" und Löschen in dem entsprechenden Tabellenblatt passieren soll. Also in dem Fall im Blatt "Namen" ?

Gruss

Antwort 4 von stronge

Das erste Tabellenblatt fungiert als eine Übersicht. Dort habe ich zwei Makros installiert. Mit dem einen Makro erstellt man auomatisch nach einer von mir abgelegten Vorlage ein neus Datenblatt. Dieses Datenblatt erhält einen durch den Benutzer eingegebenen Namen und wird dann in der Arbeitsmappe abgelegt. Ausserdem wird auf der Übersicht eine Zeile mit Links, die auf das Datenblatt zugreifen, eingefügt.
Das zweite Makro soll nun, nach Eingabe des Datenblattnamens 1. das entsprechende Datenblatt aus der Arbeitsmappe löschen und 2. die Zeile auf der Übersichtsseite löschen, da dort die Bezüge ja eh nicht mehr funktionieren.

Eigentlich ist alles fast zufriedenstellend gelöst, außer das die richtige Zeile auf dem Übersichtsblatt gelöscht wird. Da aber die Zeile nur aus Links besteht, findet deine erste Lösung nicht die richtige zeile. (siehe oben) "Name" ist eben nicht gleich "=Name!Z(x)S(y)"

Hoffe du verstehst jetzt was ich meine.

Antwort 5 von Ahnan

Wenn ich es richtig verstanden habe, dann möchtest du das Blatt, von dem die Verknüpfung (Link) stammt, löschen. Anschließend auch die entsprechende Zeile deiner Übersichtstabelle, oder ?!
Was heißt bei dir eigentlich Link ? Ist das nur ein Formelverweis, oder steckt da tatsächlich ein Hyperlink dahinter ?

Falls, das "nur" Formelverweise sind (also keine Hyperlinks), dann ist mir nichts "dümmeres" eingefallen, als Hyperlinks von den gefundenen Namen zu erstellen. Anschließend dem Hyperlink folgen u. das aktive Blatt u löschen. Dann zurück in die Übersichtsliste u. die markierte Zeile löschen !

Sub Suchen()
Dim i As Long, erg As String
On Error Resume Next
erg = InputBox("Bitte den Namen eingeben:")
Application.ScreenUpdating = False
If erg = "" Then Exit Sub
For i = 1 To 1000
If ActiveSheet.Cells(i, 2).Value = erg Then
Cells(i, 2).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=ActiveCell.Formula
Selection.Hyperlinks(1).Follow
Application.DisplayAlerts = False
ActiveSheet.Delete
Sheets("Tabelle1").Activate
Selection.EntireRow.Delete
End If
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


Das Makro funktioniert genau wie von mir beschrieben. Diese Zeile:

Sheets("Tabelle1").Activate

musst du entsprechend deiner Übersichtstabelle ändern. Also, anstelle Tabelle1 den Namen der Übersichtstabelle eintragen !

Gruss

Antwort 6 von stronge

Hallo Ahnan,

hab es jetzt hinbekommen. Auch wenn ich jetzt eine etwas andere Lösung hinbekommen habe, hast du mir auf jeden Fall sehr geholfen. Danke

Falls es dich interessiert, hab ich den Code gepostet:

Sub Blatt_loeschen()
´On Error GoTo Err_Blatt_loeschen
Dim Name_SG, DelName_SG As String
Dim i As Integer

´Namen einlesen
Name_SG = InputBox("Bitte gewünschtes SG eingeben, welches aus der Datenbank gelöscht werden soll!", "SG Datenblatt löschen")

´Namen vergleichen und richtige Zeile auf Übersicht löschen
If Name_SG = "" Then
Exit Sub
End If
For i = 7 To 1000
DelName_SG = ActiveWorkbook.Sheets(1).Range("B" & i).Value
If DelName_SG = Name_SG Then
ActiveSheet.Rows(i).Delete
End If
Next i

´Blatt mit Namen löschen
ActiveWorkbook.Sheets(Name_SG).Delete
MsgBox "SG wurde gefunden und gelöscht."

Exit_Blatt_loeschen:
Exit Sub
Err_Blatt_loeschen:
MsgBox "Kein Datenblatt mit diesem Namen gefunden", 16, "Fehlermeldung"
Resume Exit_Blatt_loeschen
End Sub

Antwort 7 von Ahnan

Hallo,

in deinem Fall vergleichst ja nun doch das eigentliche Value der entsprechenden Zelle mit der Eingabe der Inputbox ! Das ist doch mein Lösungsansatz aus 1. Wobei dort noch nicht die Funktion zum Blatt suchen u. ebenfalls löschen gegeben war.
Das:

"Name" ist eben nicht gleich "=Name!..."
bekommst du mit deinem Code so nicht hin.
Naja, hauptsache es geht nun nach deinen Vorstellungen.

Gruss

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: