in folgender Tabelle https://www.herber.de/bbs/user/111049.zip befinden sich im Blatt Zeitraum eine Tagesmatrix eine Zeitraummatrix in Viertelstunden abgebildet sowie eine Matrix in welche die Leistung eingetragen wird, wenn z.B. Maschine 1 am 01.01.2016 sowie zu bestimmten Uhrzeiten gelaufen ist ("ON"), soll 1200 (Im Beispiel "Hat geklappt!") in die jeweilige Zelle eingetragen werden. Da in der dritten Matrix alle Tage im Viertelstundentakt abgebildet sind, komme ich hier ca. auf 35000 Datensätze (Hier nur ein Ausschnitt).
Die Leistungswerte wurden bisher über die Formel
=WENN(WENN(VERWEIS($Q4;$A:$A;B:B)="ON";VERWEIS($R4;$I:$I;J:J);"OFF")="ON";Parameter!$D$30;0)
in z.B. S4 berechnet. Das Parameterblatt ist hier nicht mit in der Mappe, da es nur für die Auswahl von Datum und Leistungswerten gedacht ist. Habe versucht es mit VBA zu beschleunigen mit folgendem Skript:
Sub Test2()
Dim arr() As Variant
Dim arr2() As Variant
Dim arr3() As Variant
Dim wksBlatt As Worksheet
Dim wksParamas As Worksheet
Dim wksOutput As Worksheet
Dim wksoutput2 As Worksheet
Dim z As Long
Dim y As Long
Dim x As Long
Dim i As Long
Set wksBlatt = ThisWorkbook.Worksheets("Zeitraum")
Set wksParams = ThisWorkbook.Worksheets("Parameter")
Set wksoutput2 = ThisWorkbook.Worksheets("Tabelle5")
With wksBlatt
arr = .Range("A4:G369")
arr2 = .Range("I4:O99")
arr3 = .Range("Q4:X35139")
For i = LBound(arr3) To UBound(arr3)
For z = LBound(arr) To UBound(arr)
If CLng(arr(z, 1)) = CLng(arr3(i, 1)) And arr(z, 2) = "ON" Then
For y = LBound(arr2) To UBound(arr2)
If arr2(y, 2) = "ON" Then
For x = LBound(arr3) To UBound(arr3)
If CLng(arr3(x, 1)) = CLng(arr3(i, 1)) And arr3(x, 2) = arr2(y, _
1) Then
arr3(x, 3) = "Hat geklappt!"
End If
Next x
End If
Next y
End If
Next z
Next i
wksoutput2.Range(wksoutput2.Cells(1, 1), wksoutput2.Cells(i, UBound(arr3, 2))) = arr3
End With
End Sub
Das dauert für eine Maschine schone eine halbe Ewigkeit. Hat jemand vielleicht eine smartere und schnellere Lösung? Meine Bedingung ist einfach zu komplex aber ich weiß nicht wie ich diese vereinfachen kann. Danke für Eure Hilfe.
VG Anton