Suchen vergleichen rechnen - lang und kompliziert
09.10.2003 15:24:09
Fritz
ich habe gestern einen ersten Anlauf wegen meines Problems gemacht und habe
einen Code von ChrisL bekommen (danke nochmals hierfür).
Leider macht der Code nicht das richtige, vielleicht habe ich mich zu undeutlich ausgedrückt, oder aber das Problem ist ZU kompliziert bzw. vielleicht sogar in Excel unlösbar.
Problem:
Tabelle mit 3 Blättern: Berechnung, Eingang, Ausgang
Blatt Eingang
Spalte Q: hier stehen die zu suchenden Größen (die können mehrfach vorkommen, d.h. wenn eine unter Ausgang stand kann sie unter einem späteren Datum im Eingang wieder auftauchen)
Spalte Y: das dazugehörige Datum des Eingangs
Blatt Ausgang
Spalte L: hier stehen die zu findenden Größen (können natürlich auch mehrfach vorkommen, da innerhalb des Auswertezeitraums (1 Jahr) mehrfach Ein- Ausgänge zu verzeichnen sind).
Spalte Y: das dazugehörige Datum des Ausgangs
Blatt Berechung
hier erscheint die Auswertung
Was passieren soll:
Es soll in Eingang Spalte Q der erste Eintrag gelesen werden, hier UBB1, das dazugehörige Datum aus Spalte Y ermittelt: hier 05.08.2003
Dann soll in Ausgang Spalte L nach eben diesem Eintrag (UBB1) gesucht werden, das dazugehörige Ausgangsdatum (hier 27.08.2003) gelesen und die Verweilzeit in Berechung ausgegeben werden:
IN Berechung soll erscheinen:
UBB1 23 Tage Verweilzeit
Dann soll wieder in Eingang der nächste Eintrag gelesen werden, hier IBC3, Datum 10.08.2003 und wiederum mit Ausgang verrechnet werden: hier IBC3, Datum 25.08.2003
Auf Berechnung erscheint: IBC3 16 Tage Verweilzeit
Der nächste IBC3 läuft identisch, Eingang 10.08.2003 Ausgang 25.08.2003
Der nächte ist wieder der UBB1 usw.
Ich habe die Tabelle stark vereinfacht, normalerweise sind die Suchbegriffe wesentlich länger als Ubb1, also z.B. UBB10967345
Das Ergebniss aus den Einträgen der Beispieltabelle sollte also so aussehen:
UBB1 23 Tage
IBC3 11 Tage
IBC3 11 Tage
UBB1 24 Tage
IBC3 23 Tage
Eingangs und Ausgangtag zählen immer mit.
Hier der Code von ChrisL
Option Explicit
Sub Vergleich()
Dim WS1 As Worksheet, WS2 As Worksheet, WS3 As Worksheet
Dim iZeile As Long, Zelle As Range, LetzteZeile As Long
Application.ScreenUpdating = False
Set WS1 = Worksheets("Berechnung")
Set WS2 = Worksheets("Eingang")
Set WS3 = Worksheets("Ausgang")
WS1.Range("A2:C65536").ClearContents
For iZeile = 3 To WS2.Range("Q65536").End(xlUp).Row
If Application.WorksheetFunction.CountIf(WS3.Range("L3:L" & WS3.Range("L65536").End(xlUp).Row), WS2.Cells(iZeile, 17)) > 0 Then
For Each Zelle In WS3.Range("L3:L" & WS3.Range("L65536").End(xlUp).Row)
If Zelle = WS2.Cells(iZeile, 17) Then Exit For
Next Zelle
LetzteZeile = WS1.Range("A65536").End(xlUp).Row + 1
WS1.Cells(LetzteZeile, 1) = Zelle
WS1.Cells(LetzteZeile, 2) = Format(WS2.Cells(iZeile, 25) - WS3.Cells(Zelle.Row, 25), "dd")
If Application.WorksheetFunction.Count(WS3.Range("L3:L" & WS3.Range("L65536").End(xlUp).Row), WS2.Cells(iZeile, 17)) > 1 Then _
WS1.Cells(LetzteZeile, 3) = "Achtung Mehrfacheintrag in Tabelle " & WS3.Name
End If
Next iZeile
Application.ScreenUpdating = True
End Sub
Als Ergebnis liefert er
UBB1 8
IBC3 15
IBC3 15
UBB1 5
IBC3 7
Das stimmt also etwas nicht - wer kann mit bei diesem kompliziertem Problem helfen??
Noch ein Hinweis:
Aufgrund meiner Rohdatenstruktur (Tabelle jährlich) kann es vorkommen das es einen Ausgang (z.B. 03.01.2003) gibt hedoch keine Eingang in der Tabelle, weil dieser im alten Jahr war (z.B. 12.12.2002)
Bei der Berechnung müßte (nach miner Logik) dabei eine negative Verweilzeit rauskommen, weil ja der bis zum nächten Eingang gesucht wird (z.B. 16.01.2003)
für die gesuchte Größe.
In so einem Fall (negativ) muß der erste gelesene Ausgang ignoriert werden und bis zum nächsten gesucht werden.
hier meine Datei:
https://www.herber.de/bbs/user/1357.xls
Danke an alle die sich den Kopf für mich zermartern wollen.
Gruß Fritz
Anzeige