Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ganze Zeile löschen mit VAriable

ganze Zeile löschen mit VAriable
17.11.2008 12:37:00
angeldust
Hallo,
ich möchte eine gewünschte Zeile ganz löschen:
Tabelle1.Activate
Rows().Select
Selection.Delete Shift:=xlUp
das will er nicht zeigt, dass die Syntax bei der 2ten Zeile also Rows().Select
falsch sei , davor wird der zeile die eine globale Var. ist ein Wert zugeordnet zB 2
hmmm was mache ich falsch?
Danke sehr
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ganze Zeile löschen mit VAriable
17.11.2008 12:38:42
Hajo_Zi
Hallo Nick,
Excel ist ein vielseitiges Programm und man kann viele Probleme damit lösen. Jede positive Seite hat aber auch negative Aspekte - einer davon ist im Makrorecorder enthalten.
Die Bücher, die es zu Excel VBA gibt, erklären viele Funktionen, aber ich habe bisher nur in einem gelesen, dass der vom Makrorecorder aufgezeichnete Code bereinigt werden sollte.
Der Makrorecorder zeichnet alle Aktionen auf, u. a. auch das Auswählen einer Zelle oder eines eingebetteten Objektes (Bild, Diagramm, Zeichnungsobjekt usw.) dabei wird generell Select und Activate aufgezeichnet. Diese Befehle sind in VBA zu 99,9% nicht notwendig. Sie lassen den Bildschirm flackern und senken die Geschwindigkeit bei der Ausführung des Codes. Man sollte also schon von Beginn an bei der Programmierung darauf achten, solche Befehle zu vermeiden. Meine Erfahrung mit dem Vorsatz: Das mache ich später ist, man schreibt das Programm später meist komplett neu. Also kostest es nicht nur Rechnerzeit sondern auch Deine Zeit und ist Dir Deine Zeit so wenig Wert?
Zum Vergleich mit und ohne Select schau Dir auch mal diese Beispielarbeitsmappe an: mit und ohne select Auf meiner Homepage sind alle meine Beispiele ohne Select. Da kann man sich also einige Lösungsansätze zu diesem Thema ansehen.
Du hast keine Zeile angegeben.

Anzeige
AW: ganze Zeile löschen mit VAriable
17.11.2008 12:51:00
angeldust
doch doch irgendwie gings hier verloren ich habe
Rows(zeile).Select
wobei zeile1 eine glob. Var. ist die eienn wert bekommt zB 2
AW: ganze Zeile löschen mit VAriable
17.11.2008 12:59:00
Hajo_Zi
Hallo Nick,
Dann schreibe nur Rows(Zeile1).Delete
Gruß Hajo
AW: ganze Zeile löschen mit VAriable
17.11.2008 13:34:09
angeldust
hmmm klappt nicht so wie es mir gewünscht habe,
ne andere Sache vielleicht, wie merke ich mir in einer Variablen die Zeilen - Nummer,
in der ZB ein bestimmter Eintrag steht.
zB
man stelle sich vor die einzelnen Eingaben sind in jeweils einer Zelle , zeilenweise
zeilennummer ist akt. 1 es sieht so aus
name1 vorname1 email1 bla blab blabbbal
so ich will jetzt die zeilennummer der Zeile wo als email die email1 steht wie mach ich das? doch per select oder? und dann wie einer Var zuweisen?
vielleicht hilft ja das , danke
Anzeige
AW: ganze Zeile löschen mit VAriable
17.11.2008 13:38:28
Hajo_Zi
Hallo Nick,
zu select lese meinen ersten Beitrag. Das löst man mit Find.

Option Explicit
Sub test()
'   erstellt von Hajo.Ziplies@web.de 12.04.03
Dim Found As Range
Dim LoLetzte As Long
Dim sSearch As String
sSearch = InputBox("Suchbegriff:", , "test")
If sSearch = "" Then Exit Sub
LoLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set Found = Range("C1:C" & LoLetzte).Find(sSearch, Range("C" & LoLetzte), , xlPart, ,  _
xlNext)
'   kompletter Vergleich und Inhalt
'    Set Found = .Range(.Cells(2, 10), .Cells(5753, 10)).Find(ActiveSheet.Cells(I, 54), _
'        .Cells(5753, 10), xlValues , xlWhole, , xlNext)
If Found Is Nothing Then Exit Sub  'falls nicht gefunden wird sub verlassen
MsgBox Found.Address
End Sub


