Freigeben über

Mittels Makro bei einer Tabelle unter die letzte Zeile eine weitere Zeile mit Formel hinzufügen

Anonym
2013-05-21T21:54:38+00:00

Hallo, Community,

Ich möchte mittels einem Makro bei einer Tabelle unten eine Zeile hinzufügen, in deren Zellen die Formeln der darüberliegenden Zeile kopiert werden und deren Werte dann nach einer Leerzeile in einer Summenzeile mit in die Berechnung einfließen. Wie geht das am besten?

A B C D E
1 Datum km Verbrauch EUR / l Kosten
2 01.05.2013 122 7,1 l/100 km 1,449 EUR 12,55 EUR
3 02.05.2013 122 7,1 l/100 km 1,449 EUR 12,55 EUR
4 04.05.2013 122 7,1 l/100 km 1,449 EUR 12,55 EUR
5
6 Kosten insgesamt: 37,65 EUR

Also, an diesem Beispiel erläutert: Ich möchte nach der Zeile 4 eine weitere Zeile einfügen, die die gleiche Formatierung (Währung usw.) hat wie die vorhergehende Zeile. Zudem soll in Spalte E der neuen Zeile die Formel aus E4 kopiert werden. (In E6 steht schon "RUNDEN(SUMME(E2:E5);2)".

Ich kann immer nur an der gleichen Stelle eine Zeile einfügen, z.B. immer nur an E4. Aber wenn ich dann dort eine weitere Zeile UNTER DIE LETZTE ZEILE setzen will, wird die wieder an E4 eingefügt. ..

Ich bin am Verzweifeln...  :'(

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
  1. Anonym
    2013-05-22T16:26:21+00:00

    Hallo Andreas,

    mit der Anweisung CopyOrigin:=xlFormatFromLeftOrAbove sollten die Formate von oberhalb übernommen werden. Falls die Rahmen nicht übernommen werden, erweitere den Code so:

    Sub ZeileEinfuegen()

    Dim LRow As Long

    LRow = Cells(Rows.Count, 5).End(xlUp).Row

    Rows(LRow - 1).Insert Shift:=xlDown, _

       CopyOrigin:=xlFormatFromLeftOrAbove

    Range("A" & LRow - 2 & ":E" & LRow - 2).Copy

    Range("A" & LRow - 1).PasteSpecial xlPasteFormats

    Range("E" & LRow - 2).Copy

    Range("E" & LRow - 1).PasteSpecial Paste:=xlPasteFormulas

    Application.CutCopyMode = False

    End Sub

    Mit freundlichen Grüßen

    Claus

    Eine Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare

13 zusätzliche Antworten

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2013-05-22T14:40:53+00:00

    der OP hat doch schon eine Leerzeile zwischen den Daten und der Summenzeile, die auch schon in der Summe berücksichtigt ist.

    Wenn dem so ist, dann hast Du recht. Wenn die Formel in E6 =SUMME(E2:E4) lautet, dann nicht. .-)

    Andreas.

    0 Kommentare Keine Kommentare
  2. Anonym
    2013-05-22T11:53:13+00:00

    Hallo Andreas und Andreas,

    der OP hat doch schon eine Leerzeile zwischen den Daten und der Summenzeile, die auch schon in der Summe berücksichtigt ist. Er braucht also nur eine neue Zeile über der Leerzeile einzufügen und die Summenformel passt sich an.

    Mit freundlichen Grüßen

    Claus

    0 Kommentare Keine Kommentare
  3. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2013-05-22T10:29:11+00:00

    Ich bin am Verzweifeln...  :'(

    Sowas wirklich richtig zu machen ist auch gar nicht so einfach wenn man anfängt zu programmieren.

    Die letzte Zeile zu ermitteln und eine Zeile darüber einzufügen ist kein Problem, der Haken dabei ist das die SUMME Formel nicht angepasst wird.

    Diese muss ja von E2:E4 auf E2:E5 angepasst werden. Die Lösung dazu ist die Zeile nicht direkt über der SUMME Formel, sondern noch eine Zeile drüber einzufügen, dann passt Excel ganz automatisch die Formel an.

    Anschließend kopiert man die Daten aus der letzten Zeile in die eingefügte und löscht die Daten in der letzten und läßt dabei gleich die Formeln stehen.

    Andreas.

    Sub ZeileÜberSummenFormelEinfügen()

      Dim R As Range, C As Range

      'Zuerst die letzte benutze Zelle in Spalte E suchen, diese enthält die SUMME Formel

      Set R = Range("E" & Rows.Count).End(xlUp)

      'Eine Zeile höher gehen

      Set R = R.Offset(-1)

      'Wenn leer dann die nächste benutzte Zelle darüber suchen

      If IsEmpty(R) Then Set R = R.End(xlUp)

      'Über der letzten Datenzeile eine Zeile einfügen, damit die SUMME Formel angepasst wird

      R.EntireRow.Insert

      'Nun die letzte Datenreihe eins nach oben in die eingefügte Zeile kopieren

      R.EntireRow.Copy R.Offset(-1).EntireRow

      'Die Daten aus der letzten Reihe löschen, aber die Formeln behalten

      On Error Resume Next

      R.EntireRow.SpecialCells(xlCellTypeConstants).ClearContents

    End Sub

    0 Kommentare Keine Kommentare
  4. Anonym
    2013-05-22T05:05:30+00:00

    Hallo Andreas,

    probiere es mal so (es wird die letzte belegte Zeile errechnet und abhängig von diesem Wert die Zeile eingefügt - das Makro kann also immer wieder zum Einfügen einer Zeile verwendet werden, ohne etwas am Code zu ändern):

    Sub ZeileEinfuegen()

    Dim LRow As Long

    LRow = Cells(Rows.Count, 1).End(xlUp).Row

    Rows(LRow - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("E" & LRow - 2).Copy

    Range("E" & LRow - 1).PasteSpecial Paste:=xlPasteFormulas

    Application.CutCopyMode = False

    End Sub

    Mit freundlichen Grüßen

    Claus

    0 Kommentare Keine Kommentare