Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array in if-Bedingung verwenden

Forumthread: Array in if-Bedingung verwenden

Array in if-Bedingung verwenden
06.08.2019 12:10:24
Georg
Liebe Mitglieder , ich habe von Arrays wenig Ahnung, daher eine Basic Frage für euch:
wie vewende ich ihn in der If Bedingung unten im Code.
Letztendlich möchte ich nichts anderes, als wenn in Spalte C was Anderes drin steht als die die drei Array Werte, soll die betreffende Zeile gelöscht werden.
Ich hab schon etwas rumprobiert, aber bekomme immer die Meldung "Objekt erforderlich" in der Zeile: If .Cells(lgRow, 3).Value.....
Vielen Dank für die Hilfe!G
Sub BPxWeg()
Dim Skills As Variant
Skills = Array("Skill 1 BSD", "Skill 2 BSD", "TL BSD")
Dim lgRow As Long
Dim i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
lgRow = ws.Cells(Rows.Count, 3).End(xlUp).Row
With ws
For i = 2 To lgRow
If .Cells(lgRow, 3).Value Is Not Skills(1) Then
.Rows.Delete
End If
Next i
End With
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array in if-Bedingung verwenden
06.08.2019 12:26:38
Rudi
Hallo,
versuche

If iserror(application.match(.Cells(lgRow, 3), Skills,0)) Then
Gruß
Rudi
AW: Array in if-Bedingung verwenden..
06.08.2019 12:57:24
Georg
Hallo Rudi, es werden jetzt ALLE Datensätze (Zeilen) gelöscht - auch die mit "Skill 1 BSD" usw., was mir auch wiederum rätselhaft erscheint. Vielleicht kannst du nochmals drüberschauen, DANKE! G
Anzeige
AW: Array in if-Bedingung verwenden..
06.08.2019 13:22:39
Rudi
Hallo,
Sub BPxWeg()
Dim Skills As Variant
Skills = Array("Skill 1 BSD", "Skill 2 BSD", "TL BSD")
Dim lgRow As Long
Dim i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
lgRow = ws.Cells(Rows.Count, 3).End(xlUp).Row
With ws
For i = lgRow To 2 Step -1
If IsError(Application.Match(.Cells(i, 3), Skills, 0)) Then
.Rows(i).Delete
End If
Next i
End With
End Sub

Gruß
Rudi
Anzeige
AW: Array .. vielen Dank Rudi, wunderbar..
06.08.2019 13:46:32
Georg
..Gruß G
;
Anzeige

Infobox / Tutorial

Array in IF-Bedingung verwenden


Schritt-für-Schritt-Anleitung

In diesem Abschnitt zeige ich dir, wie du ein Array in einer IF-Bedingung in VBA verwenden kannst, um Zeilen mit bestimmten Werten zu löschen. Wir verwenden die in dem Forumthread vorgestellte Methode:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke im Projekt-Explorer mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)".
    • Wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub BPxWeg()
       Dim Skills As Variant
       Skills = Array("Skill 1 BSD", "Skill 2 BSD", "TL BSD")
       Dim lgRow As Long
       Dim i As Long
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Worksheets(1)
       lgRow = ws.Cells(Rows.Count, 3).End(xlUp).Row
       With ws
           For i = lgRow To 2 Step -1
               If IsError(Application.Match(.Cells(i, 3), Skills, 0)) Then
                   .Rows(i).Delete
               End If
           Next i
       End With
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus:

    • Drücke ALT + F8, wähle BPxWeg und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Objekt erforderlich"

    • Lösung: Stelle sicher, dass du die richtige Arbeitsblattreferenz verwendest. Der Fehler kann auftreten, wenn ws nicht korrekt gesetzt ist.
  • Problem: Alle Zeilen werden gelöscht

    • Lösung: Achte darauf, dass du die Schleife mit Step -1 durchführst, um von unten nach oben zu iterieren. So verhinderst du, dass beim Löschen von Zeilen die Schleifenindizes durcheinander geraten.

Alternative Methoden

Es gibt verschiedene Methoden, um die gleiche Aufgabe zu erledigen. Eine alternative Methode wäre die Verwendung von Filterfunktionen:

  1. Filtere die Daten:

    • Wähle die Daten in deiner Tabelle aus.
    • Gehe zu Daten > Filter.
    • Setze Filterkriterien auf die Spalte mit den "Skills".
  2. Verwende die AutoFilter-Methode in VBA:

    ws.Range("C1").AutoFilter Field:=3, Criteria1:="<>Skill 1 BSD", Operator:=xlOr, Criteria2:="<>Skill 2 BSD", Operator:=xlOr, Criteria3:="<>TL BSD"

Praktische Beispiele

Hier ist ein Beispiel, wie die Funktion in einer realen Anwendung aussehen könnte:

  • Daten in der Spalte C:

    Skill 1 BSD
    Skill 3 BSD
    Skill 2 BSD
    Skill 4 BSD
  • Nach Ausführung des Makros werden alle Zeilen mit "Skill 3 BSD" und "Skill 4 BSD" gelöscht, da sie nicht im Array enthalten sind.


Tipps für Profis

  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Berücksichtige die Verwendung von With-Blöcken, um deinen Code effizienter und übersichtlicher zu gestalten.
  • Teste das Makro zuerst in einer Kopie deiner Datei, um versehentliche Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich das Array anpassen? Du kannst die Werte im Array einfach ändern, indem du die Einträge in der Zeile Skills = Array(...) anpasst.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, dieser VBA-Code sollte in den meisten Versionen von Excel funktionieren, die VBA unterstützen, einschließlich Excel 2010 bis 2021 und Excel 365.

3. Was mache ich, wenn mein Array mehr als drei Werte hat? Das Array kann beliebig viele Werte enthalten. Füge einfach mehr Werte in die Klammern ein, z.B. Skills = Array("Skill 1 BSD", "Skill 2 BSD", "TL BSD", "Skill 4 BSD").

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige