Zeilen einfügen mit VBA
Zeilen einfügen mit VBA in Excel
Hallo zusammen,
ich habe folgendes Problem: Meine Exceldatei besteht aus 3 Spalten (Kalenderwoche, Titel, Verkäufe) und sieht beispielsweise wie folgt aus:
KW Titel Verkäufe
1 a 8
2 a 7
3 a 6
4 a 5
5 a 3
7 a 12
2 b 8
3 b 7
4 b 4
6 b 3
8 b 2
Ich möchte diesen Datensatz nun erweitern, indem Kalenderwochen hinzugefügt werden, wo es keine Verkäufe gibt (bei Titel a ist es Kalenderwoche 6, bei Titel b ist es Kalenderwoche 5 und 7). Lediglich die erste Kalenderwoche ist variabel, d.h. Titel b kann mit der 2. Kalenderwoche anfangen. Wichtig wäre mir zudem, dass die Verkäufe für die hinzugefügten Kalenderwochen eine Null erhalten und der Titel in der neuen Zeile mit kopiert wird. Der finale Datensatz sollte dann folgendermaßen aussehen:
KW Titel Verkäufe
1 a 8
2 a 7
3 a 6
4 a 5
5 a 3
6 a 0
7 a 12
2 b 8
3 b 7
4 b 4
5 b 0
6 b 3
7 b 0
8 b 2
Es wäre super, wenn mir jemand einen Tipp geben könnte, ich hoffe, ich habe mich verständlich ausgedrückt.
Viele Grüße
ich habe folgendes Problem: Meine Exceldatei besteht aus 3 Spalten (Kalenderwoche, Titel, Verkäufe) und sieht beispielsweise wie folgt aus:
KW Titel Verkäufe
1 a 8
2 a 7
3 a 6
4 a 5
5 a 3
7 a 12
2 b 8
3 b 7
4 b 4
6 b 3
8 b 2
Ich möchte diesen Datensatz nun erweitern, indem Kalenderwochen hinzugefügt werden, wo es keine Verkäufe gibt (bei Titel a ist es Kalenderwoche 6, bei Titel b ist es Kalenderwoche 5 und 7). Lediglich die erste Kalenderwoche ist variabel, d.h. Titel b kann mit der 2. Kalenderwoche anfangen. Wichtig wäre mir zudem, dass die Verkäufe für die hinzugefügten Kalenderwochen eine Null erhalten und der Titel in der neuen Zeile mit kopiert wird. Der finale Datensatz sollte dann folgendermaßen aussehen:
KW Titel Verkäufe
1 a 8
2 a 7
3 a 6
4 a 5
5 a 3
6 a 0
7 a 12
2 b 8
3 b 7
4 b 4
5 b 0
6 b 3
7 b 0
8 b 2
Es wäre super, wenn mir jemand einen Tipp geben könnte, ich hoffe, ich habe mich verständlich ausgedrückt.
Viele Grüße
Please also mark the comments that contributed to the solution of the article
Content-Key: 117061
Url: https://administrator.de/contentid/117061
Printed on: April 26, 2024 at 04:04 o'clock
10 Comments
Latest comment
Hallo CSS1977 und willkommen im Forum!
Unter der Annahme, dass die Zeilen nach Titel und innerhalb des Titels nach KW sortiert sind, könnte das so gehen:
[Edit] Auf Anregung von didi1954 Sortierung hinzugefügt [/Edit]
Die Zeile 2 legt die erste Zelle des Datenblocks fest.
Grüße
bastla
[Edit] Auf Anregung von didi1954 Sortierung hinzugefügt [/Edit]
Sub EinfKW()
Set StartAdresse = Range("A2")
StartAdresse.CurrentRegion.Sort Key1:=StartAdresse.Offset(0, 1), Key2:=StartAdresse, Order1:=xlAscending, Order2:=xlAscending, Header:=xlYes
AbZeile = StartAdresse.Row
AbSpalte = StartAdresse.Column
Zeile = AbZeile
Do While Cells(Zeile, AbSpalte) <> ""
KW = Cells(Zeile, AbSpalte)
Titel = Cells(Zeile, AbSpalte + 1)
If Titel = LetzterTitel Then
If KW <> LetzteKW + 1 Then
KW = LetzteKW + 1
Rows(Zeile).Insert
With Cells(Zeile, AbSpalte)
.Value = KW
.Offset(0, 1) = Titel
.Offset(0, 2) = 0
End With
End If
End If
LetzterTitel = Titel
LetzteKW = KW
Zeile = Zeile + 1
Loop
End Sub
Grüße
bastla
Gelöscht.
Hallo didi1954!
Schön - bis auf die Tatsache, dass unnötig ("Lediglich die erste Kalenderwoche ist variabel, d.h. Titel b kann mit der 2. Kalenderwoche anfangen.") eine Zeile für KW 1, Titel "b" eingefügt wird, und bei Änderung der Startzelle eine Menge Konstanten (Spaltenindizes!) anzupassen sind ...
Grüße
bastla
[Edit] Zählung der zu ändernden Konstanten von ursprünglich 4 gändert [/Edit]
Schön - bis auf die Tatsache, dass unnötig ("Lediglich die erste Kalenderwoche ist variabel, d.h. Titel b kann mit der 2. Kalenderwoche anfangen.") eine Zeile für KW 1, Titel "b" eingefügt wird, und bei Änderung der Startzelle eine Menge Konstanten (Spaltenindizes!) anzupassen sind ...
Grüße
bastla
[Edit] Zählung der zu ändernden Konstanten von ursprünglich 4 gändert [/Edit]
Gelöscht.
Hallo bastla!
Stimmt. Das wäre natürlich ein Problem, wenn die Angaben im Beitrag nicht zutreffend sind.
Um diesem Risiko aus dem Weg zu gehen, ziehe ich es vor meinen Code zu entfernen
Gruß Dieter
Stimmt. Das wäre natürlich ein Problem, wenn die Angaben im Beitrag nicht zutreffend sind.
Um diesem Risiko aus dem Weg zu gehen, ziehe ich es vor meinen Code zu entfernen
Gruß Dieter
Hallo bastla!
Also gut, dann aber gleich mit der automatischen Suche nach dem Datensatz
Gruß Dieter
PS. Sort [xlAscending] ist Standard
[Edit]
Soll stets der erste KW-Eintrag pro Titel als Basis genommen werden, z.B. Titel = b und KW = 2, dann die Zeile 18 durch diese Zeile ersetzen
[/Edit]
Also gut, dann aber gleich mit der automatischen Suche nach dem Datensatz
Sub InsertKW()
Dim Daten As Object, SortR As Range, Sort1 As Range, Sort2 As Range, Titel As String
Dim KW As Integer, k As Integer, t As Integer, v As Integer, z As Integer
Set Daten = Rows.Find("Titel", LookAt:=xlPart): If Daten Is Nothing Then Exit Sub
With Daten
If .CurrentRegion.Columns.Count <> 3 Or .CurrentRegion.Rows.Count = 1 Then Exit Sub
Set Sort1 = Range(.Cells.Address)
Set Sort2 = Range(.Offset(0, -1).Address)
Set SortR = Range(.CurrentRegion.Address)
t = .Column: k = t - 1: v = t + 1: z = .Row + 1
End With
SortR.Sort Key1:=Sort1, Key2:=Sort2, OrderCustom:=1, Header:=xlYes
Do Until Cells(z, t) = ""
If Titel <> Cells(z, t) Then Titel = Cells(z, t): KW = 1
If Cells(z, k) <> KW Then Rows(z).Insert: Range(Cells(z, k), Cells(z, v)) = Array(KW, Titel, 0)
z = z + 1: KW = KW + 1
Loop
End Sub
Gruß Dieter
PS. Sort [xlAscending] ist Standard
[Edit]
Soll stets der erste KW-Eintrag pro Titel als Basis genommen werden, z.B. Titel = b und KW = 2, dann die Zeile 18 durch diese Zeile ersetzen
If Titel <> Cells(z, t) Then Titel = Cells(z, t): KW = Cells(z, k)
@76109
Freut mich, dass Du Dir die Mühe gemacht und einen noch besseren Ansatz gefunden hast.
Versuch mal, zB die Daten in der Tabelle nach der Spalte "Verkäufe" absteigend und nach "KW" aufsteigend zu sortieren, und danach die Sortierung per VBA ohne Angabe der "Order" ...
Grüße
bastla
Freut mich, dass Du Dir die Mühe gemacht und einen noch besseren Ansatz gefunden hast.
PS. Sort [xlAscending] ist Standard
Ich weiß das - aber Excel ...Versuch mal, zB die Daten in der Tabelle nach der Spalte "Verkäufe" absteigend und nach "KW" aufsteigend zu sortieren, und danach die Sortierung per VBA ohne Angabe der "Order" ...
Grüße
bastla
Hallo bastla!
Gruß und schöne Pfingsten
Dieter
Zitat von @bastla:
Freut mich, dass Du Dir die Mühe gemacht und einen noch besseren Ansatz gefunden hast.
Na, wenn Du zufrieden bist, dann bin ich es auchFreut mich, dass Du Dir die Mühe gemacht und einen noch besseren Ansatz gefunden hast.
Versuch mal, zB die Daten in der Tabelle nach der Spalte "Verkäufe" absteigend > und nach "KW" aufsteigend zu sortieren
In dem Fall wird es wohl nicht funktionieren?Gruß und schöne Pfingsten
Dieter