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

Makro erstellen mit vier verschiedenen Befehlen

Forumthread: Makro erstellen mit vier verschiedenen Befehlen

Makro erstellen mit vier verschiedenen Befehlen
20.11.2025 03:21:33
Istanbul
Hallo,

ich benötige Unterstützung in der Programmierung von 4 Makrobefehlen für eine Excel-Datei:

1) wenn in der Spalte „x“ der Code „123“ vorhanden ist, muss der Wert in der „p“ überschrieben werden durch einen anderen festen Wert „123“

2) wenn in der Spalte „x“ der Code „123“ vorhanden ist, muss die gesamte Zeile in eine neue Zeile kopiert und eingefügt werden, am besten gleich darunter, wo jedoch in der kopierten Zeile der Wert in der Spalte „y“ einen negativen Vorzeichen bekommt.

3) pro Personalnummer aus der Spalte „D“ muss die Gesamtsumme aller codes („abc“, „def“;“ghi“) aus der spalte „h“ gezogen und in eine neue Zeile kopiert und eingefügt werden, wo die Gesamtsumme der oben genannten codes mit einem negativen Vorzeichen ausgewiesen wird und die spalte „j“ einen neuen festen code „wert“ erhält.

4) leider hat das löschen von allen Zeilen, wo in der Spalte p ein wert von null steht nicht geklappt.

Vielen Dank!
Anzeige

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ... Wann ...
20.11.2025 07:49:13
schauan
... soll das ausgeführt werden? Wenn du auf einen Knopf drückst oder bei der Eingabe von 123?
AW: Makro erstellen mit vier verschiedenen Befehlen
20.11.2025 08:45:04
UweD
HAllo


hast du mal (d)eine Musterdatei


LG UweD
AW: Makro erstellen mit vier verschiedenen Befehlen
21.11.2025 23:03:36
Istanbul
Hallo Uwe,

ich habe folgende Beispieldatei mit den benötigten Befehlen hochgeladen.


https://www.herber.de/bbs/user/179676.xlsx


Vielen Dank!

LG

Nuriye
Anzeige
AW: ... Wann ...
20.11.2025 08:34:57
Istanbul
Hallo,

Danke für Deine schnelle Rückmeldung.
Soll alles ausführen, wenn ich auf den Makro Knopf drücke.
Vielen Dank!
LG
AW: ... Wann ...
20.11.2025 09:12:57
schauan
Hallöchen,

das wäre dann mal der erste Teil - ohne das Zeugs mit der Personalnummer. Ausprobieren bitte an einer Kopie der Daten ...

Sub teil1()

Dim rngCX As Range, rngCCells As Range, irngCXRows&, iCnt&
'benutzten Bereich in Spalte X feststellen
Set rngCX = Cells(1, 24).Resize(Cells(Rows.Count, 24).End(xlUp).Row)
'Schleife ueber alle Zellen im benutzen bereich von Spalte X
For Each rngCCells In rngCX
'in P 123 eintragen wenn in X 123 steht
If rngCCells = 123 Then rngCCells.Offset(, -8) = 123
'Ende Schleife ueber alle Zellen im benutzen bereich von Spalte X
Next
'Zeilenanzahl aus benutztem Bereich in Spalte X
irngCXRows = rngCX.Rows.Count
'Schleife ueber alle Zeilen im benutzten Bereich von Spalte X, unten beginnend
For iCnt = irngCXRows To 1 Step -1
'mit der Zelle icnt aus Spalte X
With rngCX.Cells(iCnt)
'Wenn 123 drin steht, dann
If .Value = 123 Then
'Duplikat darunter einfügen
.EntireRow.Copy: .EntireRow.Offset(1).Insert Shift:=xlDown
'in eingefuegter Zeile in Y Wert mit -1 multiplizieren, wenn > 0
If .Offset(1, -1).Value > 0 Then .Offset(1, -1).Value = .Offset(1, 1).Value * -1
'Ende Wenn 123 drin steht, dann
End If
'Ende mit der Zelle icnt aus Spalte X
End With
'Ende Schleife ueber alle Zeilen im benutzten Bereich von Spalte X, unten beginnend
Next
End Sub
Anzeige
AW: ... Zeile löschen ...
20.11.2025 10:01:14
schauan
Für das Löschen der Zeile kannst Du unter End If noch das einfügen:

    'Zeile loeschen, wenn in P 0 steht

If .Offset(, -8).Value = 0 Then rngCX.Cells(iCnt).EntireRow.Delete


