Microsoft Excel

Herbers Excel/VBA-Archiv

Excel VBA Ermittlung der letzten 3 Besuche


Betrifft: Excel VBA Ermittlung der letzten 3 Besuche
von: Alex R.
Geschrieben am: 29.11.2018 16:05:45

Hallo liebe Excelexperten,

ich würde gerne wissen, wie ich mir die letzten 3 Besuche für jeden Kunden in einem neuen Tabellenblatt anzeigen lassen kann.

Folgender Aufbau:
Tabellenblatt 1-12 sind die Monate des aktuellen Jahres Jan-Dez.
Tabellenblatt 13 wäre die Tabelle für die letzten 3 Besuche aller Kunden.

Die Kunden stehen in Spalte A(Kundenname)/B(Kundennummer) ab Zeile 2.
In Zeile 1 und Spalte C-AG steht das Datum Format: 01.01.2018 (falls der Monat keine 31 Tage hat, werden diese Felder ausgeblendet).
Falls ein Kunde besucht wurde wird in der Zeile des Kunden und bei dem entsprechendem Datum die Kennziffer 1-9 gesetzet (1 = 1 Besuch, 2 = 2 Besuche etc.)

Nehmen wir an Kunde A hat 3 Besuche am (10.01, 21.01 und 30.01.2018 in Tabellenblatt1) und 2 Besuche am (02.02.2018 und 15.02.2018 in Tabellenblatt2).

Wie würde ich mir jetzt die letzten 3 Besuche (30.01.2018, 02.02.2018 und 15.02.2018) für diesen und alle anderen Kunden aus der Tabelle in dem Tabellenblatt 13 auflisten können?

Was zu beachten wäre ist:

-Das im Februar ggf. ein neuer Kunde hinzu gekommen ist, der im Tabellenblatt Januar keine Einträge hat, d.h. Prüfung auf Kundennummer im Tabellenblatt ob dieser vorhanden ist. Falls nur 1-2 Besuche erfolgt sind dann nur diese anzeigen.
-Egal ob ein Kunde 1 oder 9 Mal am gleichen Datum besucht wurde, brauche ich die letzten 3 Datumsangaben zu den letzten 3 Besuchen an unterschiedlichen Tagen und nicht nach Anzahl der Besuche

Tabellenblatt 13:

Aufbau:
A_________/B___________/C(aktuellster Besuch)_____/D_________/E
Kundenname/Kundennummer/Datum1_______________/Datum2____/Datum3
A_________/1___________/15.02.2018_____________/02.02.2018_/30.01.2018
B_________/2___________/10.02.2018_____________/14.01.2018_/-
C_________/3___________/12.02.2018_____________/-_________/-
D_________/4___________/18.02.2018_____________/09.02.2018_/04.02.2018

  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: Alex R.
Geschrieben am: 29.11.2018 16:13:59

Nachtrag:
Zählung der Besuche soll ab dem aktuell laufendem Monat(dynamisch) erfolgen, d.h. in diesem Fall ab November (Tabellenblatt11),
im Monat März(Tabellenblatt3) - Oktober(Tabellenblatt10) waren keine Besuche.


  

Betrifft: Ich denke hier ist eine Musterdatei..
von: UweD
Geschrieben am: 29.11.2018 16:17:26

..angebracht. Das baut keiner nach.


  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: Alex R.
Geschrieben am: 29.11.2018 16:52:55

Hier ist eine Musterdatei:

http://www.herber.de/bbs/user/125768.xlsx


  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: Alex R.
Geschrieben am: 29.11.2018 16:53:47

Hier ist eine Musterdatei:

http://www.herber.de/bbs/user/125768.xlsx


  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: onur
Geschrieben am: 29.11.2018 18:38:02

Die Namen und Kd-Nr müssen bereits auf "Besuchsdatum - Kunden" stehen.
http://www.herber.de/bbs/user/125770.xlsm


  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: Alex R.
Geschrieben am: 29.11.2018 19:38:07

Danke schonmal dafür, das läuft soweit.

Wenn die Reihenfolge der Kunden jedoch anders ist aufgrund von einem neuen Kunden oder einer anderen Sortierung, zieht er sich die falschen Werte, da der Kundenname bzw. die Kundennummer nicht abgeglichen wird.


  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: onur
Geschrieben am: 29.11.2018 19:47:24

Dadurch wird der code natürlich noch komplierter und damit langsamer.

Private Sub CommandButton1_Click()
    Dim z, s, t, m, j, mo, mon, found, z2
    t = Day(Date)
    m = Month(Date)
    j = Year(Date)
    For z = 2 To 1000
        found = 0
        If Cells(z, 1) <> "" Then
            For mo = 12 + m To 1 + m Step -1
                mon = mo - 12
                If mon < 1 Then mon = mon + 12
                For z2 = 2 To 1000
                    If Sheets(mon).Cells(z2, 1) = Cells(z, 1) Then
                        For s = 33 To 3 Step -1
                            If Sheets(mon).Cells(z, s) <> "" Then
                                found = found + 1
                                Cells(z, 2 + found) = Sheets(mon).Cells(1, s)
                                If found = 3 Then GoTo weiter
                            End If
                        Next s
                    End If
                Next z2
            Next mo
        End If
weiter:
    Next z
End Sub



  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: onur
Geschrieben am: 29.11.2018 20:08:03

Sorry, kleiner Fehler:

Private Sub CommandButton1_Click()
    Dim z, s, t, m, j, mo, mon, found, z2
    t = Day(Date)
    m = Month(Date)
    j = Year(Date)
    For z = 2 To 1000
        found = 0
        If Cells(z, 1) <> "" Then
            For mo = 12 + m To 1 + m Step -1
                mon = mo - 12
                If mon < 1 Then mon = mon + 12
                For z2 = 2 To 1000
                    If Sheets(mon).Cells(z2, 1) = Cells(z, 1) Then
                        For s = 33 To 3 Step -1
                            If Sheets(mon).Cells(z2, s) <> "" Then
                                found = found + 1
                                Cells(z, 2 + found) = Sheets(mon).Cells(1, s)
                                If found = 3 Then GoTo weiter
                            End If
                        Next s
                    End If
                Next z2
            Next mo
        End If
weiter:
    Next z
End Sub



  

Betrifft: AW: Excel VBA Ermittlung der letzten 3 Besuche
von: Alex R.
Geschrieben am: 02.12.2018 01:26:05

Ich danke dir, war genau das was ich gebraucht habe und funktioniert bestens :D