Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen und Formeln mit Bedingung einfügen

Zeilen und Formeln mit Bedingung einfügen
07.08.2017 09:49:31
Stefan
Hallo,
ich würde bitte Hilfe brauchen um eine Tabelle per Makro aufzubereiten, da diese Tabelle teilweise täglich neu angeliefert wird und manuell ist das nicht zu schaffen.
Es soll beim erfüllen einer Bedingung eine Zeile überhalb eingefügt werden und auch Formeln.
Die Tabelle ist wie folgt aufgebaut:
1. Zeile = Überschriften
Ab der 2. Zeile Daten in den Spalten A bis O.
Nun soll jeweils eine leere Zeile oberhalb eingefügt werden, wenn in Spalte E sich der Zellinhalt ein oder mehrfach wiederholt in der/den nächsten Zeile/b und es sollen Formeln in dieser leeren Zeile eingefügt werden - kommt der Inhalt in Spalte E nur einmal vor, soll nichts passieren.
Userbild

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen und Formeln mit Bedingung einfügen
07.08.2017 09:51:56
Stefan
In diesem Beispiel sollte nur bei der Zeile 4 mit dem Artikel: BOX ONE Carbon MTB DH handlebar 35mm clamp, 800mm, black eine neue Zeile mit Formeln eingefügt werden.
AW: Zeilen und Formeln mit Bedingung einfügen
07.08.2017 10:59:26
Michael
Hallo!
Folgender Code geht Deine Datensätze von unten nach oben durch (nur Spalte "A", also überprüft wird ob die Artikelnummern gleich sind), und fügt nach jedem Wiederholungsblock eine Zeile ein - in Deinem Beispiel wird damit zwischen Zeile 3 und 4 eine neue Zeile eingefügt.
und es sollen Formeln in dieser leeren Zeile eingefügt werden
Damit ist natürlich nichts anzufangen, da niemand weiß welche Formeln das sein sollen.
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets(1)
Dim i&, j&
Application.ScreenUpdating = False
With Ws
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
If .Cells(i, 1) = .Cells(i - 1, 1) Then
If .Cells(i - 2, 1)  .Cells(i, 1) Then
.Cells(i - 1, 1).EntireRow.Insert
Else:
j = i - 3
Do
j = j - 1
Loop Until .Cells(j, 1)  .Cells(i, 1)
.Cells(j + 1, 1).EntireRow.Insert
i = j
End If
End If
Next i
End With
End Sub
Soweit mal von meiner Seite.
LG
Michael
Anzeige
AW: Zeilen und Formeln mit Bedingung einfügen
07.08.2017 13:20:03
Stefan
Hallo Michael,
wow besten Dank, funktioniert super!
Zuerst dachte ich es passiert nichts, aber die Änderungen laufen ja von unten nach oben durch die Tabelle :)
Wegen Formel, ja entschuldigung ohne Infos ist das natürlich schwierig.
Im Prinzip sollen Teile aus der darunter liegenden Zeile in Zellen kopiert werden, teilweise Text und teilweise sollen Rechenvorgänge durchgeführt werden:
Also zB in der neuen leeren Zeile 20 (fiktiv)
A20: =E21
F20: =E21*1,05
Der Bezug der Formeln in der jeweils neuen leeren Zeile müsste immer auf die darunterliegende Zeile sein, aber wie mache ich das?
Viele Dank schon mal!
Anzeige
Ergänzt...
07.08.2017 14:52:04
Michael
Hallo Stefan!
Mein voriger Code ergänzt, es werden nun auch die von Dir gewünschten Zell-Formeln eingetragen:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets(1)
Dim i&, j&
Application.ScreenUpdating = False
With Ws
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
If .Cells(i, 1) = .Cells(i - 1, 1) Then
If .Cells(i - 2, 1)  .Cells(i, 1) Then
.Cells(i - 1, 1).EntireRow.Insert
.Cells(i - 1, 1).FormulaR1C1 = "=R[1]C[4]"
.Cells(i - 1, 6).FormulaR1C1 = "=R[1]C[-1]*1.0"
Else:
j = i - 2
Do
j = j - 1
Loop While .Cells(j, 1) = .Cells(i, 1)
.Cells(j + 1, 1).EntireRow.Insert
.Cells(j + 1, 1).FormulaR1C1 = "=R[1]C[4]"
.Cells(j + 1, 6).FormulaR1C1 = "=R[1]C[-1]*1.05"
i = j + 1
End If
End If
Next i
End With
End Sub
Passt?
LG
Michael
Anzeige
AW: Ergänzt...
07.08.2017 16:27:35
Stefan
Hi,
danke, funktioniert fast!
Also die Multiplikation wird durchgeführt:
.Cells(j + 1, 6).FormulaR1C1 = "=R[1]C[-1]*1.05"
Aber hier wird nicht der Text der Zelle kopiert:
.Cells(j + 1, 1).FormulaR1C1 = "=R[1]C[4]"
In der Ergebnisszelle steht:
=R[1]C[4]
AW: Ergänzt...
07.08.2017 16:39:01
Michael
Hallo!
Dann mal auf Nummer sicher, tausche diese Stellen im Code:
.Cells(i - 1, 1).FormulaR1C1 = "=R[1]C[4]"
.Cells(i - 1, 6).FormulaR1C1 = "=R[1]C[-1]*1.0"

.Cells(j + 1, 1).FormulaR1C1 = "=R[1]C[4]"
.Cells(j + 1, 6).FormulaR1C1 = "=R[1]C[-1]*1.05"
damit
.Cells(i - 1, 1).FormulaR1C1Local = "=Z(1)S(4)"
.Cells(i - 1, 6).FormulaR1C1Local = "=Z(1)S(-1)*1.05"
bzw.
.Cells(j + 1, 1).FormulaR1C1Local = "=Z(1)S(4)"
.Cells(j + 1, 6).FormulaR1C1Local = "=Z(1)S(-1)*1.05"
LG
Michael
Anzeige
AW: Ergänzt...
07.08.2017 16:55:50
Stefan
Jetzt bekomme ich leider eine Fehlermeldung: Laufzeitenfehler 1004
Anwendungs- oder objektdefinierter Fehler
Beim Debuggen wird die Zeile gelb markiert:
.Cells(j + 1, 6).FormulaR1C1Local = "=Z(1)S(-1)*1.05"
Kann ich nicht nachvollziehen...
07.08.2017 17:01:01
Michael
Stefan,
...bei mir läuft das. Eine Bsp-Mappe mit Deinen echten Verhältnissen (nicht notwendigerweise echten Daten!) wäre evtl. hilfreich. Aber ich bin vermutlich heute schon weg, melde mich erst morgen wieder.
LG
Michael
AW: Kann ich nicht nachvollziehen...
07.08.2017 17:28:22
Stefan
Hi Michael,
ich glaube ich (ja klingt merkwürdig;) habe den Fehler gefunden - die Formartierung der Reihe A ist Text und daher wird das was aus dem VBA kommt auch als Text eingesetzt und nicht als Formel...
Habe jetzt am Anfang folgendes ins Makro geschrieben (mit Makro Recorder aufgezeichnet und kopiert):
Columns("A:A").Select
Selection.NumberFormat = "General"
Und nun läuft es durch - ich dreh total am Rad :)
DANKE Dir! VG Stefan
Anzeige
Na super! Freut mich, Danke für die Rückmeldung!
07.08.2017 17:33:53
Michael

342 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige