Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1468to1472
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

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

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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige