Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro auf alle Listenlängen anwenden ?

Makro auf alle Listenlängen anwenden ?
15.03.2022 08:25:33
Weber
Hallo liebes Forum,
ich bin ein Neuling im Bereich VBA und genieße hoffentlich noch Welpenschutz :)
Zu meinem Anliegen ich habe ein Makro erstellt, das eine Liste (die immer Gleich exportiert wird) automatisch in ein gewünschtes Format bringen soll.
Jedoch ist die Liste nicht kompatibel, wenn die Splaten z.b mehr Einträge haben. Meine Frage ist, was muss ich jetzt anpassen, dass ich dieses Makro auf alle Spaltenlängen anwenden kann. Habe erfolglos probiert darin rum zu Basteln und Frage deshalb mal ins Forum :)
- > Die Teilergebnisse und die Links Rechts Formel werden nicht wie gewünscht ausgeführt, also bis zum Ender der Spalte dachte das ist so einfach wenn ich dem Makro zeige: "shift+strg+pfeil unten drücke" das es dann immer weiß gehe bis zum Ende der Spalte ( Bei der Rechts Formel Springt es sogar irgendwann auf die Spalte links daneben und überschreibt ab einer gewissen Zeile deren Einträge mit der Formel Rechts)
Vielen Dank im Voraus schonmal!

Sub Liste_52_Formatierung()
' Liste_52_Formatierung Makro
Application.WindowState = xlNormal
End Sub

