AW: Korrektur
02.04.2013 12:18:46
Klaus
Hi,
ich kann dir glaube ich nicht helfen! Du schreibst:
1) Warum erscheint diese Zählewenn Formel überhaupt? In meiner Tabelle sind garkeine Zählewenn _
Formel drin O.o
Wofür ist dieser Code?
'Summewenn Formel einsetzen - auch durch Werte ersetzen?
Tabelle5.Cells(rBereich.Row, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
'Tabelle5.Cells(rBereich.Row, 5).Value = Tabelle5.Cells(rBereich.Row, 5).Value
Tja ... woher soll ich denn wissen, woher dieser Code ist? Den hast du so in deinem Eingangsmakro stehen, dass heisst diese Frage musst DU MIR beantworten!
Vielleicht ist das einfach ein Artefakt aus dem Codefetzen den du dir ursprünglich kopiert hast. Schmeiss diese Zeile doch mal komplett aus dem Makro raus.
2) Er gibt den Wert jetzt genau in der Zeile aus in der er ihn gefunden hat. Das könnte in meiner Zurgundeliegenden Tabelle bald mal sehr weit unten sein. Kann er nicht einfach immer oben anfangen aufzulisten und dann runter?
Achso, DAFÜR war der seltsame i-Counter in deinem Ursprungscode! Ja, der war ja auch innerhalb eines IF gefangen und zählte nicht für jedes EACH mit nach oben, jetzt sehe ich das. Rüge: schlecht kommentierter Code ist schlecht verständlich! (Aber der Code ist ja nicht von dir gewesen)
Probiers mal hiermit, die misteriöse ZÄHLENWENN Zeile habe ich rausgeworfen:
Option Explicit
Public Sub Filter()
Dim lRow As Long
Dim lRow2 As Long
Dim rBereich As Range
'fange in Tabelle5 bei Zeile 1 an zu schreiben
lRow2 = 1
With tabelle2
'letzte Zeile Tabelle 2
lRow = .Cells(.Rows.Count, 15).End(xlUp).Row
'nur relevanten Bereich durchsuchen
For Each rBereich In .Range("O1:O" & lRow)
'modifizierte IF-Formel für drei Stati (plural Status!)
If rBereich.Value = "Begonnen" Or _
rBereich.Value = "Startet" Or _
rBereich.Value = "Läuft" Then
'Zeile kopieren
rBereich.EntireRow.Copy
'Inhalte einfügen, nicht Formeln einfügen
tabelle5.Rows(lRow2).PasteSpecial xlPasteValues
'Zeilenticker erhöhen
lRow2 = lRow2 + 1
End If
Next rBereich
End With
End Sub
Oder noch besser so:
(fängt in Tabelle5 nicht immer bei Zeile 1 an, sondern immer in der ersten freien Zeile)
Public Sub Filter()
Dim lRow As Long
Dim lRow2 As Long
Dim rBereich As Range
'fange in Tabelle5 bei Zeile 1 an zu schreiben
lRow2 = 1
With tabelle2
'letzte Zeile Tabelle 2
lRow = .Cells(.Rows.Count, 15).End(xlUp).Row
'nur relevanten Bereich durchsuchen
For Each rBereich In .Range("O1:O" & lRow)
'modifizierte IF-Formel für drei Stati (plural Status!)
If rBereich.Value = "Begonnen" Or _
rBereich.Value = "Startet" Or _
rBereich.Value = "Läuft" Then
'Zeile kopieren
rBereich.EntireRow.Copy
'Zeile ermitteln
lRow2 = tabelle5.Cells(tabelle5.Rows.Count, 1).End(xlUp).Row + 1
'Inhalte einfügen, nicht Formeln einfügen
tabelle5.Rows(lRow2).PasteSpecial xlPasteValues
End If
Next rBereich
End With
End Sub
Achtung! Spalte A muss immer bis zum Ende gefüllt sein. Wenn es bei dir Spalte C ist, ändere diese Codezeile entsprechend:
lRow2 = tabelle5.Cells(tabelle5.Rows.Count, 3).End(xlUp).Row + 1
(Spalte A = 1, Spalte C = 3 und so weiter)
Grüße,
Klaus M.vdT.