Mit Deinem 3) habe ich ein Verständnisproblem.
- Ist "Gesamtsumme" die Anzahl von abc, def und ghi?
- Ist das wirklich auf die ganze Spalte betrachtet oder nur auf die Zeile - also z.B. für die Personalnummer aus D14 der Eintrag in H14?
- stehen da in einer Zelle mehrere drin, also z.B. "abcghidef" oder "abc def ghi" Ich würde davon ausgehen, wenn in einer Zelle mehrere stehen, dass dann hier z.B. 3 rauskommt.
- was wird denn das für eine neue Zeile? Meinst Du damit (und auch generell bei 3) ) dass es nur die bei 2) neu eingefügten Zeilen betrifft oder ist das davon unabhäängig?
- was für ein neuer code "wert" ist das in spalte j, wo kommt der her? Oder soll das für diese Gesamtsumme sein?
- wenn da in j 0 steht oder raus kommt - falls es diese Gesamtsumme sein sollte - , soll die 0 auch ein negatives Vorzeichen bekommen?


Anzeige
AW: ... bis gestern Abend ...
21.11.2025 08:16:26
schauan
... war ich noch optimistisch was eine Antwort und weiteres Interesse des TE betrifft - könnte ja sein, dass er Nachtschicht hat. Aber man kann auch falsch liegen ...
AW: ... bis gestern Abend ...
21.11.2025 17:02:32
Istanbul
Hallo,

korrekt ich hatte leider eine Nachsicht…..
Mit Gesamtsumme ist folgendes gemeint:

Die Tabelle hat eine Spalte mit Personalnummern, eine weitere mit Kostenstellennummen, dann Codes und zum Schluss eine weitere Betragsspalte.

Ich möchte benötige folgende Lösung:

Das Makro soll die Gesamtsumme aus den entsprechenden Codes (abc; def; ghi) jeweils pro Personalnummer ziehen und in einer neuen Zeile erneut mit einem negativen Vorzeichen ausweisen und für diese neue Zeile einen neuen Code (xyz) vergeben.

Vielen Dank für Deine Unterstützung!

Nuriye




Anzeige
AW: ... bis gestern Abend ...
21.11.2025 17:58:16
schauan
Also, zum Verständnis. Du hast ursprünglich z.B. 100 Zeilen wo unterschiedlich oft 10 Personalnumern vorkommen.
Dann läuft der erste Teil der Aufgabe - dadurch hast Du dann vielleicht 130 Zeilen.
Anschließend willst Du unten drunter für die 10 Personalnumern 10 neue Zeilen wo die Personalnummern, Summen und XYZ drin stehen, (also, wie oft die 3 Ausdrücke zu jeder Nummer finden sind).
In welchen Spalten eigentlich?

Das würde übrigens per Summen - oder Zählfunktion gehen.... In einer extra Tabelle, damit Du auch XYZ eintragen kannst, und hinterher kopieren und in der Ausgangstabelle Werte einfügen...
Anzeige
AW: ... bis gestern Abend ...
21.11.2025 23:50:03
Istanbul
Hallo schauan,

ich habe auch auf Deine Verständnisfragen eine Beispieldatei hochgeladen.

Danke!
Anzeige
AW: ... bis gestern Abend ...
22.11.2025 13:20:24
schauan
... das ist aber jetzt eine ganz andere Aufgabe... Da macht man eigentlich ein neues Thema auf. Ich schaue mir das morgen mal an, wenn bis dahin keine Lösung erstellt wurde ...
AW: ... bis gestern Abend ...
22.11.2025 23:43:17
Istanbul
Vielen Dank für Deine Bemühungen.

Das mit einem neuen Thema wusste ich nicht!

LG
AW: ... bis gestern Abend ...
23.11.2025 23:45:40
Istanbul
Hallo,

ich habe meine Datei etwas angepasst und habe bis Makrobefehl 3 wie folgt aufgenommen.
Jedoch zeigt er mir einen Laufzeitfehler 1004 an. Ich bin echt verzweifelt und komme nicht darauf. Das Problem scheint folgender Befehl zu sein: "If Cells(i,4).Value "ghi-1" Then"

Meine etwas angepasste Datei habe ich erneut hochgeladen.

https://www.herber.de/bbs/user/179689.xlsx

Sub Personal()

Dim i As Long, v As Long, strValue As String, intRow As Long
Application.ScreenUpdating = False
'**intRow= Cells (Rows.Count, 4).End(xlUP).Row
'For i= intRow to 4 Step -1

