18.02.2017, 16:34 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2017, 16:34 von kunstpfluecker.)
Hallo liebes Forum, erstmal großen Respekt davor, was hier aufgebaut wurde! Ich bin über dieses Forum gestolpert, weil ich nicht weiterkomme, bzw. nicht einmal weiß, ob mein Vorhaben in Excel umzusetzen ist.
Ich habe eine Spalte voll mit verschiedenen Werten. Nun möchte ich nach einem bestimmten Wert suchen. Excel soll mir dann:
A) Anzeigen ob der gesuchte Wert existiert und B) Wenn der Wert existiert, ihn automatisch aus der Spalte löschen
Ist das irgendwie umsetzbar? Ich hoffe auf eure Hilfe und sage schon einmal vielen Dank im Voraus!
18.02.2017, 17:29 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2017, 17:29 von atilla.)
Hallo,
hier eine mögliche Variante:
Code:
Sub such() Dim suchSpalte As Long Dim suchWert Dim vntZ
suchSpalte = 1 'Spalte A suchWert = "kuckuck"
vntZ = Application.Match(suchWert, Columns(suchSpalte), 0) If IsNumeric(vntZ) Then MsgBox "Ok, hast mich gefunden!" & vbLf & vbLf & "Tu, was Du tun musst!" Rows(vntZ).Delete 'ganze zeile wird gelöscht 'Cells(vntZ, suchSpalte).ClearContents 'Zellinhalt wird gelöscht Else MsgBox suchWert & " hat sich gut versteckt oder existiert in Spalte " & suchSpalte & " gar nicht!" End If End Sub
Wenn Du damit nicht klar kommst, dann stell bitte einen Tabellenausschnitt mit Beispielwerten ein. Lies dazu die mit wichtig gekennzeichneten Beiträge im Forumskopf.
Edit:
Beim Löschen kann natürlich nur eine der Zeilen im Code ausgeführt werden, deshalb habe ich jetzt die Andere auskommentiert.
Und hier der Code noch einmal angepasst. Er sucht nach dem Wert in B3 und fragt bei Fund noch einmal nach, ob gelöscht werden soll.
Code:
Sub such() Dim suchSpalte As Long Dim suchWert Dim vntZ
suchSpalte = 1 'Spalte A suchWert = Cells(3, 2).Value 'Wert aus Zelle B3 wird gesucht
vntZ = Application.Match(suchWert, Columns(suchSpalte), 0) If IsNumeric(vntZ) Then If MsgBox(suchWert & " wurde in Zelle A" & vntZ & " gefunden!", vbYesNo, "Frage") = vbYes Then ' Rows(vntZ).Delete 'ganze zeile wird gelöscht Cells(vntZ, suchSpalte).Clear 'Zellinhalt wird End If Else MsgBox suchWert & " hat sich gut versteckt oder existiert in Spalte " & suchSpalte & " gar nicht!" End If End Sub
da du ja vorbildlich eine benannte Tabelle nutzt, hier einmal attilas Code angepasst auf die benannte Tabelle.
Ein Vorteil von benannten Objekten für Makroprogrammierung ist, dass die Positionen in den Programmen nicht mehr fest eingegen werden müssen. Wenn ich also die Objekte in der Tabelle verschiebe muss ich das Programm nicht ändern.
Code:
Sub cbLoeschen_Click() Dim vntWert Dim vntZ vntWert = ThisWorkbook.Names("Suchwert").RefersToRange.Value vntZ = Application.Match(vntWert, Range("Tabelle2[Verfügbare Codes]"), 0)
If IsNumeric(vntZ) Then ListObjects("Tabelle2").ListRows(vntZ).Delete Else MsgBox suchWert & " nicht vorhanden!" End If End Sub
Achtung! 1) Ich habe auch der Zelle mit dem Suchwert einen Namen gegeben.(Damit er auch verschoben werden kann ohne das Makro anpassen zu müssen.) 2) Ich habe den manuellen Zeilenumbruch in der Überschrift entfernt.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.