18.02.2017, 15:34 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2017, 15: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, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2017, 16: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.