Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1536to1540
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
Inhaltsverzeichnis

Maschinenleistung aus komplexen Bedingungen

Maschinenleistung aus komplexen Bedingungen
01.02.2017 09:35:09
Anton
Guten Morgen Zusammen,
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

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

Betreff
Datum
Anwender
Anzeige
AW: Maschinenleistung aus komplexen Bedingungen
01.02.2017 09:58:42
Daniel
Hi
deine Listen sind kontinuierlich und ohne Lücken ausgebaut.
daher kannst du die Zeilennummern für Datum und Uhrzeit einfach berechnen und musst sie nicht über den Verweis suchen.
Ersetze: VERWEIS($Q4;$A:$A;B:B)="
Durch: Index(B:B;4+$Q4-$A$4)
Ersetze: VERWEIS($R4;$I:$I;J:J)
durch: Index(J:J;4+$R4*4*24)
Gruß Daniel
Dieser wertvolle Hinweis kann noch weiter ...
01.02.2017 10:07:28
lupo1
... gesponnen werden:
Sollten tatsächlich mal viertelstündliche Zeitpunkte fehlen, sind sie trotzdem als Zeilen in den Daten mit aufzunehmen, damit die Berechnung statt Suche auch weiterhin klappt.
AW: Dieser wertvolle Hinweis kann noch weiter ...
01.02.2017 10:14:04
Anton
Danke! Läuft prima. Schade um die VBA-Mühe. Aber gelernt habe ich trotzdem einiges.
VG Anton
Anzeige
VBA geht schon
01.02.2017 20:42:33
Michael
Hi,
ich befürchte zwar, daß Anton die Antwort nie mehr sehen wird, aber es hat mich gejuckt.
Mit VBA geht's ratz-fatz, wenn man die Schleifen richtig macht: https://www.herber.de/bbs/user/111070.xlsm
Die Idee ist, die beiden Tabellen zunächst auszuwerten (links: arr: ON=1, OFF=0; rechts: arr2: ON=1200 (hier dann halt einmalig die Werte aus den Parametern holen, das geht fix) und OFF=0) und dann einfach die Werte in die große Tabelle zu multiplizieren.
Weil es viel mehr OFFs als ONs gibt, sind natürlich weitere Optimierungen denkbar.
Schöne Grüße,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige