10.7k Aufrufe
Gefragt in Tabellenkalkulation von florian1010 Mitglied (754 Punkte)
Hallo an alle,

beim stöbern hier im Forum habe ich schon folgendes passende Makro gefunden:


Option Explicit

Sub Zeile_zusätzlich()
'
Rows(ActiveCell.Row).Insert Shift:=xlDown
Rows(ActiveCell.Row - 1).Copy Range("A" & ActiveCell.Row)
End Sub


Dieses erstellt mir eine neue Zeile mit allen Formeln der Zeile über der Markierung.

Jetzt brauche ich allerdings in Spalte A eine Fortlaufende Nummer. Sprich das Makro soll die Zahl automatisch +1 Zählen.

Kurzes Beispiel wie es aussehen soll: In A1 steht 500, nun soll beim einfügen der neuen Zeile mit dem Makro automatisch in B1 nun 501 stehen usw.

Das non plus ultra wäre, wenn das Makro automatisch Zeilen mit Formeln immer bis Zeile 598 auffüllt, da immer wieder Zeilen komplett rauskopiert werden und in Zeile 600 immer eine Zusammenfassung stehen soll.

DANKE schon mal für eure Antworten

15 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

schau mal, ob ich dich richtig verstanden habe:

Sub Zeile_zusätzlich()
'
Dim zeile as Long

Rows(ActiveCell.Row).Insert Shift:=xlDown

For zeile = 2 To 598
Rows(1).Copy Range("A" & zeile)
Cells(zeile, 1) = Cells(zeile - 1, 1).Value + 1
Next zeile

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.

Danke schon mal für deine Bemühungen.

Leider funktioniert es (zumindest bei mir) nicht. Excel bringt mir bei

Cells(zeile, 1) = Cells(zeile - 1, 1).Value + 1
Next zeile

"Laufzeitfehler '13': Typen unverträglich".

Ich bin mir nicht ganz sicher, ob die Formel richtig ist, da in Spalte A fortlaufende Nummern schon existieren, ich aber nie genau weiß, wie viele Zeilen innerhalb der fortlaufenden Nummern rausgelöscht/rauskopiert wurden und ich demnach nicht weiß, wo und wie viele Nummern einzufügen sind. Dennoch soll die letzte fortlaufende Nummer (lieget irgendwo zwischen 6 und 598) um eins ergänzt werden.

Gruß Florian
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

wie sind die Zeilenzahlen denn formatiert?
Du schreibst jetzt, dass die letzte fortlaufende Nummer erhöht werden soll.

Mein Beispielmakro nimmt die Nummer in Zeile 1 und erhöht diese um 1. Hast du in der 1. Zeile eine Überschrift stehen, dann funktioniert das nicht. Dann musst du die For-Zeile wie folgt ändern:

For zeile = 3 To 598


Soll die letzte vorhandene Nummer um eins erhöht werden, müsste das Makro noch geändert werden.

Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.

hier die Datei. Ich denke, es wird so etwas übersichtlicher was ich meine.

Die Summenfassung muss immer bei Zeile 600 liegen. Hab extra Platz zum einfügen gelassen.

Gruß

Florian

[url]http://www.file-upload.net/download-4782352/LAGER-GESAMT-TESTOBJEKT.xlsm.html[/url]
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

die Datei hab ich jetzt, aber was willst du genau?

Klar ist: Zeile einfügen und Formeln aus Zeile darüber kopieren

Aber welche Nummer soll jetzt eingefügt werden?
Die nächste höhere Nummer (gesamt) oder die Nummer aus der Zeile vorher +1? Oder kann die Nummerierung komplett neu erstellt werden?

Gruß

M.O.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

ich habe das Makro mal so geschrieben, wie ich es verstanden habe:

Sub Zeile_zusätzlich()
'
Dim zeile, lnummer As Long
Dim myRange As Range

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'höchste Zahl im Bereich zwischen A2 und A598 ermitteln
Set myRange = Worksheets("Übersicht").Range("A2:A598")
lnummer = Application.WorksheetFunction.Max(myRange)

'Zeile Einfügen
Rows(ActiveCell.Row).Insert Shift:=xlDown
'neue Nummer einfügen: höchste Nummer plus 1
Cells(ActiveCell.Row, 1) = lnummer + 1

'Die Zellen mit den Formeln, Spalten P bis T werden bis Zeile 598 kopiert
For zeile = 3 To 598
Range(Cells(2, 16), Cells(2, 20)).Copy Range("P" & zeile)
Next zeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo,

das Makro, das du geschrieben hast, funktioniert genau so, wie ich es mir mit den fortlaufenden Nummern vorgestellt habe. Es sucht sich die bislang höchste fortl. Nr. und zählt eins dazu. SUPER.

Was nicht funktioniert ist die Automatisierung, dass die fehlenden Zeilen bis 598 aufgefüllt werden. Ist das denn überhaupt so möglich?

Gruß Florian
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

wie ich geschrieben habe, werden nur die Formeln in den Spalten P bis T kopiert (aus der Zeile 2).

Soll alles von Spalte B bis T kopiert werden, so ersetze die Zeile
Range(Cells(2, 16), Cells(2, 20)).Copy Range("P" & zeile)

durch
Range(Cells(2, 2), Cells(2, 20)).Copy Range("B" & zeile)

Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo,

die Zeile (B bis T) hatte ich gleich abgeändert.

ABER: Das Problem ist, dass die Zeilen nicht alle eingefügt, sondern vorhandene überschrieben werden. Zudem kopiert mir dein Makro nicht die Zeile über meiner Markierung, sondern vermutlich die erste beschriebene Zeile.

Die Zeile über der "händischen" Markierung ist außer den Formeln leer, da ich es als sehr schwierig ansehen, dass hier ein Automatismus eingebaut wird, der automatisch die Zeilen immer auf 598 mit leeren Zellen (außer den Formeln) auffüllt.

Interessant ist auch, dass der Makrotext selbst in jeder Spalte auftaucht. ;-)

Schon jetzt mal vielen Dank.

Florian
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

schau mal, ob es das jetzt trifft:

Sub Zeile_zusätzlich()
'
Dim azeile, zeile, lnummer As Long
Dim myRange As Range

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'höchste Zahl im Bereich zwischen A2 und A598 ermitteln
Set myRange = Worksheets("Übersicht").Range("A2:A598")
lnummer = Application.WorksheetFunction.Max(myRange)

'aktuelle Zeile ermitteln
azeile = ActiveCell.Row

'Zeile Einfügen
Rows(azeile).Insert Shift:=xlDown
'neue Nummer einfügen: höchste Nummer plus 1
Cells(azeile, 1) = lnummer + 1

'Die Zellen mit den Formeln, Spalten B bis T werden bis Zeile 598 kopiert
For zeile = azeile To 598
Range(Cells(azeile - 1, 2), Cells(azeile - 1, 20)).Copy Range("B" & zeile)
Next zeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub


Was meinst du mit
Interessant ist auch, dass der Makrotext selbst in jeder Spalte auftaucht. ;-)
? Das kann ich bei der Testdatei nicht nachvollziehen.

Gruß

M.O.
...