If Cells(i, 4).Value = "ghi-1" Then
Rows(i + 1).Insert Shift:=xlDown
Cells(i, 8).Value = "ghi-2"
i = i + 1
End If
If Cells(i, 4).Value = "ghi-2" Then
Cells(i, 6).Value = cell.Value * -1
End If
If Cells(i, 4).Value = "ghi-2" Then
Cells(i, 7).Value = "Haben"
End If
If Cells(i, 4).Value = "abc" Then
Cells(i, 5).Value = "108000"
End If
Application.ScreenUpdating = True

End Sub

Ich freue mich sehr über eine kurzfristige Rückmeldung.

Für den Makrobefehl Nr. 4 fehlt es mir an leider Kenntnissen.
Wäre super, wenn man mir hier helfen würde.

Vielen Dank und einen guten Start in die Woche!



Anzeige
AW: ... bis gestern Abend ...
24.11.2025 08:22:22
schauan
Hallöchen,

also, schön dass Du da so mitmachst ;-)

Zu Deinem Code sehe ich erst mal 3 Fehler:
1) 1004 kommt, weil Du oben die beiden Zeilen auskommentiert hat. Deswegen ist i=0 und eine Zelle 0,4 gibt es nicht. Du kannst da auch i in die Überwachung nehmen ...
2) unten würde für die Schleife das Next fehlen
3) i=i+1 ist kontraproduktiv. Deine Schleife zählt bei Next rückwärts, also i wäre ohne Dein eingreifen 22, 21, 20 usw. Die 21 hast Du in den ersten Schleifenzeilen auch, aber dann wird wieder 22 draus und Deine Schleife wird praktisch endlos :-(

Dann die erste Änderung:

Du willst eine ganze Zeile kopieren und darunter einfügen. Das gab es anderswo schon mal - prinzipiell
'Duplikat darunter einfügen
.EntireRow.Copy: .EntireRow.Offset(1).Insert Shift:=xlDown

bzw in dem Makro wäre das dann
Cells(i, 4).EntireRow.Copy: .EntireRow.Offset(1).Insert Shift:=xlDown

Am Anfang ist es übrigens hilfreich, wenn man sich die Zeit nimmt und so etwa jede Zeile kommentiert und damit ausführlich jeden Schritt beschreibt, der da gemacht werden soll und muss. Oder anders gesagt - Du beschreibst hier erst mal genau, was Du manuell getan hast. Am Anfang besteht Dein Programm dadurch aus vielen Kommentarzeilen.
z.B.

'in letzte zeile gehen
'Schleife, um von unten alle zeilen durchzugehen
'pruefen, ob in Spalte xxx was steht, wenn ja dann
'ganze Zeile markieren,
'kopieren
'darunter einfuegen
'in alter Zeile was aendern
'in neuer Zeile irgendwas aendern
'ende der pruefung
'naechste pruefung
'...
'ende der naechsten pruefung
'Ende der Schleife, um von unten alle zeilen durchzugehen

Das mit der Schleife von unten beginnend ist schon zusätzliches Wissen ;-)
Manuell würdest Du sicher oben beginnen, dann aber die neu eingefügte Zeile überspringen. Damit würde Dein i=i+1 passen ;-)
Allerdings könnte es dadurch passieren, dass Deine Schleife nur bis zur anfangs gemerkten letzten Zeile 22 geht. Das merkt man aber beim Testen :-) Da wäre übrigens spätestens bei End Sub ein Haltepunkt interessant, wo man den Schleifenzähler i prüft.
Gleich noch ein Hinweis. Zu kurze Variablennamen sind auch nicht gerade gut, vor allem, wenn man in längeren Programmen danach sucht. Suche mal nach i :-)
So ab 4 Zeichen aufwärts ist da nicht verkehrt. Bei mir wäre der Zähler z.B. iCnt - i für integer, Cnt für Counter Bei long würder der bei mir lCnt heißen (müssen), aber da bleib ich meistens inkonsequenterweise beim i ...


Die Kommentare würden dann leicht anders aussehen:

'Schleife, um zeilen durchzugehen, in Zeile 1 beginnend
'pruefen, ob in Spalte xxx was steht, wenn ja dann
'ganze Zeile markieren,
'kopieren
'darunter einfuegen
'in alter Zeile was aendern
'Zeilenzaehler 1 erhoehen
'in neuer Zeile irgendwas aendern
'ende der pruefung
'naechste pruefung
'...
'ende der naechsten pruefung
'Ende der Schleife, um alle zeilen durchzugehen

