Anzeige

 Aktuellstes Datum in Excel zuordnen


#1
Hallo liebe Helfenden,

ich bin auf der Suche nach einem Script, welches mir erlaubt anhand von Seriennummern (Blatt 1/SpalteA) und Artikelbezeichnung (Blatt1/SpalteB) sämtliche weitere Blätter der Arbeitsmappe zu durchsuchen, um dann das Datum der letzten Bestellung des Artikels in Blatt1/SpalteC zu schreiben.

Es handelt sich quasi um eine von mir gepflegte Excel-Arbeitsmappe in der auf Blatt1 sehr viele Seriennummern und Artikel untereinander jeweils in der richtigen Spalte eingetragen werden.
Auf den nächsten Blättern (2-xyz) werden die einzelnen Seriennummern nochmal aufgeführt, jeweils eine pro Blatt und die einzelnen zugehörigen Artikel.
Unter den Artikeln wird jeweils das Datum der letzten Bestellung geschrieben. Hier benötige ich das aktuellste Datum auf Blatt1 hinter der jeweiligen Seriennummer und dem jeweiligem Artikel automatisch eingetragen.

Ich habe mir schon die Finger wund gesucht, aber leider nichts konkretes gefunden.

Ich denke ich müsste mit einer Schleife arbeiten die in etwa so aussähe:

Suche "Seriennummer aus Spalte1/Zeile1/Blatt1" und "Artikel aus Spalte2/Zeile1/Blatt1"
in "alle anderen Blätter" wenn (z.B.) gefunden in "Blatt2" dann suche "Artikel aus Spalte2/Zeile1/Blatt1" und nimm "aktuellste Datum aus der Spalte des Artikels in Blatt2" und trage es in Spalte3/Zeile1/Blatt1 ein


Natürlich darf dieses Schleife nicht starr sein, sondern die "Zeile1" müsste sich nach jedem Durchgang erhöhen, sodass auch die Seriennummern und Artikel in den nächsten Zeilen abgefragt werden.

Ich hoffe ich konnte es halbwegs verständlich und nachvollziehbar darlegen.
Gern kann ich auch einen Scrennshot von meiner Tabelle anhängen, sollte es so verständlicher werden.

Vielen Dank schonmal im Voraus für eure Hilfe.
 

Yaslaw

n/a
Moderator
#2
Ist halbwegs verständlich
Gegenfragen
1) Ist per zufall die Seriennummer der Name des jeweiligen Arbeitsblattes?
2) Sind die Arbeitsblätter 2-xyz als reine Tabellen? Also erste Zeile Spaltenüberschriften, folgende Zeilen Daten
2) Wo in einem Seriennummer-Arbeitblatt findet sich der Artikel und das Datum?
 

Yaslaw

n/a
Moderator
#3
Wenn du alle 3 mit ja beantworten kannst, dann geht eine einfache Formel
Wobei in A2 die Seriennummer, in B2 die Artikelnummer steht
Code:
=MAXIFS(INDIRECT(A2 & "!B:B");INDIRECT(A2 & "!A:A");B2)
Nachtrag:
Ev. musst du die Befehle noch auf deutsch übersetzen. Ich arbeite mit dem englischen Excel.


2017-02-03_160720.jpg 2017-02-03_160804.jpg
 
Zuletzt bearbeitet:
#4
Hallo Yaslaw,

vielen dank für deine Antwort.
Ja diese Funktion scheint die richtige zu sein.
In deutsch müsste es die MAXWENNS sein....
Allerdings bekommen ich jedes Mal den Fehler #NAME?, so als ob es die Funktion nicht gibt.
Laut Office Support Seite muss es die aber geben....
In der Funktionsübersich unter "Alle" finde ich sie leider auch nicht.
Ich habe Office 2016 mit allen Updates....

Hast du noch einen Tipp dazu?
Vielen Dank.
 

Yaslaw

n/a
Moderator
#5
Hm. Eigentlich müsste es ab Office 2016 drin sein: https://de.excel-translator.de/maxwenns/

Ich habe grad merhere Ansätze, um dies in VBA zu lösen.

1) maxif selber schreiben
Visual Basic:
Public Function myMaxIf(ByRef iMaxRange As Range, ByRef iCriteriaRange As Range, ByVal iCriteria As Variant) As Variant
    Dim rowNr As Long
    rowNr = 1
    Do While Not iCriteriaRange(rowNr, 1) = Empty
        If iCriteriaRange(rowNr, 1) = iCriteria Then
            If myMaxIf < iMaxRange(rowNr, 1) Then myMaxIf = iMaxRange(rowNr, 1)
        End If
        rowNr = rowNr + 1
    Loop
End Function
Aufruf:
Code:
=myMaxIf(INDIRECT(A2 & "!B:B");INDIRECT(A2 & "!A:A");B2)
2) Eine Funktion mit ADODB schreiben
Ich verwende dazu meine Funktionsammlung um ADODB.Recordsets zu erstellen(für die Funktion openRs)
Visual Basic:
Public Function getMaxDateRs(ByVal iSeriennummer As String, ByVal iArtikelId As Long) As Date
    Dim rs As Object
    Dim sql As String
  
    sql = "SELECT MAX(t.datum) AS datum FROM [" & iSeriennummer & "$] AS t WHERE ARTIKEL = " & iArtikelId
    Set rs = openRs(sql)
    rs.movefirst
    getMaxDateRs = rs!datum
    rs.Close
End Function
Aufruf
Code:
=getMaxDateRs(A2;B2)
 
Zuletzt bearbeitet:
#6
Hallo Yaslaw,

danke, dass Du dir so viel Mühe mit meinem Problem machst.
Allerdings geht mir das Scripten etwas über meine Fähigkeiten hinaus :)

Ich konnte aber mit deiner Hilfe ein paar interessante Funktionen herausfinden, sodass ich jetzt auf die =MAX(WENN - Verschachtelung gestossen bin.
Innerhalb eines Arbeitsblattes funktioniert diese auch sehr gut, aber in Kombination mit der INDIREKT-Funktion bekomme ich wieder #NAME? angezeigt...
Danke auch für den Tip mit den Seriennummern als Blattnamen zu verwenden.

Meine Funktion sieht jetzt so aus:
F3=Artikelnummer / Blatt 1
E3=Seriennummer / Blatt 1
A9:A13= Artikelnummern / Blätter XYZ
B9:F13= Lieferdatum / Blätter XYZ

Code:
{=MAX(WENN(F3=(INDIREKT E3 &"!A9:A13");(INDIREKT E3&"!B9:F13");0))}
Vielleicht siehst du ja den Fehler mit deinem geübtem Auge ;-)
 
#7
Ich habs gefunden!
Ich habe die Klammern hinter dem INDIREKT vergessen.
So stimmt´s:
Code:
{=MAX(WENN(F3=(INDIREKT(E3&"!A9:A13"));(INDIREKT(E3&"!B9:F13"));0))}
Vielen vielen Dank für deine Ansätze, Anregungen und Lösungswege.

Von allein hätte ich es nie gepackt!
 
#9
Das ganze hat mich auch jede Menge Hirnschmalz und stundenlanges googlen gekostet, aber ohne deine Hinweise hätte ich niemals gewusst wonach ich überhaupt googlen muss. ;-)
 
Anzeige

Neue Beiträge

Anzeige