Hallo Beginner,
wie ist das mit Punkt 2a? Soll nur kopiert werden wenn in Spalte B UND Spalte E jeweils eins der beiden Kriterien erfüllt ist. Oder soll nur für eine der beiden Spalten diese Prüfung stattfinden, und was im Gegenkonto steht ist dann egal? Für ersteren Fall, probier mal folgenen Code:
[code]Sub DatenKopieren()
Dim Kopieren As Byte
Blatt2 = "Sheet 2 (originale Daten)"
Blatt1 = "Sheet 1"
Sheets(Blatt1).Select
'Spaltenüberschriften füllen
Range("A1:AC1").WrapText = True
Range("A1:AC1") = Array( _
"CALC.FIELD Kontenklasse Buchung", "CALC.FIELD Kreditor/" & Chr(10) & "Debitor", "Konto", "Datum", _
"CALC.FIELD Posting Calender Day", "CALC.FIELD Posting Date on Weekend", "Buchungsschlüssel", _
"CALC.FIELD Kontenklassen Gegenkonto", "CALC.FIELD Kreditor/" & Chr(10) & "Debitor", "Gegenkonto", _
"Buchungstext", "Belegfeld 1", "Belegfeld 2", "Sollbetrag", "Habenbetrag", "S/H", "CALC.FIELD Betrag", _
"Währung", "CALC.FIELD Betrag konvertiert in text", "Buchungs-stapel", "Buchungsnummer", "KSt", _
"CALC.FIELD Buchungsjahr lt. Buchungsstapel", "CALC.FIELD Buchungsmonat lt. Buchungsstapel", _
"CALC.FIELD Buchungsmonat lt. erfaßte Datum", "CALC.FIELD Abweichung Buchngsmonat lt. Buchungsstapel vs. Erfaßte Datum", _
"CALC.FIELD Kombination Value Konto & Betrag", "CALC.FIELD Marker Identifizierung Gegenbuchungen zur Eleminierung", _
"CALC.FIELD Buchungsstapel & Buchungs-Nr.")
'Spaltenbreiten setzen
Columns("A:C").ColumnWidth = 8.43
Columns("G:I").ColumnWidth = 8.43
Columns("P").ColumnWidth = 8.43
Columns("R").ColumnWidth = 8.43
Columns("U:V").ColumnWidth = 8.43
Columns("D:E").ColumnWidth = 9.43
Columns("F").ColumnWidth = 16.14
Columns("J").ColumnWidth = 13.57
Columns("K").ColumnWidth = 52
Columns("L:O").ColumnWidth = 11.86
Columns("Q:T").ColumnWidth = 12.86
Columns("S").ColumnWidth = 19
Columns("W:AA").ColumnWidth = 19
Columns("AB").ColumnWidth = 34.29
Columns("AC").ColumnWidth = 14.14
'Formate setzen
Columns("D").NumberFormat = "DD.MM.YYYY"
Columns("Q").NumberFormat = "#,##0.00"
Columns("S").NumberFormat = "#,##0.00"
Sheets(Blatt2).Select
lastRow = Cells(Rows.Count, 3).End(xlUp).Row
z = 1
For i = 1 To lastRow
Kopieren = 0
'Betrachtung von Spale B
Select Case Len(Cells(i, 2))
Case 5
Kopieren = Kopieren + 1
Case 6
If Not Left(Cells(i, 2), 1) = "9" Then Kopieren = Kopieren + 1
Case 7
If Not Left(Cells(i, 2), 1) = "7" Then Kopieren = Kopieren + 1
End Select
'Betrachtung von Spale E
Select Case Len(Cells(i, 5))
Case 5, 7
Kopieren = Kopieren + 1
Case 6
If Not Left(Cells(i, 5), 1) = "9" Then Kopieren = Kopieren + 1
End Select
If Kopieren = 2 Then
With Sheets(Blatt1)
z = z + 1
'Datensatz kopieren, wenn zutreffend
.Cells(z, 3) = Cells(i, 2) 'Spalte B kopieren nach Spalte C
.Cells(z, 4) = Cells(i, 3) 'Spalte C kopieren nach Spalte D
.Cells(z, 7) = Cells(i, 4) 'Spalte D kopieren nach Spalte G
.Cells(z, 10) = Cells(i, 5) 'Spalte E kopieren nach Spalte J
.Cells(z, 11) = Cells(i, 6) 'Spalte F kopieren nach Spalte K
.Cells(z, 12) = Cells(i, 9) 'Spalte I kopieren nach Spalte L
.Cells(z, 13) = Cells(i, 10) 'Spalte J kopieren nach Spalte M
.Cells(z, 14) = Cells(i, 11) 'Spalte K kopieren nach Spalte N
.Cells(z, 15) = Cells(i, 12) 'Spalte L kopieren nach Spalte O
.Cells(z, 16) = Cells(i, 13) 'Spalte M kopieren nach Spalte P
.Cells(z, 18) = Cells(i, 15) 'Spalte O kopieren nach Spalte R
.Cells(z, 20) = Cells(i, 18) 'Spalte R kopieren nach Spalte T
.Cells(z, 21) = Cells(i, 19) 'Spalte S kopieren nach Spalte U
.Cells(z, 22) = Cells(i, 20) 'Spalte T kopieren nach Spalte V
End With
End If
Next i
With Sheets(Blatt1)
'Formeln setzen
.Cells(2, 1).FormulaLocal = "=WENN(B2="""";WENN(LÄNGE(C2)=5;0;WERT(LINKS(C2;1)));B2)"
.Cells(2, 2).FormulaLocal = "=WENN(LÄNGE(C2)=7;WENN(LINKS(C2;1)=""7"";""Kreditor"";WENN(LINKS(C2;1)=""1"";""Debitor"";WENN(LINKS(C2;1)=""2"";""Debitor"")));"""")"
.Cells(2, 5).FormulaLocal = "=TAG(D2)"
.Cells(2, 6).FormulaLocal = "=WAHL(WOCHENTAG(D2);""Sun"";""Mon"";""Tue"";""Wed"";""Thu"";""Fri"";""Sat"")"
.Cells(2, 8).FormulaLocal = "=WENN(I2="""";WENN(LÄNGE(J2)=5;0;WERT(LINKS(J2;1)));I2)"
.Cells(2, 9).FormulaLocal = "=WENN(LÄNGE(J2)=7;WENN(LINKS(J2;1)=""7"";""Kreditor"";WENN(LINKS(J2;1)=""1"";""Debitor"";WENN(LINKS(J2;1)=""2"";""Debitor"")));"""")"
.Cells(2, 17).FormulaLocal = "=+N2-O2"
.Cells(2, 19).FormulaLocal = "=TEXT(Q2;""0,00"")"
.Cells(2, 23).FormulaLocal = "=WERT(RECHTS(LINKS(T2;7);4))"
.Cells(2, 24).FormulaLocal = "=LINKS(T2;2)"
.Cells(2, 25).FormulaLocal = "=MONAT(D2)"
.Cells(2, 26).FormulaLocal = "=X2-Y2"
.Cells(2, 27).FormulaLocal = "=C2&Q2"
.Cells(2, 28).FormulaLocal = "=T2&""-""&U2&""-""&WENN(Q2<=0;-Q2;Q2)&""-""&C2*J2"
.Cells(2, 29).FormulaLocal = "=T2&U2"
'Formeln nach unten ziehen
lr2 = .Cells(Rows.Count, 4).End(xlUp).Row
.Range("A2:B2").AutoFill .Range("A2:B" & lr2), xlFillDefault
.Range("E2:F2").AutoFill .Range("E2:F" & lr2), xlFillDefault
.Range("H2:I2").AutoFill .Range("H2:I" & lr2), xlFillDefault
.Range("Q2").AutoFill .Range("Q2:Q" & lr2), xlFillDefault
.Range("S2").AutoFill .Range("S2:S" & lr2), xlFillDefault
.Range("W2:AC2").AutoFill .Range("W2:AC" & lr2), xlFillDefault
.Range("B1").AutoFilter 'Filter setzen
End With
Sheets(Blatt1).Select
End Sub[/code]Punkt 1 hast du ja bereits gelöst, daher hab ich diesen Teil weggelassen. Und die Formeln hab ich aufgrund der Menge mal direkt in den Code kopiert. Deine Addon-formel _xlfn.NUMBERVALUE() hab ich dabei durch WERT() ersetzt, da nicht jeder dieses Addon zur Verfügung hat.
Gruß Mr. K.