Gruß Hajo

Anzeige
AW: ganze Zeile löschen mit VAriable
17.11.2008 13:48:00
angeldust
ok danke es findet die genaue Adresse... zb &c&2
wie kann ich nun die ganze zeile löschen sprich hier die zeile 2? also automatisch
wenn er die &C&2 als adresse findet sol er gleich die zeile löschen...?
AW: ganze Zeile löschen mit VAriable
17.11.2008 13:51:38
Hajo_Zi
Hallo Nick,
Ein Hallo zu Beginn und ein Gruß am Ende lässt den Beitrag doch gleich viel persönlicher aussehen. Auch wenn Du den Beitrag am Computer eingibst, sind es doch Menschen die den Beitrag lesen und keine Maschinen. Da sollte doch ein wenig Zeit für diese paar Worte da sein.
Falls ich mal einen Brief schreibe, dann steht zu Beginn Hallo … oder eine ähnliche Anrede und zum Schluss ein Gruß ... Ich vermute, bei Dir sieht es nicht viel anders aus. Nach meiner Auffassung ist ein Beitrag so etwas Ähnliches wie ein Brief und weshalb sollte ich mich da zwingen, eine andere Form zu benutzen?
Versuche es auch mal und Dir wird auffallen: wenn sich jeder Benutzer Zeit für höfliche Umgangsformen nimmt, führt das zu einer besseren Unterhaltung im Forum und keiner fühlt sich schlecht behandelt.
Eine Frage auf die Antwort und nicht seinen eiugenen Beitrag, macht sich besser, dann sieht man seine Antwort.
Rows(RaFound.Row).delete
Gruß Hajo
Anzeige
AW: ganze Zeile löschen mit VAriable
17.11.2008 14:10:36
angeldust
Hi Hajo,
sorry wegen der Gestalltung des Beitrags,
hmm könnte ich die Funktion test auch so ummodeln, dass sie einen string übergeben bekommt und die Zeilennummer also an int zurückgibt?

Public Sub test(eingabe as String)
'   erstellt von Hajo.Ziplies@web.de 12.04.03
Dim Found As Range
Dim LoLetzte As Long
Dim sSearch As String
sSearch = eingabe
If sSearch = "" Then Exit Sub
LoLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set Found = Range("C1:C" & LoLetzte).Find(sSearch, Range("C" & LoLetzte), , xlPart, , _
xlNext)
'   kompletter Vergleich und Inhalt
'    Set Found = .Range(.Cells(2, 10), .Cells(5753, 10)).Find(ActiveSheet.Cells(I, 54), _
'        .Cells(5753, 10), xlValues , xlWhole, , xlNext)
If Found Is Nothing Then Exit Sub  'falls nicht gefunden wird sub verlassen
MsgBox Found.Address
End Sub


hmmm am Ende müsste etwas mit zurückgabe...
Danke
MfG
angeldust

Anzeige
AW: ganze Zeile löschen mit VAriable
17.11.2008 14:37:29
Hajo_Zi
Hallo Nick
Variable=Found.Row
Gruß Hajo
AW: ganze Zeile löschen mit VAriable
18.11.2008 11:33:00
angeldust
Hallo Leute
hier eine Funktion die ein String übergeben bekommt in dem eine gesuchte Eingabe ist ,
die Fkt findet oder auch nicht die ZEile in der die Eingabe sich befindet und gibt diese als
int zurück:

Public Function test(eingabe As String) As Integer
Dim Found As Range
Dim LoLetzte As Long
Dim sSearch As String
sSearch = eingabe
If sSearch = "" Then Exit Function
LoLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set Found = Range("C1:C" & LoLetzte).Find(sSearch, Range("C" & LoLetzte), , xlPart, , _
xlNext)
'   kompletter Vergleich und Inhalt
'    Set Found = .Range(.Cells(2, 10), .Cells(5753, 10)).Find(ActiveSheet.Cells(I, 54), _
'        .Cells(5753, 10), xlValues , xlWhole, , xlNext)
If Found Is Nothing Then
MsgBox ("nicht gefunden")
Exit Function
Else
test = Found.Row
End If
End Function



Gruss an die Suchenden

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Ganze Zeile in Excel VBA löschen: Schritt-für-Schritt Anleitung


Schritt-für-Schritt-Anleitung

Um eine ganze Zeile in Excel VBA zu löschen, kannst du die folgenden Schritte befolgen:

  1. Definiere die Variable: Stelle sicher, dass du eine globale Variable für die Zeilennummer hast. Zum Beispiel:

    Dim Zeile1 As Long
    Zeile1 = 2  ' Dies setzt die Zeile, die du löschen möchtest
  2. Verwende den Befehl zum Löschen: Anstelle von Rows(Zeile1).Select, was nicht nötig ist, kannst du direkt Rows(Zeile1).Delete verwenden:

    Rows(Zeile1).Delete
  3. Aktualisiere die Tabelle: Wenn du mehrere Zeilen löschen möchtest, achte darauf, dass du die richtige Zeilennummer verwendest.


Häufige Fehler und Lösungen

  • Fehler bei der Zeilenangabe: Wenn du Rows(<zeile>).Select verwendest, wird ein Fehler angezeigt, weil <zeile> nicht als gültige Variable erkannt wird. Stelle sicher, dass du die Variable ohne spitzen Klammern verwendest: Rows(Zeile1).Delete.

  • Unnötige Select-Anweisungen: Der Makrorecorder fügt oft Select-Befehle hinzu, die nicht notwendig sind. Vermeide diese, um die Ausführungsgeschwindigkeit zu erhöhen.


Alternative Methoden

Eine effektive Methode, um eine Zeile basierend auf einem Suchbegriff zu löschen, ist die Verwendung der Find-Methode. Hier ein Beispiel:

Dim Found As Range
Set Found = Range("C:C").Find("Suchbegriff")
If Not Found Is Nothing Then
    Rows(Found.Row).Delete
End If

Diese Methode sucht in der Spalte C nach dem gewünschten Begriff und löscht die ganze Zeile, in der der Begriff gefunden wurde.


Praktische Beispiele

Hier ist ein Beispiel, wie du eine Funktion erstellen kannst, die einen Suchbegriff akzeptiert und die entsprechende Zeilennummer zurückgibt:

Public Function FindeZeile(eingabe As String) As Integer
    Dim Found As Range
    Set Found = Columns("C").Find(eingabe)
    If Not Found Is Nothing Then
        FindeZeile = Found.Row
    Else
        MsgBox "Nicht gefunden"
        FindeZeile = -1  ' Gibt -1 zurück, wenn nicht gefunden
    End If
End Function

Um dann die Zeile zu löschen, kannst du folgendes nutzen:

Dim ZeilenNummer As Integer
ZeilenNummer = FindeZeile("deinSuchbegriff")
If ZeilenNummer <> -1 Then
    Rows(ZeilenNummer).Delete
End If

Tipps für Profis

  • Vermeide die Verwendung von Select und Activate: Diese Befehle können den Code verlangsamen und sind in der Regel überflüssig.
  • Fehlerbehandlung einbauen: Achte darauf, dass du Fehlerbehandlungsroutinen einfügst, um unerwartete Ergebnisse zu vermeiden.
  • Die Find-Methode optimieren: Du kannst zusätzliche Argumente in der Find-Methode verwenden, um die Suche zu verfeinern (z.B. nach Ganzzahlsuche oder Teilübereinstimmung).

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zeilen auf einmal löschen?
Du kannst eine Schleife verwenden, um mehrere Zeilen nacheinander zu löschen, indem du die Zeilennummern in einer Liste speicherst.

2. Was ist der Unterschied zwischen Delete und Clear?
Delete entfernt die gesamte Zeile, während Clear nur den Inhalt der Zelle entfernt, die Zeile jedoch beibehält.

3. Kann ich die Zeile löschen, ohne sie vorher auszuwählen?
Ja, du kannst direkt Rows(Zeile).Delete verwenden, ohne die Zeile vorher auszuwählen.

4. Wie kann ich sicherstellen, dass ich die richtige Zeile lösche?
Du kannst die Find-Methode verwenden, um gezielt nach einem bestimmten Wert zu suchen, bevor du die Zeile löschst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige