Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1464to1468
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro das Zeilen mit fortlaufendem Datum kopiert

Makro das Zeilen mit fortlaufendem Datum kopiert
15.12.2015 16:32:59
Mario
Hallo zusammen,
ich habe ein Tabellenblatt in dem alle Güter aufgelistet werden, die abzuschreiben sind (jeweils nur 1 Zeile). Dort werden die Monatsabschreibungsraten automatisch berechnet. Jetzt wollte ich fragen ob es möglich ist, mit einem Makro automatisch so viele Zeilen von jedem Gut zu generieren wie in der Spalte Nutzungsdauer (Gibt die Anzahl an Abzuschreibenden Monaten an) angegeben sind. In der Spalte Eingangsdatum, soll dann ein fortlaufendes Datum angezeigt werden (jeweils ein fortlaufender Monat). Und das eben so lange/oft wie die Nutzungsdauer angibt.
Beispieldatei hab ich zur Verständlichkeit hochgeladen:

Die Datei https://www.herber.de/bbs/user/102273.xlsx wurde aus Datenschutzgründen gelöscht


Im Beispiel: Es soll quasi für "Homepage" 59 weitere Zeilen einfügen und bei "Eingangsdatum" jeweils den Monat fortschreiben (20.02.2015; 20.03.2015; usw.)
Kann mir da jemand weiterhelfen? :)
Grüße
Mario

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro das Zeilen mit fortlaufendem Datum kopiert
15.12.2015 17:44:14
Daniel
Hi
da du VBA - Nein angegeben hast ist dir mit einer Formellösung vielleicht besser geholfen als mit einem Makro.
Schau dir mal das Beispiel an.
von mir eingefügte Formeln habe ich grün gefärbt, gleiche Formeln (dh mit "Ziehen" erweiterbar) haben das gleiche Grün, unterschiedliche Formeln unterschiedliche grüns.
https://www.herber.de/bbs/user/102276.xlsx
kleine Anmerkung noch:
damit das Hochzählen der Monate problemlos funktioniert, werden Datumswerte am Monatsende auf den 28. vorverlegt (29/30/31 = 28), das vermeidet die Probleme beim Monatswechsel von Jan auf Feb (31.Feb = 3.Mrz).
Gruß Daniel

Anzeige
AW: Makro das Zeilen mit fortlaufendem Datum kopiert
15.12.2015 18:03:13
Mario
Hi Daniel,
vielen Dank für deine Hilfe. So würde es auf jeden Fall funktionieren. Das Problem ist nur, dass ich in Zukunft nicht mit dem File arbeiten werde, sondern meine Kollegin. Und diese soll so wenig wie möglich in dem Tabellenblatt machen müssen.
Die Zeilen, die du in meiner Beispieldatei gesehen hast werden automatisch durch ein Makro von einem anderen Tabellenblatt gezogen. Daher wär es optimal, wenn man ein Makro schreiben kann, das die Zeilen per Knopfdruck kopiert und das Datum fortschreibt. Sonst muss ich meiner Kollegin beibringen, dass sie jedes Mal per Hand die Formeln runterziehen muss.
Trotzdem nochmal vielen Dank für deine Hilfe. Würde ich damit arbeiten wäre das auf jeden Fall passend :)
Kannst du mir evtl. auch mit einem Makro dafür weiterhelfen?
Grüße
Mario

Anzeige
AW: Makro das Zeilen mit fortlaufendem Datum kopiert
15.12.2015 19:01:52
Daniel
Hi
naja, du brauchst halt jemanden, der mit Makros umgehen und diese ggf an geänderte Anforderungen anpassen und Fehler korrigieren kann.
hier wäre mal ein Code, welcher das Blatt kopiert und dabei die Zeilen entsprechend der Vorgabe in Spalte 13 dupliziert.
viel Spass damit:
Sub test()
Dim rngZeileQuelle As Range
Dim lngZeileZiel As Long
Dim rngQuelle As Range
Dim lngAnzahlZeilen As Long
'--- Quellbereich ohne Überschrift in Variable schreiben
Set rngQuelle = Sheets("Tabelle1").Cells(7, 1).CurrentRegion
Set rngQuelle = rngQuelle.Offset(1, 0).Resize(rngQuelle.Rows.Count - 1)
lngZeileZiel = 8
'--- Überschriften kopieren
Sheets("Tabelle1").Range("7:7").Copy Sheets("Tabelle2").Cells(1, 1)
'--- Zeilen kopierne und duplizieren
For Each rngZeileQuelle In rngQuelle.Rows
lngAnzahlZeilen = rngZeileQuelle.Cells(1, 13).Value
rngZeileQuelle.Copy
Sheets("Tabelle2").Cells(lngZeileZiel, 1).Resize(lngAnzahlZeilen).PasteSpecial xlPasteAll
lngZeileZiel = lngZeileZiel + lngAnzahlZeilen
Next
'--- Datumsfolge einfügen
With Sheets("Tabelle2").Cells(8, 2).Resize(lngZeileZiel - 8)
.FormulaR1C1 = "=IF(R[-1]C1RC1,VlookUp(RC1,Tabelle1!C1:C2,2,0),Date(Year(R[-1]C),Month(R[- _
1]C)+1,Min(28,Day(R[-1]C))))"
.Formula = .Value
End With
End Sub
ist anzuwenden auf deine Beispieldatei und funtkioniert auch damit, die Anzahl der Zeilen ist natürlich dynamisch und passt sich an.
Zeile 6 muss eine Leerzeile sein.
In den Daten selbst dürfen dann keine Leerzeilen vorkommen.
Gruß Daniel

