With ws.cells(3, 28).resize(10018, 20)
.formulaR1C1 = "=Formel mit R1C1-Adressen"
.formula = .value
End With
Sub Test()
Dim arrWerte(3,4) 'bedeutet Array mit 4x5 "Zellen" - Index beginnt, wenn nicht anders definiert, bei 0
Dim iCnt_1&, iCnt_2&
For iCnt_1 = 0 to 3
For iCnt_2 = 0 to 4
arrWerte(iCnt_1,iCnt_2) = iCNt_1 * iCnt_2 'nur mal so um was berechnetes einzutragen
Next
Next
Range("A1:D5")=Worksheetfunction.Transpose(arrWerte) 'je nach Arrayaufbau transponieren
Dim arrBereich 'fuer 2) zum anschauen
arrBereich = Range("A1:D5").Value
Stop
End Sub
Sub ErgebnisBerechnenUndEinfügenlang()
...hier dein ganzer Code...
End Sub
Sub ErgebnisBerechnenUndEinfügenlang()
Dim ws As Worksheet
Dim i As Integer, j As Integer
Dim result As Variant
Start = Timer
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
' Definiere das Arbeitsblatt zur Aktivierung
Set ws = ThisWorkbook.Sheets("keineWDH16er")
' Bereich AB3 bis AU10 leeren
ws.Range("AB3:AU10").ClearContents
' Durchlaufen der Zellen AB3 bis AU10020
For i = 3 To 10
For j = 28 To 47 ' Spalten AB bis AU
' Spaltenindex für Worksheet "CP2" anpassen
Dim colIndex As Integer
colIndex = j - 25 ' da die Spalten AB bis AU den Index 28 bis 47 haben
' Formel für Prüfung der Übereinstimmung der Werte mit Worksheet "Start"
ws.Cells(i, j).Formula = "=SUMPRODUCT(--(INDEX(Start!$B:$Q,CP2!$" & Chr(64 + colIndex) & "$13,1):INDEX(Start!$B:$Q,CP2!$" & Chr(64 + colIndex) & "$13,16)=GQ" & i & ":$HF" & i & "), --(INDEX(Start!$B:$Q,CP2!$" & Chr(64 + colIndex) & "$13,1):INDEX(Start!$B:$Q,CP2!$" & Chr(64 + colIndex) & "$13,16)=GQ" & i & ":$HF" & i & "))"
' Ergebnis aus der Formel auswerten und in die Zelle einfügen
result = ws.Cells(i, j).Value
ws.Cells(i, j).Value = result
Next j
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.Calculation = xlCalculationManual
MsgBox Format(Timer - Start, "#0.00") & "Sekunden" & Time
End Sub
Sub test()
'Vergleichsdaten in Array uebernehmen - Zeile statt 3 dann variabel gestalten!
arrRng16er = Sheets("keineWDH16er").Range("$GQ3:$HF3").Value
'Schleife ueber 20 Datensaetze
'Voraussetzung: Schrittweite 1 auf CP2 wie im Beispiel!
'dann koennen die "Schrittzahlen" hier berechnet werden
For iCnt1 = 0 To 19
'Zeilennummer aus CP2 C13 uebernehmen
lrow = Sheets("CP2").Cells(13, 3).Value - iCnt1
'Adresse fuer Zeile auf Blatt Start zusammensetzen
rngaddr = "B" & lrow & ":Q" & lrow
'Daten aus Blatt Start in ein Array uebernehmen
arrRngStart = Sheets("Start").Range(rngaddr).Value
'Schleife zum Vergleich ueber 16 "Spalten"
For iCnt2 = 1 To 16
'Bei Gleichheit Ergebnis 1 "hoch"zaehlen
result = result + (arrRng16er(1, iCnt2) = arrRngStart(1, iCnt2))
'Ende Schleife zum Vergleich ueber 16 "Spalten"
Next
'Ergebnis eintragen - Zeilennummer dann variabel bilden
Cells(3, 28).Offset(, iCnt1) = -result
'und zuruecksetzen fuer naechste Berechnung
result = 0
'Ende Schleife ueber 20 Datensaetze
Next
'Hinweis: Bei Formeleintrag per VBA kann man die Formel auch gleich richtig, d.h. ohne INDEX, bilden! z.B.
'Range("AB3").Formula = "=SUMPRODUCT(--(Start!R28C2:R28C17=R3C199:R3C214)*--(Start!R28C2:R28C17=R3C199:R3C214))"
'(natürlich für die variablen Werte auch Variablen einsetzen :-) )
End Sub
Sub test()
Dim arrResults(19), iCnt1%, iCnt2%
'Vergleichsdaten in Array uebernehmen - Zeile statt 3 dann variabel gestalten!
arrRng16er = Sheets("keineWDH16er").Range("$GQ3:$HF3").Value
'Schleife ueber 20 Datensaetze
'Voraussetzung: Schrittweite 1 auf CP2 wie im Beispiel!
'dann koennen die "Schrittzahlen" hier berechnet werden
For iCnt1 = 0 To 19
'Zeilennummer aus CP2 C13 uebernehmen
lrow = Sheets("CP2").Cells(13, 3).Value - iCnt1
'Adresse fuer Zeile auf Blatt Start zusammensetzen
rngaddr = "B" & lrow & ":Q" & lrow
'Daten aus Blatt Start in ein Array uebernehmen
arrRngStart = Sheets("Start").Range(rngaddr).Value
'Schleife zum Vergleich ueber 16 "Spalten"
For iCnt2 = 1 To 16
'Bei Gleichheit Ergebnis 1 "hoch"zaehlen
result = result + (arrRng16er(1, iCnt2) = arrRngStart(1, iCnt2))
'Ende Schleife zum Vergleich ueber 16 "Spalten"
Next
'Ergebnis eintragen - Zeilennummer dann variabel bilden
'Cells(3, 28).Offset(, iCnt1) = -result
'Ergebnis in Array eintragen
arrResults(iCnt1) = -result
'und zuruecksetzen fuer naechste Berechnung
result = 0
'Ende Schleife ueber 20 Datensaetze
Next
'Zeile mit Ergebnissen fuellen
Cells(3, 28).Resize(1, 20) = arrResults
'Hinweis: Bei Formeleintrag per VBA kann man die Formel auch gleich richtig, d.h. ohne INDEX, bilden!
'Range("X3").Formula = "=SUMPRODUCT(--(Start!R28C2:R28C17=R3C199:R3C214)*--(Start!R28C2:R28C17=R3C199:R3C214))"
End Sub
Sub testVar2()
Dim arrResults(19), iCnt1%, iCnt2%
'Vergleichsdaten in Array uebernehmen - Zeile statt 3 dann variabel gestalten!
Start = Timer
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
' Definiere das Arbeitsblatt zur Aktivierung
Set ws = ThisWorkbook.Sheets("keineWDH16er")
' Bereich AB3 bis AU10020 leeren
ws.Range("AB3:AU10020").ClearContents
For i = 3 To 10020
arrRng16er = Sheets("keineWDH16er").Range(Cells(i, 199), Cells(i, 215)).Value
'Schleife ueber 20 Datensaetze
'Voraussetzung: Schrittweite 1 auf CP2 wie im Beispiel!
'dann koennen die "Schrittzahlen" hier berechnet werden
For iCnt1 = 0 To 19
'Zeilennummer aus CP2 C13 uebernehmen
lrow = Sheets("CP2").Cells(13, 3).Value - iCnt1
'Adresse fuer Zeile auf Blatt Start zusammensetzen
rngaddr = "B" & lrow & ":Q" & lrow
'Daten aus Blatt Start in ein Array uebernehmen
arrRngStart = Sheets("Start").Range(rngaddr).Value
'Schleife zum Vergleich ueber 16 "Spalten"
For iCnt2 = 1 To 16
'Bei Gleichheit Ergebnis 1 "hoch"zaehlen
result = result + (arrRng16er(1, iCnt2) = arrRngStart(1, iCnt2))
'Ende Schleife zum Vergleich ueber 16 "Spalten"
Next
'Ergebnis eintragen - Zeilennummer dann variabel bilden
'Cells(3, 28).Offset(, iCnt1) = -result
'Ergebnis in Array eintragen
arrResults(iCnt1) = -result
'und zuruecksetzen fuer naechste Berechnung
result = 0
'Ende Schleife ueber 20 Datensaetze
Next
'Zeile mit Ergebnissen fuellen
Cells(i, 28).Resize(1, 20) = arrResults
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.Calculation = xlCalculationManual
MsgBox Format(Timer - Start, "#0.00") & "Sekunden" & Time
'Hinweis: Bei Formeleintrag per VBA kann man die Formel auch gleich richtig, d.h. ohne INDEX, bilden!
'Range("X3").Formula = "=SUMPRODUCT(--(Start!R28C2:R28C17=R3C199:R3C214)*--(Start!R28C2:R28C17=R3C199:R3C214))"
End Sub
Sub testVar3()
Dim arrResults(1 To 8, 1 To 20), iCnt1%, iCnt2%
'Vergleichsdaten in Array uebernehmen - Zeile statt 3 dann variabel gestalten!
Start = Timer
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
' Definiere das Arbeitsblatt zur Aktivierung
Set ws = ThisWorkbook.Sheets("keineWDH16er")
' Bereich AB3 bis AU10 oder AU10020 leeren
ws.Range("AB3:AU10").ClearContents
'Bereich GQ3:HF10 in 2D Array uebernehmen
arrRng16er = ws.Range(ws.Cells(3, 199), ws.Cells(10, 214)).Value
'Zeilennummer aus CP2!C13 uebernehmen
lrow = Sheets("CP2").Cells(13, 3).Value
'Adresse fuer 20 Zeilen auf Blatt Start zusammensetzen
rngaddr = "B" & lrow & ":Q" & lrow - 19
'Daten aus Blatt Start in ein 2D Array uebernehmen
arrRngStart = Sheets("Start").Range(rngaddr).Value
'Schleife ueber 8 Vergleichszeilen
For i = 1 To 8
'Schleife ueber 20 Datensaetze, beginnend mit hoechster Zeile
'Voraussetzung: Schrittweite 1 auf CP2 wie im Beispiel!
'dann koennen die "Schrittzahlen" hier berechnet werden
For iCnt1 = 20 To 1 Step -1
'Schleife zum Vergleich ueber 16 "Spalten"
For iCnt2 = 1 To 16
'Bei Gleichheit Ergebnis 1 "hoch"zaehlen
result = result + (arrRng16er(i, iCnt2) = arrRngStart(iCnt1, iCnt2))
'Ende Schleife zum Vergleich ueber 16 "Spalten"
Next iCnt2
'Ergebnis in 2D Array eintragen
arrResults(i, 21 - iCnt1) = -result
'und zuruecksetzen fuer naechste Berechnung
result = 0
'Ende Schleife ueber 20 Datensaetze
Next iCnt1
'Ende Schleife ueber 8 Vergleichszeilen
Next i
'Ergebnisbereich mit Ergebnissen fuellen
ws.Cells(3, 28).Resize(8, 20) = arrResults
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox Format(Timer - Start, "#0.00") & "Sekunden" & Time
End Sub