Sub Makro_Liste()
' Makro_Liste Makro
  • Rows("1:1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Columns("L:L").Select Selection.Delete Shift:=xlToLeft Columns("J:J").Select Selection.Delete Shift:=xlToLeft Columns("I:I").Select Selection.Delete Shift:=xlToLeft Range("D3").Select Range(Selection, Selection.End(xlDown)).Select Selection.Style = "Currency" Range("E3").Select Range(Selection, Selection.End(xlDown)).Select Selection.Style = "Currency" Range("D1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[397]C)" Range("D2").Select ActiveWindow.SmallScroll Down:=-27 Range("D1").Select Selection.Style = "Currency" Selection.Font.Bold = True Range("E1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[397]C)" Range("E2").Select ActiveWindow.SmallScroll Down:=-39 Range("E1").Select Selection.Style = "Currency" Selection.Font.Bold = True Range("J3").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-8],5)" Range("J3").Select Selection.AutoFill Destination:=Range("J3:J398") Range("J3:J398").Select Range("K3").Select ActiveCell.FormulaR1C1 = "=RIGHT(RC[-9],3)" Range("K3").Select Selection.AutoFill Destination:=Range("K3:K398") Range("K3:K398").Select Range("J1").Select ActiveCell.FormulaR1C1 = "=SUBTOTAL(2,R[2]C[-8]:R[397]C[-8])" Range("J2").Select ActiveWindow.SmallScroll Down:=-33 Range("J1").Select Selection.Font.Bold = True Range("L3").Select ActiveCell.FormulaR1C1 = "erledigt" Range("L4").Select End Sub

  • 8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 09:31:09
    MCO
    Hallo Weber!
    Von Deiner Aufzeichung bleibt nur das übrig:
    
    Sub test()
    Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("L:L").Delete Shift:=xlToLeft
    Columns("I:J").Delete Shift:=xlToLeft
    lz = Range("D3").End(xlDown).Row
    Range("D1:E1", "D3:E" & lz).Style = "Currency"
    Range("D1").FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[" & lz & "]C)"
    Range("D1:E1", "J1").Font.Bold = True
    Range("E1").FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[" & lz & "]C)"
    Range("J3").FormulaR1C1 = "=LEFT(RC[-8],5)"
    Range("J3").AutoFill Destination:=Range("J3:J" & lz)
    Range("K3").FormulaR1C1 = "=RIGHT(RC[-9],3)"
    Range("K3").AutoFill Destination:=Range("K3:K" & lz)
    Range("J1").FormulaR1C1 = "=SUBTOTAL(2,R[2]C[-8]:R[397]C[-8])"
    Range("L3") = "erledigt"
    End Sub
    
    Probier´s mal aus.
    Gruß, MCO
    Anzeige
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 13:18:30
    Weber
    Hallo, MCO
    Vielen Dank für die schnelle Antwort.
    Leider Funktioniert es so gar nicht mehr. Die Zahlen werden in ca.10er-Blöcken immer gleich angezeigt und komplett falsche Zahlen z.B. 10 mal 60.000.000€. Links Rechts Funktioniert auch nicht. Und die Teilsumme ist falsch.
    Wichtig ist auch, dass die Formeln immer von Zeile 3 bis Ende gehen. In der letzten Formel bei Dir im Script sind ja noch 397 vermerkt.
    Hoffe du kannst mir noch weiterhelfen :)
    Grüße
    Martin
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 13:19:08
    Weber
    Hallo, MCO
    Vielen Dank für die schnelle Antwort.
    Leider Funktioniert es so gar nicht mehr. Die Zahlen werden in ca.10er-Blöcken immer gleich angezeigt und komplett falsche Zahlen z.B. 10 mal 60.000.000€. Links Rechts Funktioniert auch nicht. Und die Teilsumme ist falsch.
    Wichtig ist auch, dass die Formeln immer von Zeile 3 bis Ende gehen. In der letzten Formel bei Dir im Script sind ja noch 397 vermerkt.
    Hoffe du kannst mir noch weiterhelfen :)
    Grüße
    Martin
    Anzeige
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 15:44:12
    Yal
    Hallo Martin,
    per Default nimmt der Makro-Rekorder in R1C1-Modus. Muss man aber nicht übernehmen. Man muss dabei "Formula" anstatt "FormulaR1C1" verwenden.
    
    Sub Makro_Liste()
    Dim LetzteZeile As Long
    Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("L:L").Delete Shift:=xlToLeft
    Columns("J:J").Delete Shift:=xlToLeft
    Columns("I:I").Delete Shift:=xlToLeft
    LetzteZeile = Range("D1").End(xlDown).Row
    Range("D1", "E1", "D3:E" & LetzteZeile).Style = "Currency"
    Range("D1", "E1", "J1").Font.Bold = True
    Range("D1").Formula = "=SUBTOTAL(9,D3:D" & LetzteZeile & ")"
    Range("E1").Formula = "=SUBTOTAL(9,E3:E" & LetzteZeile & ")"
    Range("J1").Formula = "=SUBTOTAL(2,J3:J" & LetzteZeile & ")"
    Range("J3:J" & LetzteZeile).Formula = "=LEFT(B3,5)"
    Range("K3:K" & LetzteZeile).Formula = "=RIGHT(B3,3)"
    Range("L3").FormulaR1C1 = "erledigt"
    Range("L4").Select
    End Sub
    
    VG
    Yal
    Anzeige
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 16:07:20
    Weber
    Hallo Yal,
    vielen Dank für deine Antwort. Leider kommt beim ausführen deines Vorschlages: "Fehler beim Kompilieren: Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft."
    Aber sieht schonmal ziemlich schlüssig aus :)! Wieso steht bei der vorletzten Zeile wieder FormulaR1C1?
    Viele Grüße
    Martin
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 16:14:34
    Rudi
    Hallo,
    
    Range("D1,E1,D3:E" & LetzteZeile).Style = "Currency"
    Range("D1,E1,J1").Font.Bold = True
    
    
    Range("L3") = "erledigt"
    
    Gruß
    Rudi
    AW: Makro auf alle Listenlängen anwenden ?
    15.03.2022 17:00:22
    Yal
    Hallo Martin,
    ach ja, wenn man testet, kann man auch was entdecken.
    
    Sub Makro_Liste()
    Dim LetzteZeile As Long
    Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("L:L").Delete Shift:=xlToLeft
    Columns("J:J").Delete Shift:=xlToLeft
    Columns("I:I").Delete Shift:=xlToLeft
    LetzteZeile = Range("D1").End(xlDown).Row
    Range("D1, E1, D3:E" & LetzteZeile).Style = "Currency"
    Range("D1, E1, J1").Font.Bold = True
    Range("D1").Formula = "=SUBTOTAL(9,D3:D" & LetzteZeile & ")"
    Range("E1").Formula = "=SUBTOTAL(9,E3:E" & LetzteZeile & ")"
    Range("J1").Formula = "=SUBTOTAL(2,J3:J" & LetzteZeile & ")"
    Range("J3:J" & LetzteZeile).Formula = "=LEFT(B3,5)"
    Range("K3:K" & LetzteZeile).Formula = "=RIGHT(B3,3)"
    Range("L3").FormulaR1C1 = "erledigt"
    Range("L4").Select
    End Sub
    
    Warum in letzte Anweisung FormulaR1C1 anstatt Formula?
    Weil ich faul bin und bei der Zuweisung einer festen Werte zu einer Zelle keine Unterschied macht, ob die nicht vorhandenen Zellbezüge in R1C1-Form sind oder nicht.
    Genau gesehen sollte es
    Range("L3").Value = "erledigt"
    sein
    VG
    Yal
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige