Ich habe diesen Code, der die Excel-Zeile eines Elements aus einer Liste findet und die Elemente aus einer Liste löscht. Was ich möchte, ist, die Excel-Zeile ebenfalls zu löschen.
Der Code ist hier
Private Sub imperecheaza_Click()
Dim ws As Worksheet
Dim Rand As Long
Set ws = Worksheets("BD_IR")
Rand = 3
Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
ws.Range(Rand, 1).EntireRow.Delete '(here I want to delete the entire row that meets the criteria from the If statement)
gksluri.RemoveItem gksluri.ListIndex
Exit Do
End If
Rand = Rand + 1
Loop
End Sub
Wo ich ws.Range hinzugefügt habe (Rand, 1) .EntireRow.Delete ist, wo ich die gesamte Zeile löschen möchte, aber ich weiß nicht, wie ich das machen soll. Was ich möchte ... wenn in einer Zelle derselbe Wert wie in einem ausgewählten Element meiner Liste gefunden wird, um sowohl die gesamte Zeile in Excel als auch das Element aus dem Listenfeld entfernen zu können. Es funktioniert, um das Element aus dem Listenfeld zu entfernen, aber ich weiß auch nicht, wie man die Zeile entfernt
Die Lösung von Chris Nielsen ist einfach und funktioniert gut. Eine etwas kürzere Option wäre ...
ws.Rows(Rand).Delete
Beachten Sie, dass beim Löschen einer Zeile keine Verschiebung angegeben werden muss, da per Definition keine Verschiebung nach links möglich ist
Meine bevorzugte Methode zum Löschen von Zeilen ist übrigens die Verwendung von ...
ws.Rows(Rand) = ""
... in der Anfangsschleife. Ich verwende dann eine Sortierfunktion, um diese Zeilen an den unteren Rand der Daten zu verschieben. Der Hauptgrund dafür ist, dass das Löschen einzelner Zeilen eine sehr langsame Prozedur sein kann (wenn Sie> 100 löschen). Es stellt auch sicher, dass nach Robert Ilbrinks Kommentar nichts übersehen wird
Sie können den Code zum Sortieren lernen, indem Sie ein Makro aufzeichnen und den Code reduzieren, wie in diesem Experten-Excel-Video gezeigt. Ich habe den Verdacht, dass die sauberste Methode (Range ("A1: Z10"). Sort Key1: = Range ("A1"), Order1: = xlSortAscending/Descending, Header: = xlYes/No) 2007-Versionen von Excel ... Sie können jedoch den äquivalenten Code 2007/2010 immer reduzieren
Weitere Punkte verbinden ... Wenn Ihre Liste noch nicht nach einer Spalte sortiert ist und Sie die Reihenfolge beibehalten möchten, können Sie die Zeilennummer 'Rand' in einer freien Spalte rechts von jeder Zeile anbringen, während Sie durchlaufen. Sie würden dann nach diesem Kommentar sortieren und ihn entfernen
Wenn Ihre Datenzeilen Formatierungen enthalten, möchten Sie möglicherweise das Ende des neuen Datenbereichs ermitteln und die zuvor gelöschten Zeilen löschen. Das ist, um die Dateigröße gering zu halten. Beachten Sie, dass ein einzelnes großes Löschen am Ende des Vorgangs die Leistung Ihres Codes nicht auf dieselbe Weise beeinträchtigt wie das Löschen einzelner Zeilen
Besser noch, verwenden Sie union, um alle Zeilen zu packen, die Sie löschen möchten, und löschen Sie sie alle auf einmal. Die Zeilen müssen nicht kontinuierlich sein.
dim rng as range
dim rDel as range
for each rng in {the range you're searching}
if {Conditions to be met} = true then
if not rng is nothing then
set rDel = union(rng,rDel)
else
set rDel = rng
end if
end if
next
rDel.entirerow.delete
Auf diese Weise müssen Sie sich keine Sorgen um das Sortieren machen oder Dinge, die sich unten befinden.
Ändern Sie Ihre Zeile
ws.Range(Rand, 1).EntireRow.Delete
zu
ws.Cells(Rand, 1).EntireRow.Delete
So etwas wird es tun:
Rows("12:12").Select
Selection.Delete
In Ihrem Code würde es ungefähr so aussehen:
Rows(CStr(Rand) & ":" & CStr(Rand)).Select
Selection.Delete