Bei mir hätte das eine oder andere auch noch etwas ausführlicher sein können - also besser
'komplette Zeile kopieren und Duplikat darunter einfügen
.EntireRow.Copy: .EntireRow.Offset(1).Insert Shift:=xlDown
--> einfügen geht ohne kopieren ja nicht ...
Man merkt da eventuell auch, wenn was fehlt




Anzeige
AW: ... bis gestern Abend ...
24.11.2025 10:20:55
Istanbul
Vielen lieben Dank!
Ich werde es nachher korrigieren:-)
Na klar, ich will es auch lernen….
Wegen dem Makrobefehl 4 das mit den Summen aus den Zeilen davor, benötige ich noch Eure/Deine Unterstützung.
In der Datei sind 12.000 Zeilen.
Alles manuell anpassen würde sehr lange dauern.
Wäre super, wenn man mir helfen würde.;-)
Anzeige
AW: ... bis gestern Abend ...
24.11.2025 17:29:28
schauan
Hallöchen,

also, hier mal als Beispiel für 1) und 2)
Für 3) und 4) hab ich mal Deine Aufgabe aufgeteilt wie in etwa zu programmieren wäre mit ein, zwei Zusätzen

Sub Personal()


Dim i As Long, v As Long, strValue As String, intRow As Long
Application.ScreenUpdating = False
intRow = Cells(Rows.Count, 4).End(xlUp).Row
For i = intRow To 4 Step -1
'1) Wenn in der Spalte D der Code "ghi" vorhanden ist, dann
If Cells(i, 4).Value = "ghi-1" Then
'soll das Makro die gesamte Zeile kopieren und in die Zeile darunter einfügen.
Rows(i).EntireRow.Copy: Rows(i + 1).Insert Shift:=xlDown
'nicht beschrieben! kann man als Markierung zum Test achen
Cells(i + 1, 8).Value = "ghi-2"
'Dabei soll auch der Wert ein negatives Vorzeichen haben
Cells(i + 1, 6).Value = Cells(i + 1, 6).Value * -1
'und in der Spalte G muss "Haben" stehen.
Cells(i + 1, 7).Value = "Haben"
'i = i + 1
End If
'2) Wenn in der Spalte D der Code "abc" vorhanden ist, dann
If Cells(i, 4).Value = "abc" Then
'die Kontonummer auf 10800 ändern
Cells(i, 5).Value = "108000"
End If

'3) Wenn in der Spalte D der Code "def" vorhanden ist, dann
'wie oben die gesamte Zeile Kopieren und
'mit einem neuen Code "123abc" darunter pro Personalnummer einfügen.
'der Wert von der neuen Zeile ein negatives Vorzeichen haben
'in der Spalte G muss ein "Haben" stehen.
'Ferner soll die Kontonummer auf 10900 geändert werden.

'4) Ferner sollte das Markro falls vorhanden
'pro Mitarbeiter eine Summe von den Codes "mno","pqr" und "XYZ" ziehen
'und in der Zeile darunter mit einem neuen Code "def456" --> gemeint ist wohl das Tabellenende
'also vorher letzte belegte Zelle der Tabelle feststellen --> die erste freie waere dann .Offset(1)
'und der neuen Kontonummer 110000
'sowie einem negativen Vorzeichen
'und als "Haben" einfügen.


Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Das 4) würdest Du wahrscheinlich mit einer Hilfstabelle selbst hinbekommen. Ich habe hier per Formel eine Liste der Personalnummern und deren Summen erzeugt.
Du könntest nun in einer Schleife die Zellen durchgehen, solange nicht 0 drin steht. Wenn man noch nix anderes kennt, z.B. prinzipiell mit

For iCnt=2 to 2000

'wenn links in der Hilfstabelle 0 steht, dann kommt nix mehr - Schleife verlassen
if cells(iCnt,links).Value = 0 then exit for
'wenn rechts in der Hilfstabelle was > 0 steht, dann
if cells(iCnt,rechts).Value > 0 then
'letzte belegte Zeile in Personalliste feststellen
'neue Zeile an Personalliste hängen usw....


Arbeitsblatt mit dem Namen 'Mit Makro'
 IJ
1PersonalnrSumme
213000
323000
433000
500

ZelleFormel
I2=EINDEUTIG(B2:B15000)
J2=SUMMEWENNS(F:F;B:B;I2#;D:D;"mno")+SUMMEWENNS(F:F;B:B;I2#;D:D;"pqr")+SUMMEWENNS(F:F;B:B;I2#;D:D;"xyz")
Anzeige
AW: ... bis gestern Abend ...
25.11.2025 09:05:47
Istanbul
Hallo,
Vielen Dank für Deine Rückmeldung.

Bei diesem Befehl zeigt er mir den Laufzeitfehler 13 an.
'Dabei soll auch der Wert ein negatives Vorzeichen haben
Cells(i + 1, 6).Value = Cells(i + 1, 6).Value * -1

Ich habe gestern Abend geschaut und kam nicht auf eine Lösung.


Zu Punkt 4)
Es ist nicht das Tabellenende gemeint. Die Codes „mno“, „pqr“ und „xyz“ kommen in der Excel Tabelle pro Mitarbeiter vor.
Daher benötige ich ein Befehl in dem ich die Summe aus den oben genannten codes erneut in der Zeile darunter mit einem neuen code einfüge und wieder wie in Punkt 1) es mit einem negativen Vorzeichen und mit dem Text Haben in der entsprechenden Stelle.
Die o.g. Codes sind sozusagen sehr oft vorhanden und nicht erst am Ende der Tabelle.


LG



Anzeige
AW: ... bis gestern Abend ...
25.11.2025 09:39:16
schauan
Moin,

also, schaue mal, wo das Makro da gerade ist - also z.B. in der Überprüfung
i
und
Cells(i + 1, 6).Value

Dort wird wohl etwas stehen, dass man nicht multiplizieren kann :-(
AW: ... bis gestern Abend ...
25.11.2025 17:11:09
schauan
.. zu 4)

wäre dann allerdings trotzdem die Frage, wo genau. In Deinem Beispiel stehen die 3 mno, pqr und xyz immer untereinander, z.B. für die 1 in den Zeilen 8-10. Das muss ja nun nicht immer so sein. Die 1 hört oben in Zeile 12 auf und in Zeile 22 kommt noch eine 1. Soll die Summe nun unter Zeile 10, 12 oder 22? Ich würde das jetzt unter die Zeile 22 setzen ... 2 wäre bei den Beispieldaten unter der 21 und 3 unter der 31.



Passt denn der Ansatz mit der Hilfstabelle?


Anzeige
AW: ... bis gestern Abend ...
25.11.2025 18:08:39
ISTANBUL
Hallo,

entschuldige bitte in der Beispieldatei war anscheinend ein Copy-Paste Fehler:-(

Habe diese erneut hochgeladen: https://www.herber.de/bbs/user/179707.xlsx

Korrekt die Summen aus den drei Codes direkt darunter pro Personalnummer also sowie von Dir beschrieben unter 12,22 und 32 und mit einem neuen Code "def456".
Die Summewennformel würde passen. Jedoch benötige ich die kopierte Zeile mit der Gesamtsumme aus all den drei Codes pro Personalnummer.

Ferner Danke für Dein Hinweis, dass ein Makro keine kurzen Codes findet....

Das Problem hatte ich vorhin auch und habe es nun anders gelöst:-)
Laufzeitfehler 13 habe ich auch nicht mehr!

Komischerweise hat das Makro mir bei dem Befehl zu Nummer 1 die Zeilen vierfach darunter kopiert....
Das schaue ich mir gerade an.....
Obwohl wir nur den Befehl haben Rows(i).EntireRow.Copy: Rows(i+1).Insert Shift:=xlDown.





Anzeige
AW: ... bis gestern Abend ...
25.11.2025 21:24:18
schauan
Hallöchen,
das wäre zu 4) - allerdings ohne Prüfung ob das erforderlich ist.
weiterhin:
- bei PNr 3 kommt 0 raus weil 1000 - 1000 = 0
- bei anderen kommt theoretisch - oder + raus, je nachdem, ob die Summe + oder - war (ich multipliziere wegen dem Vorzeichen mit -1)
--> im Prinzip geht auch immer - wenn man abs(iSum) * -1 nimmt...
- Du kannst auch für jede Aufgabe die Makros einzeln nehmen und dann z.B. mit einem "Hauptmakro" ausführen, also
Sub Main()
Makro_1
Makro_2
'...
End Sub

Sub Makro_4()

