Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
848to852
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
848to852
848to852
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Elseif-Problem

Elseif-Problem
21.02.2007 16:13:00
Emanuel
Hallo Zusammen,
eine kleine Frage hätte ich. Ich habe eine Excel-Liste(ca 10000 Zeilen) die verschiedenste Spalten hat. Nun habe ich vor, mit Hilfe eines Makros diverse Zusammenhänge aus dieser Liste herauszufiltern. Ich habe dazu auch schon ein Makro geschrieben, dieses fiuktioniert jedoch nicht richtig. Derzeit sieht es so aus:

Sub test()
Dim Erf_A_1_M4 As Integer
Dim Erf_A_1_M3 As Integer
ActiveSheet.Range("l2").Select
Do Until ActiveCell.Offset(1, 0).Value = ""
If ActiveCell.Value = "Erfasst" And ActiveCell.Offset(0, 20).Value = ">30" And ActiveCell.Offset(0, 9).Value <> "" Then
Erf_A_1_M4 = Erf_A_1_M4 + 1
ElseIf ActiveCell.Value = "Erfasst" And ActiveCell.Offset(0, 20).Value = ">30" And ActiveCell.Offset(0, 8).Value <> "" Then
Erf_A_1_M3 = Erf_A_1_M3 + 1
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
MsgBox (Erf_A_1_M4 & " Plus " & Erf_A_1_M3)
End Sub

Der erste Wert wird richtig berechnet, der zweite jedoch nicht. Woran liegt das. Wenn ich den zweiten ohne elseif und ohne die erste variable berechne kommt das richtige raus. Woran liegt das? Wie kann ich dass abschaffen?
Danke schon mal im Voraus

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

Betreff
Datum
Anwender
Anzeige
AW: Elseif-Problem
21.02.2007 16:15:56
emanuel
Noch was vergessen:
hinter dem "Erf_A_1_M4 = Erf_A_1_M4 + 1" steht immer noch activecell.offset(1,0).select
AW: Elseif-Problem
21.02.2007 17:34:39
Erich
Hallo Emanuel,
das Problem entsteht dadurch, dass du die zweite Zählung in einem ElseIf-Zweig untergebracht hast.
Da wird nur gezählt, wenn die erste (If-)Bedingung nicht zurtrifft.
Deine Lösung mit vielen Offsets und Selects ist angesichts der 10000 Zeilen eher suboptimal.
So würde sie wohl funzen:
Sub test2()
Dim Erf_A_1_M4 As Integer
Dim Erf_A_1_M3 As Integer
ActiveSheet.Range("L2").Select
Do Until ActiveCell.Offset(1, 0).Value = ""
If ActiveCell.Value = "Erfasst" And ActiveCell.Offset(0, 20).Value = ">30" Then
If ActiveCell.Offset(0, 9).Value <> "" Then
Erf_A_1_M4 = Erf_A_1_M4 + 1
End If
If ActiveCell.Offset(0, 8).Value <> "" Then
Erf_A_1_M3 = Erf_A_1_M3 + 1
End If
End If
ActiveCell.Offset(1, 0).Select
Loop
MsgBox (Erf_A_1_M4 & " Plus " & Erf_A_1_M3)
End Sub
Viel schneller geht es, wenn du Excel rechnen lässt:
Sub test3()
Dim Erf_A_1_M4 As Integer
Dim Erf_A_1_M3 As Integer
Dim lngZ As Long
lngZ = Cells(Rows.Count, "L").End(xlUp).Row
Erf_A_1_M4 = Application.Evaluate("SUMPRODUCT((L2:L" & lngZ & "=""Erfasst"")" & _
"*(U2:U" & lngZ & "<>"""")*(AF2:AF" & lngZ & "="">30""))")
Erf_A_1_M3 = Application.Evaluate("SUMPRODUCT((L2:L" & lngZ & "=""Erfasst"")" & _
"*(T2:T" & lngZ & "<>"""")*(AF2:AF" & lngZ & "="">30""))")
MsgBox (Erf_A_1_M4 & " Plus " & Erf_A_1_M3)
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Elseif-Problem
22.02.2007 09:30:00
Emanuel
Danke Erich,
die zweite Lösung ist super. So hatte ich das ja auch in Excell erst mit Formeln gelöst, wusste jedoch nicht, dass man die Formeln auch so in MAkros einsetzen Kann. Vielen Dank.
Danke für Rückmeldung - Gerne! (oT)
22.02.2007 09:35:28
Erich

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige