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

If Abfrage

Forumthread: If Abfrage

If Abfrage
26.01.2016 10:32:53
Flo
Hallo zusammen,
Ich benötige Hilfe bei der Richtigstellung eines Codes.
Ich möchte gern eine dreistufige IF abfrage im Visual Basic realisieren.
Dazu sollen 3 Spalten geprüft werden, und wenn alle Argumente stimmen soll die Zeile gelöscht werden.
Sub Filter()
Dim mySheets, oSH As Object
Set mySheets = Sheets(Array("Gestellbau", "Schweißerei"))
For Each oSH In mySheets
Dim varPlan() As Variant, varKW As Variant, varValues As Variant
Dim varRet As Variant
Dim lngR As Long, lngLastRow As Long, lngLastCol As Long
With oSH
lngLastRow = Application.Max(1, .Cells(.Rows.Count, 1).End(xlUp).Row)
lngLastCol = Application.Max(1, .Cells(1, .Columns.Count).End(xlToLeft).Column)
For Z = 2 To lngLastRow
If Cells(Z, 3) = "" Then
If Cells(Z, 4) = "" Then
If Cells(Z, 9)  ZWFA Then cell.EntireRow.Delete
End If
End If
Next Z
End With
Next oSH
End Sub

Zeilen und Spalten werden richtig ermittelt. Funktioniert das auf diese weise überhaupt?
erbitte schnelle Hilfe.
Vielen Danke im voraus,
Mit freundlichen Grüßen
Flo

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If Abfrage
26.01.2016 10:44:19
otto
Hi,
so?
Sub Filter()
Dim mySheets, oSH As Object
Set mySheets = Sheets(Array("Gestellbau", "Schweißerei"))
For Each oSH In mySheets
Dim varPlan() As Variant, varKW As Variant, varValues As Variant
Dim varRet As Variant
Dim lngR As Long, lngLastRow As Long, lngLastCol As Long
With oSH
lngLastRow = Application.Max(1, .Cells(.Rows.Count, 1).End(xlUp).Row)
lngLastCol = Application.Max(1, .Cells(1, .Columns.Count).End(xlToLeft).Column)
For Z = 2 To lngLastRow
If Cells(Z, 3) = "" And Cells(Z, 4) = "" And Cells(Z, 9)  ZWFA Then cell.EntireRow.Delete
Next Z
End With
Next oSH
End Sub
otto

Anzeige
AW: If Abfrage
26.01.2016 10:49:42
Flo
Hallo Otto,
ne da löscht es mir die komplette Tabelle.
:/
Gruß Flo

AW: If Abfrage
26.01.2016 10:52:05
Flo
Die Bedingung soll sein,
dass die Zeilen gelöscht werden sollen, wenn
1. in Spalte "C" eine Zahle steht, Beziehungsweise wenn Spalte 3 leer ist!
2. Wenn in Spalte 4 eine Null Steht
3. wenn in Zeile I ZWFA steht.
Gruß Florian

Anzeige
AW: If Abfrage
26.01.2016 11:06:45
hary
Moin Flo
Da muss erstemal etwas aufgeraeumt werden.
Wenn withanweisung dann must du vor Cells einen Punkt setzen. Ohne ist es das aktive Blatt.
"1. in Spalte "C" eine Zahle steht, Beziehungsweise wenn Spalte 3 leer ist!"
Das mal genauer beschreiben!!
Sub Filter()
Dim mySheets, oSH As Object
Dim lngLastRow As Long, Z As Long
Set mySheets = Sheets(Array("Gestellbau", "Schweißerei"))
For Each oSH In mySheets
With oSH
lngLastRow = Application.Max(1, .Cells(.Rows.Count, 1).End(xlUp).Row)
For Z = lngLastRow To 2 Step -1 '--loeschen immer rueckwaerts
If .Cells(Z, 3) = "" And .Cells(Z, 4) = 0 And .Cells(Z, 9) = "ZWFA" Then
.Rows(Z).Delete
End If
Next Z
End With
Next oSH
End Sub

ungetestet!!
gruss hary

Anzeige
AW: If Abfrage
26.01.2016 11:13:27
otto
HI,
Sub Filter()
Dim mySheets, oSH As Object
Dim varPlan() As Variant, varKW As Variant, varValues As Variant
Dim varRet As Variant
Dim lngR As Long, lngLastRow As Long, lngLastCol As Long
Set mySheets = Sheets(Array("Gestellbau", "Schweißerei"))
For Each oSH In mySheets
With oSH
lngLastRow = Application.Max(1, .Cells(.Rows.Count, 1).End(xlUp).Row)
lngLastCol = Application.Max(1, .Cells(1, .Columns.Count).End(xlToLeft).Column)
For Z = 2 To lngLastRow
If Cells(Z, 3) = "" And Cells(Z, 4) = "0" And Cells(Z, 9) = "ZWFA" Then Rows(Z). _
Delete
Next Z
End With
Next oSH
End Sub
otto

Anzeige
AW: If Abfrage
26.01.2016 11:16:12
Flo
Super, Vielen Dank an Otto und Hary!!
hary tut mir leid wegen der Beschreibung war doof ausgedrückt.
jetzt funktioniert es genau so wie ich es mir vorgestellt hatte!
Danke :)
Gruß Flo

AW: nur zur Info
26.01.2016 11:22:21
hary
Moin
Welchen Code hast du genommen?
gruss hary

AW: nur zur Info
26.01.2016 11:26:33
Flo
Hi,
deine hary,
Otto sein Code funktioniert nicht ganz einwandfrei,
es bleiben einige Zeilen Stehen.
Den Kommentar mit dem Rückwärts löschen fand ich sehr gut.! :)
Gruß Flo

Anzeige
AW: nur zur Info
26.01.2016 11:31:17
hary
Moin
Alles klar,danke.
Bei Otto seinem Code fehlen auch die Punkte, die innerhalb einer Withanweisung gebraucht werden.
Tip: Wenn es viele Daten sind waere es mit find und findnext etwas schneller.
gruss hary

AW: nur zur Info
26.01.2016 11:35:53
Flo
HI,
Wie würde das dann aussehen?
LG Flo

Anzeige
AW: mit find und findnext
27.01.2016 07:21:08
hary
Moin Flo
Wenn z.B. ZWFA in SpalteI nicht in jeder Zelle vorhanden ist.
Es werden die betreffenden Zellen erst gesammelt und dann auf einen Rutsch geloescht(statt einzeln).
Dim rngFind As Range, rDel As Range
Dim firstAddress As String
Dim mySheets, oSH As Object
Set mySheets = Sheets(Array("Gestellbau", "Schweißerei"))
For Each oSH In mySheets
With oSH
Set rngFind = .Columns(9).Find("ZWFA", LookIn:=xlFormulas) '--sucht ZWFA in SpalteI
If Not rngFind Is Nothing Then
firstAddress = rngFind.Address
Do
If .Cells(rngFind.Row, 3) = "" And .Cells(rngFind.Row, 4) = 0 Then
If rDel Is Nothing Then
Set rDel = rngFind
Else
Set rDel = Union(rDel, rngFind)
End If
End If
Set rngFind = .Columns(9).FindNext(rngFind)
Loop While rngFind.Address  firstAddress
End If
End With
If Not rDel Is Nothing Then rDel.EntireRow.Delete
Set rDel = Nothing
Set rngFind = Nothing
Next
End Sub

gruss hary
Anzeige
;

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