Dim iRow&, iPnr&, iCnt&, iSum&
Dim rngData As Range
'letzte belegte Zeile in Spalte 2 = B
iRow = Cells(Rows.Count, 2).End(xlUp).Row
'PNummernbereich
Set rngData = Range("B2:B" & iRow)
'"alte" Personalnummer - mit 0 beginnend
iPnr = 0
'Schleife ueber alle Zeilen
For iCnt = iRow To 2 Step -1
'wenn eine andere Personalnummer steht, dann
If Cells(iCnt, 2).Value > iPnr Then
'Personalnummer merken
iPnr = Cells(iCnt, 2).Value
'Summen bilden
iSum = WorksheetFunction.SumIfs(rngData.Offset(, 4), rngData, iPnr, rngData.Offset(, 2), "mno") + _
WorksheetFunction.SumIfs(rngData.Offset(, 4), rngData, iPnr, rngData.Offset(, 2), "pqr") + _
WorksheetFunction.SumIfs(rngData.Offset(, 4), rngData, iPnr, rngData.Offset(, 2), "xyz")
'Zeile einfuegen
Rows(iCnt + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Daten eintragen, ausgehend von Zelle Ax (letzte Zelle der Personalnummer)
With Cells(iCnt, 1)
'Daten von Zeile
.Offset(1, 0).Value = .Value
.Offset(1, 1).Value = Cells(iCnt, 2).Value
.Offset(1, 2).Value = Cells(iCnt, 3).Value
'Daten aus Aufgabe
.Offset(1, 3).Value = "def456"
.Offset(1, 4).Value = 110000
.Offset(1, 5).Value = iSum * -1
.Offset(1, 6).Value = "Haben"
.Offset(1, 7).Value = "Haben" 'nur zur Kontrolle
'Ende Daten eintragen, ausgehend von Zelle Ax (letzte Zelle der Personalnummer)
End With
'Ende wenn eine andere Personalnummer steht, dann
End If
'Ende Schleife ueber alle Zeilen
Next
'
End Sub

Anzeige
AW: ... bis gestern Abend ...
02.12.2025 02:19:53
Istanbul
Hallo,

vielen Dank. Es hat alles soweit geklappt.

Bezüglich meinen Berechnungen habe ich eine weitere Sache leider noch offen.

Ich habe die Zeile kopiert und auch mit negativen Vorzeichen versehen und statt soll auch als „Haben“ deklariert, jedoch klappt es nicht, dass mir das Makro *-19%/119% nimmt.

Mein Befehl lautet wie folgt für die kopierte Zeile:
If cells (i,4).value=„ghi-1“ then
Rows(i).entirerow.copy:rows(i+1).insert shift:xldown
Cells(i+1,8).value=„ghi-2“
Cells(i+1,6).Value=Cells(i+1,6). Value*19%/119%

Für die Subtraktion von jeweils der codes „mmo“ - „pqr“ habe ich folgendes versucht für die kopierte Zeile „xyz“, sozusagen dass jeweils die Differenz aus mmo und pqr in der zeile für xyz ausgewiesen wird.

Dim iRow&, iPnr&, iCnt&, iSum&
Dim rngData As Range
'letzte belegte Zeile in Spalte 2 = B
iRow = Cells(Rows.Count, 2).End(xlUp).Row
'PNummernbereich
Set rngData = Range("B2:B" & iRow)
'"alte" Personalnummer - mit 0 beginnend
iPnr = 0
'Schleife ueber alle Zeilen
For iCnt = iRow To 2 Step -1
'wenn eine andere Personalnummer steht, dann
If Cells(iCnt, 2).Value > iPnr Then
'Personalnummer merken
iPnr = Cells(iCnt, 2).Value
'Summen bilden
iSum = WorksheetFunction.SumIfs(rngData.Offset(, 4), rngData, iPnr, rngData.Offset(, 2), "mno") _
WorksheetFunction.SumIfs(rngData.Offset(, 4), rngData, iPnr, rngData.Offset(, 2), "pqr").


LG










Anzeige
AW: ... bis gestern Abend ...
02.12.2025 18:59:32
schauan
19% sind 0,19 und 119% sind 1,19 ...
AW: ... bis gestern Abend ...
03.12.2025 18:09:20
Istanbul
Danke Dir für Deine schnelle Rückmeldung.

Ich schaue es mir heute Abend erneut an.

Hast Du eine andere Idee bezüglich der Subtraktion. Mein Makrobefehl hat irgendwie nicht geklappt.

LG

Nuriye!
AW: ... bis gestern Abend ...
03.12.2025 19:03:55
schauan
... eventuell fehlt nur das "-" ? Fällt jedenfalls gleich auf ;-) Zwischen den beiden Zeilen steht nur ein "_" Besser wäre wohl " - _"
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18