Erweiterte Index Funktion

Hey Leute,

ich habe folgende Herausforderung zu meistern.
Zur besseren Erklärung habe ich eine Mini Version meines Excels erstellt und „gescreenshotet“.

Am Screener 1 werden die Stunden eingetragen.
Die Rechnungsnummer kann öfter vorkommen, da unterschiedliche Personen beschäftigt waren.

Nun soll ein Lieferschein gedruckt werden (Screener2). Beim Lieferschein sollte man die Rechnungsnummer auswählen und die entsprechenden Stunden sollten dann pro Tag (nicht als Gesamtzahl) angezeigt werden.

Was ich bereits als Excel Amateur mühevoll geschafft habe - Mit einer Index Formel bekomme ich es hin, dass ich mir die Gesamtstunden pro Zeile am Lieferschein anzeigen lasse:
=WENNFEHLER(INDEX(August!$C$3:$C$6;KGRÖSSTE((August!$A$2:$A$309=$C$9)*(ZEILE(August!$A$2:$A$309)-2);ZÄHLENWENN(August!$A$2:$A$309;$C$9)+1-ZEILE(A1)));"")

Das ist aber leider nur ein Teilerfolg.
Ich habe im Excel am Tabellenblatt Lieferschein den gewünschten SollZustand beschrieben - Wie zum „Henker“ kann ich das angehen bzw. wie kann man das lösen?
Benötigt man dazu ein Makro? Hoffe nicht, denn da bin ich absoluter Neuling…

Für jeden Tipp bin ich dankbar.

Danke Euch!

Hallo,

ich rätsel gerade was du eigentlich vorhast.

Du hast einen Lieferschein der an einen Kunden geht. Ein Lieferschein beinhaltet beispielsweise Preis, Stückzahl von gelieferten Artikeln und Lieferdatum. Arbeitsstunden werden nicht geliefert und Soll-Angaben haben da nichts zu suchen.

Bei der Formel müsste ich erst genauer schauen was sie eigentlich macht aber laut dir gibt sie die Gesamtstunden pro Zeile aus. Die einzigen Zahlen die Gesamtstunden von Zeilen sind, sind die im roten Bereich. Das würde bedeuten dass die Formel nicht korrekt funktioniert, da die Zahlen nach meinem Verständnis „13,5“, „12“ und „4“ sein müssten. Die „13“ ist eine andere Auftragsnummer. Außerdem sind das die Gesamtstunden der einzelnen Mitarbeiter für das jeweilige Projekt. Muss das der Kunde wissen und wenn ja warum stehen dann keine Mitarbeiternamen da?

Im grünen Bereich teilst du die Zahlen für Datum und Mitarbeiter auf ohne die Mitarbeiter dazuzuschreiben. Da wäre wieder die Frage ob der Kunde das überhaupt wissen muss oder ob man nicht einfach die Gesamtstunden pro Tag auflisten könnte. Außerdem benutzt du scheinbar die Zahlen aus der selben Liste. Wenn die Liste Ist-Werte beinhaltet, sind diese im Soll-Bereich falsch.

Wenn du tatsächlich einen Ist- und einen Soll-Bereich benötigst, sollten beide Bereiche auch Werte benutzen die man miteinander vergleichen kann.


Überlege bitte nocheinmal gründlich was genau du machen möchtest und beschreibe das Problem so verständlich wie möglich.

Hinweis: Es ist für Fragesteller und Antwortenden viel einfacher wenn bei Screenshots Zeilen- und Spaltenbeschriftungen zu erkennen sind.

Gruß
Tobias

Hallo Dialux

Benötigt man dazu ein Makro? Hoffe nicht, denn da bin ich absoluter Neuling…

Mit Formeln schaffe ich es nicht. Das gäbe wohl einen riesen Bandwurm! Möglicherweise könnte käme man mit einer der DB-Funktionen zum Ziel.

Klemm Dich doch mal hinter Makros! Ich habe es auch geschafft. Ein Bekannter hatte mir damals erklärt: Mit Excel zu arbeiten und Makros nicht anzuwenden, das ist wie Autofahren, ohne zu wissen, wie man den Rückwärtsgang benutzen muss.

Ich habe ein Makro gebastelt. Es geht davon aus, dass Du eine Monatstabelle „August“ (oder wie auch immer sie heisst) hast. Dazu eine zweite Tabelle, die ich „Lieferschein“ nenne. Ich habe die Tabellen Deinen Printscreens entsprechend nachgebaut. Die entsprechende Datei lade ich hoch. Du kannst dort in der Tabelle „Lieferschein“ auf den Knopf „Start“ drücken, dann wird Dir das gewünschte erledigt.
Test-Datei-Lieferschein

Das Makro muss von der Tabelle Lieferschein aus gestartet werden. Bei mir klappt es.
Grüsse Niclaus

Sub test1()
Dim dbr, dbc 'Datumsbereich in Monatstabelle
Dim wsnameMt   'Name der Monatstabelle
Dim rnr, lscheinzeile   'Rechnungsnummer und Auswertung auf Lieferschein
If ActiveSheet.Name <> "Lieferschein" Then Exit Sub
Range("B16:C30").ClearContents
Range("B16").Select
wsnameMt = InputBox("Welcher Monat?", Environ("UserName"), "Monatsname")
    If wsnameMt = "" Then Exit Sub
rnr = Range("C9")
lscheinzeile = 16
With Worksheets(wsnameMt)
    For dbc = 4 To 40
        For dbr = 3 To 309
            If Not IsEmpty(.Cells(dbr, dbc)) Then
                If .Cells(dbr, 1) = rnr Then
                    Cells(lscheinzeile, 2) = .Cells(1, dbc)
                    Cells(lscheinzeile, 3) = .Cells(dbr, dbc)
                    lscheinzeile = lscheinzeile + 1
                End If
            End If
        Next
    Next
End With
End Sub