Anzeige
AW: Makro das Zeilen mit fortlaufendem Datum kopiert
16.12.2015 11:02:27
Mario
Hi,
ja da hast du Recht. Es wär wirklich von Vorteil jemanden hier zu haben der sich mit Makros auskennt. Aber so ist es leider nicht..
Vielen Dank, der Code funktioniert :)
Kann man den Code auch so umschreiben, dass das ganze im gleichen Tabellenblatt geschieht? In der Beispieldatei quasi in Tabellenblatt 1. Was mir gerade einfällt ist noch, wenn nach ausführung des Makros ein neues Gut hinzukommt und man dann das Makro aktiviert, funktioniert es dann immernoch richtig?
Grüße
Mario

AW: Makro das Zeilen mit fortlaufendem Datum kopiert
16.12.2015 12:46:40
Daniel
Hi
der Code ermittelt selbstständig, wie gross die Liste ist, dh wenn du die Liste erweiterst, dann kannst du den Code einfach nochmal laufen lassen um sie neu zu erstellen.
wenn du die Einzelliste nachträglich erweitern willst, dann darfst du sie dir nicht überschreiben und daher ist es auch nicht sinnvoll, die Monatsaufteilung im gleichen Blatt zu machen.
wenn du die Monatsaufteilung im selben Blatt machen willst, dann kannst du sie ja unterhalb der Ausgangstabelle einfügen.
Die Ausgangstabelle muss aber erhalten bleiben, solange das Makro läuft, weil das Makro selbst die Ausgangstabelle benötigt.
Bei der Formellösung reicht bei neuen Daten aus, die Formeln einfach nach unten weiter zu ziehen.
Gruß Daniel

Anzeige
AW: Makro das Zeilen mit fortlaufendem Datum kopiert
16.12.2015 13:41:51
Mario
Hi,
alles klar. Danke dir vielmals! :)
Dann werde ich es mit 2 Tabellenblättern beibehalten.
Vll kannst du mir bei folgendem Problem auch noch weiterhelfen:
Und zwar habe ich ein Makro, dass die Güter der Einzelliste aus einem anderen Tabellenblatt ("Verbindlichkeiten") nach Capex übernimmt. Im Blatt Capex sind Formeln zur Berechnung der Abschreibungsraten und zur Berechnung des Enddatums etc vorhanden. Das besagte Makro überschreibt diese dann aber leider mit einem leeren Feld (wenn das Feld in der Ursprungstabelle "Verbindlichkeiten" leer stand) sodass keine Formeln mehr enthalten sind. Kann man folgendes Makro evtl. so umschreiben, dass die Formeln im Blatt "Capex" erhalten bleiben. Das wär echt super:)
Hier noch der Code von besagtem Makro:
Private Sub CommandButton5_Click()
CommandButton5.Caption = "CAPEX ausbuchen"
Dim rng As Range
Dim lngNext As Long, lngR As Long
Dim CalculationMode As Long
Const cstrView As String = "tempView"
On Error GoTo ErrorHandler
With Application
.ScreenUpdating = False
.EnableEvents = False
CalculationMode = .Calculation
.Calculation = xlManual
.DisplayAlerts = False
End With
ThisWorkbook.CustomViews.Add cstrView, True, True
With Sheets("Verbindlichkeiten").Range("A7").CurrentRegion
.AutoFilter
.AutoFilter Field:=12, Criteria1:="=CAPEX"
On Error Resume Next
Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells( _
xlCellTypeVisible)
On Error GoTo 0
End With
If Not rng Is Nothing Then
With Sheets("CAPEX")
lngNext = Application.Max(8, .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
rng.Copy .Cells(lngNext, 1)
For lngR = lngNext To Application.Max(lngNext, .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
.Cells(lngR, 15) = .Cells(lngR, 5).Value: .Cells(lngR, 5) = ""
.Cells(lngR, 14) = .Cells(lngR, 6).Value: .Cells(lngR, 6) = ""
Next
rng.Delete
End With
End If
Sheets("Verbindlichkeiten").Range("A7").CurrentRegion.AutoFilter
With ThisWorkbook
.CustomViews(cstrView).Show
.CustomViews(cstrView).Delete
End With
ErrorHandler:
With Err
If .Number  0 Then
MsgBox "Fehler in Prozedur:" & vbTab & "'nn'" & vbLf & String(25, "—") & _
vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
"Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
.Description & vbLf, 81968, "VBA - Fehler in Prozedur - capex", .HelpFile, .HelpContext
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalculationMode
.DisplayAlerts = True
.StatusBar = False
End With
End Sub
Grüße und Vielen Dank im Voraus
Mario
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige