Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Jörg,
offensichtlich. :05:
Danke!
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Ralf,
Du musst bei snb's Code nur acht geben, falls Du irgendwo Formeln einsetzt oder noch einsetzen willst. Da in dem Code der komplette Bereich übernommen und dann zurückgeschrieben wird, sind die dann also weg
. \\\|/// 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
22.03.2018, 19:28
(Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2018, 19:28 von Rabe.)
Hallo snb,
hier nun das Ergebnis.
Zu diesem Teil:
Code:
For j = 1 To UBound(sn)
sn(j, 46) = "n.d."
sn(j, 47) = "n.d."
'Datum geliefert:
If IsDate(sn(j, 20)) Then
'Jahr/Monat eintragen
sn(j, 46) = Format(sn(j, 20), "yyyy / mm")
'Jahr/Quartal eintragen
sn(j, 47) = Format(sn(j, 20), "yyyy / q")
End If
Das generelle Setzen von "n.d." vor der Prüfung, ob es ein Datum ist, gefällt mir.
Das Datum wird korrekt eingetragen, nur ist die "Standard"-Formatierung der Zelle wohl nicht richtig, es wird anstelle des / ein . angezeigt.
Der 2. Teil funktioniert korrekt nach Anpasssung der Spalte in sn.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi André,
(22.03.2018, 18:41)schauan schrieb: Du musst bei snb's Code nur acht geben, falls Du irgendwo Formeln einsetzt oder noch einsetzen willst. Da in dem Code der komplette Bereich übernommen und dann zurückgeschrieben wird, sind die dann also weg
Danke, das werde ich mir mal für die Zukunft merken.
Registriert seit: 29.09.2015
Version(en): 2030,5
Benütze einfach:
Code:
sn(j, 46) = Format(sn(j, 20), "yyyy \/ mm")
Registriert seit: 10.04.2014
Version(en): 2016 + 365
23.03.2018, 11:48
(Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2018, 11:49 von Rabe.)
Hallo,
aah, maskieren des /.
Danke, klappt gut.
Nun noch eine Frage, bisher konsolidiere ich die Jahresblätter 2015 - 2018) ja mit dem folgenden Makro, das dauert 250 Sekunden.
Code:
Option Explicit
' ---------------------------------------------------------
'Deklaration der API-Funktion
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Sub Alle_Tabelle_Neu_erstellen()
Dim loLetzte As Long
Dim loZeile As Long
Dim loZeileNeu As Long
Dim j As Long
Dim loStartTime As Long
loStartTime = GetTickCount
'AutoFilter Alle-Tabelle ausschalten
Worksheets("Alle").Activate
'Range("A2:AX2").Select
'If ActiveSheet.AutoFilterMode Then Selection.AutoFilter
With Application
.CalculateBeforeSave = True
.Calculation = xlCalculationManual 'Tabelle Neuberechnung auf Manuell schalten
.ScreenUpdating = False 'Bildschirm akutalisieren ausschalten
End With
'Bestehende Daten löschen
loZeileNeu = 14411 '1.Zeile im Blatt Alle zum einfügen, für 2015: Zeile 14411
Range("A" & loZeileNeu, Range("AX" & loZeileNeu).End(xlDown)).Delete 'ClearContents
loZeile = loZeileNeu
For j = 2015 To year(Now)
With Worksheets(CStr(j))
' If .AutoFilterMode Then Range("A:A").AutoFilter
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
.Range("A2:AR" & loLetzte).Copy
End With
With Worksheets("Alle")
.Range("A" & loZeile).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
loZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1 ' erste freie in Spalte A (1)
End With
'AutoFilter Jahr-Tabelle einschalten
Worksheets(CStr(j)).Select
Range("A1:AR1").Select
If Not ActiveSheet.AutoFilterMode Then Selection.AutoFilter
Range("A2").Select
Next j
'Wiedereinschalten der Autofilterfunktion
Worksheets("Alle").Select
'Range("A2:AX2").Select
'If Not ActiveSheet.AutoFilterMode Then Selection.AutoFilter
Range("A" & loLetzte).Select
With Application
.CalculateBeforeSave = True
.Calculation = xlCalculationAutomatic 'Tabelle Neuberechnung auf AUTOMATISCH
.ScreenUpdating = True 'Bildschirm akutalisieren einschalten
End With
MsgBox "Laufzeit " & _
(GetTickCount - loStartTime) / 1000 & " Sekunden.", _
vbInformation, "Laufzeit des Makros"
End Sub
Kann das durch Umstellung auf dieselbe Programmierung beschleunigt werden?
Code:
sn = Tabelle1.ListObjects("Tabelle24").DataBodyRange
sp = Tabelle2.ListObjects("Tabelle1").DataBodyRange
[...]
Tabelle1.ListObjects("Tabelle24").DataBodyRange=sn
Registriert seit: 29.09.2015
Version(en): 2030,5
23.03.2018, 12:43
(Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2018, 12:43 von snb.)
Meiner Vorschlag beabsichtete die 100% Ersetzung deiner Code.
Hast du mal getestet in der Datei ?
Oder lade mal ein kleine Beispieldatei hoch.