Registriert seit: 29.09.2015
Version(en): 2030,5
Code: Sub M_snb()
sn = Tabelle1.ListObjects("Tabelle24").DataBodyRange
sp = Tabelle2.ListObjects("Tabelle1").DataBodyRange
For j = 1 To UBound(sn)
sn(j, 46) = "n.d."
sn(j, 47) = "n.d."
If IsDate(sn(j, 20)) Then
sn(j, 46) = Format(sn(j, 20), "yyyy/mm")
sn(j, 47) = Format(sn(j, 20), "q")
End If
For jj = 1 To UBound(sp)
If sp(jj, 1) = sn(j, 1) Then Exit For
Next
sn(j, 45) = "n.d."
If jj <= UBound(sp) Then sn(j, 45) = sp(jj, 2)
Next
End Sub
Registriert seit: 29.09.2015
Version(en): 2030,5
Code: Sub M_snb()
sn = Tabelle1.ListObjects("Tabelle24").DataBodyRange
sp = Tabelle2.ListObjects("Tabelle1").DataBodyRange
For j = 1 To UBound(sn)
sn(j, 46) = "n.d."
sn(j, 47) = "n.d."
If IsDate(sn(j, 20)) Then
sn(j, 46) = Format(sn(j, 20), "yyyy/mm")
sn(j, 47) = Format(sn(j, 20), "q")
End If
For jj = 1 To UBound(sp)
If sp(jj, 1) = sn(j, 1) Then Exit For
Next
sn(j, 45) = "n.d."
If jj <= UBound(sp) Then sn(j, 45) = sp(jj, 2)
Next
Tabelle1.ListObjects("Tabelle24").DataBodyRange=sn
End Sub
Registriert seit: 10.04.2014
Version(en): 2016 + 365
19.03.2018, 11:27
(Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2018, 11:29 von Rabe.)
Hallo André,
danke, nun habe ich es mit ein paar Anpassungen hinbekommen.
Hier das Makro:
Code: Option Explicit
' ---------------------------------------------------------
'Deklaration der API-Funktion
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Sub Werte_eintragen()
'45,5 Sekunden
Dim loStartTime As Long, i, Kunde$, Ergebnis, KundenTyp$, arrKunde, arrTyp
Dim arrSend, arrLief_JM, arrLief_Q
Dim arrAL, arrAV, arrAW
loStartTime = GetTickCount
'fuer ersten Teil
arrKunde = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(8) 'H
arrTyp = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(45) 'AS
'fuer zweiten Teil
arrSend = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(20) 'T
arrLief_JM = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(46) 'AT
arrLief_Q = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(47) 'AU
'fuer dritten Teil
arrAL = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns("A:L") 'A:L
arrAV = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(48) 'AV
arrAW = Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(49) 'AW
'Ermittle Kunde und Kundentyp
For i = 74 To UBound(arrKunde) '2 Kopfzeilen nicht mitrechnen
Kunde = arrKunde(i, 1)
Ergebnis = Application.Match(Kunde, Tabelle2.ListObjects("Tabelle1").DataBodyRange.Columns(1), 0)
' Set Ergebnis = Columns(1).Find(what:=Kunde, LookAt:=xlWhole)
If IsError(Ergebnis) Then
KundenTyp = "n.d."
Else
KundenTyp = Tabelle2.ListObjects("Tabelle1").DataBodyRange.Columns(2).Cells(Ergebnis, 1) 'Blatt Listen3
End If
arrTyp(i, 1) = KundenTyp
' Next
'Datum geliefert:
If IsDate(arrSend(i, 1)) Then
'Jahr/Monat eintragen
arrLief_JM(i, 1) = Format(arrSend(i, 1), "yyyy") & "/" & Format(arrSend(i, 1), "mm")
'Jahr/Quartal eintragen
arrLief_Q(i, 1) = Format(arrSend(i, 1), "yyyy") & "/" & (-Int(-Month(arrSend(i, 1)) / 3))
Else
arrLief_JM(i, 1) = "n.d."
arrLief_Q(i, 1) = "n.d."
End If
'Suchhilfe
arrAV(i, 1) = arrAL(i, 9) & " " & arrAL(i, 10) & " " & arrAL(i, 12)
'Suchhilfe Seriennummer
If year(arrAL(i, 7)) < 2001 Then
arrAW(i, 1) = "'" & Format(arrAL(i, 6), "000") & Format(arrAL(i, 7), "mm") & Right(arrAL(i, 1), 1)
Else
arrAW(i, 1) = "'" & Format(arrAL(i, 6), "0000") & Format(arrAL(i, 7), "mm") & Format(arrAL(i, 7), "yy")
End If
Next
Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(45) = arrTyp
Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(46) = arrLief_JM
Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(47) = arrLief_Q
Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(48) = arrAV
Tabelle1.ListObjects("Tabelle24").DataBodyRange.Columns(49) = arrAW
MsgBox "Laufzeit " & _
(GetTickCount - loStartTime) / 1000 & " SeKunden.", _
vbInformation, " SeKunden"
End Sub
Diese Zeile bereitet noch Probleme:
arrAW(i, 1) = "'" & Format(arrAL(i, 6), "000") & Format(arrAL(i, 7), "mm") & Right(arrAL(i, 1), 1)
Es wird keine Zahl (letzte Ziffer der Jahreszahl) aus der Spalte A extrahiert für 1998-2000.
Bestellung Test - V2.xlsb (Größe: 683,88 KB / Downloads: 3)
PS: Ich hatte die Nachricht schon gestern abend geschrieben, aber daann vergessen abzuschicken.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Ralf,
Ich übernehme komplette Spalten aus dem DataBodyRange.
Deine Schleife beginnt aber erst bei "74" - ich weiß nicht, wieso - und dort beginnt 2001
Die älteren Jahre bekommst Du, wenn Du die Schleife bei 1 beginnst.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Andrè,
ja das ist klar, aber dann stoppt das Makro in der Zeile
Code: arrAW(i, 1) = "'" & Format(arrAL(i, 6), "000") & Format(arrAL(i, 7), "mm") & Right(arrAL(i, 1), 1)
mit Laufzeitfehler 13 Typen unverträglich
Siehe Anhang des letzten Beitrags.
Dort das Makro so ändern, daß for 1 to ubound... steht und dieses Makro dem Button zuweisen.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Ralf,
das liegt an dem Fehler in F3 Da musst Du schauen, wie Du den wegbekommst.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
21.03.2018, 08:32
(Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2018, 08:33 von Rabe.)
Hi André,
danke. Ich habe die Formel komplett entfernt und durch die Werte ersetzt. Ich habe das ja nur gebraucht, weil ich die Originalzahlen in meiner Musterdatei nicht habe. Dann konnte ich da auch 0001 eintragen.
Nun läuft das Makro durch und benötigt 47,5 Sekunden.
Jörg sagt ja, das geht auch alles mit PQ viel einfacher und schneller.
Das ist nun der nächste Versuch, das mit PQ zu machen:
- Zusammenziehen der ganzen Jahresblätter in das Blatt alle
- Ausfüllen der Spalten AS-AW
Registriert seit: 29.09.2015
Version(en): 2030,5
Registriert seit: 10.04.2014
Version(en): 2016 + 365
22.03.2018, 16:05
(Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2018, 16:05 von Rabe.)
Hi,
ich wollte die anderen Makros zuerst fertig machen.
Ich habe inzwischen auch die Originaldatei bekommen und versuchte es auch damit.
Nun teste ich aber Dein Makro!
Ergebnis folgt.
PS:
Außerdem habe ich die Influenza und bin nicht ganz klar im Kopf!
Registriert seit: 10.04.2014
Version(en): Office 2019
(22.03.2018, 16:05)Rabe schrieb: Hi,
... habe ich die Influenza und bin nicht ganz klar im Kopf!
Hallöchen, bist du also ein Influencer ..? Gute Besserung...
Gruß Jörg
ich muss mich erst wieder ganz langsam heran robben. Also bitte ich um Nachsicht
"Wer immer tut, was er schon kann, bleibt immer das, was er schon ist." - Henry Ford
|