Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
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

Makros programmieren und auf andere Bere

Makros programmieren und auf andere Bere
19.03.2020 11:01:33
Anna
Hallo zusammen,
ich habe eine Excel-Datei mit sehr vielen Daten (Spalte AYP und Zeile 21.186), in der ich häufig wiederholende Berechnungen durchführen muss. Die Berechungen laufen über 9 Spalten und 21.186 Zeilen. Diese Art der Berechnung wird alle 9 Spalten wiederholt. Ich habe während der Berechnung der ersten 9 Spalten ein Makro aufgenommen und würde dieses jetzt gerne auf die folgenden Spalten anwenden (also immer auf die folgenden 9).
Kann mir jemand helfen, wie ich dabei vorgehen muss?
Vielen Dank im Voraus!
Alina

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

Betreff
Datum
Anwender
Anzeige
AW: Makros programmieren und auf andere Bere
19.03.2020 11:13:36
Regina
Hi Alina,
dann solltest Du Deinen Code mal posten. Sonst ist das schwierig.
Gruß Regina
AW: Makros programmieren und auf andere Bere
19.03.2020 11:41:35
Anna
Ah ja, natürlich. Tut mir leid, das habe ich vergessen.
Hier mein aufgezeichnetes Makro:
Sub Berechnung()
' Berechnung Makro
Range("C3").Select
ActiveCell.FormulaR1C1 = "=IF(RC2="""","""",IF(RC2>=R1C,1,0))"
Range("C3").Select
Selection.AutoFill Destination:=Range("C3:C21187")
Range("C3:C21187").Select
Range("C3").Select
Selection.AutoFill Destination:=Range("C3:J3"), Type:=xlFillDefault
Range("C3:J3").Select
Range("J3").Select
ActiveCell.FormulaR1C1 = "=IF(RC2="""","""",IF(RC2

Anzeige
AW: Makros programmieren und auf andere Bere
19.03.2020 12:56:22
Regina
Hi Alina,
teste mal so:
Sub Berechnung()
' Berechnung Makro
Dim lng_spalte As Long
Dim obj_wks As Worksheet
Set obj_wks = ThisWorkbook.Worksheets("Tabelle1") ' Name anpassen
With obj_wks
Do Until lng_spalte > .Cells(3, Columns.Count).End(xlToLeft).Column
.Cells(3, lng_spalte).FormulaR1C1 = "=IF(RC2="""","""",IF(RC2>=R1C,1,0))"
.Cells(3, lng_spalte).AutoFill Destination:=Range("C3:C21187")
.Cells(3, lng_spalte).AutoFill Destination:=Range("C3:J3"), Type:=xlFillDefault
lng_spalte = lng_spalte + 1
.Cells(4, lng_spalte).AutoFill Destination:=Range("D3:D21187")
lng_spalte = lng_spalte + 1
.Cells(5, lng_spalte).AutoFill Destination:=Range("E3:E21187")
lng_spalte = lng_spalte + 1
.Cells(6, lng_spalte).AutoFill Destination:=Range("F3:F21187")
lng_spalte = lng_spalte + 1
.Cells(7, lng_spalte).AutoFill Destination:=Range("G3:G21187")
lng_spalte = lng_spalte + 1
.Cells(8, lng_spalte).AutoFill Destination:=Range("H3:H21187")
lng_spalte = lng_spalte + 1
.Cells(9, lng_spalte).AutoFill Destination:=Range("I3:I21187")
lng_spalte = lng_spalte + 1
.Cells(10, lng_spalte).AutoFill Destination:=Range("J3:J21187")
lng_spalte = lng_spalte + 1
Loop
End With
End Sub
Falls das so nicht passt, musst Du mal eine Beispielmappe hochladen.
Gruß Regina
Anzeige
AW: Makros programmieren und auf andere Bere
19.03.2020 13:26:29
Anna
Hi Regina,
vielen Dank für die schnelle Antwort, leider funktioniert das so noch nicht. Ich habe einfach mal eine Beispielmappe hochgeladen mit einem Auschnitt aus meiner Datei.
https://www.herber.de/bbs/user/135951.xlsx
AW: Makros programmieren und auf andere Bere
19.03.2020 14:55:37
Regina
Hi, da war mein Code in der Tat etwas zu kurz gesprungen, teste mal so:
Sub Berechnung()
' Berechnung Makro
Dim lng_spalte As Long
Dim obj_wks As Worksheet
Dim str_spalte As String
Set obj_wks = ThisWorkbook.Worksheets("Tabelle1") ' Name anpassen
lng_spalte = 3
With obj_wks
Do Until lng_spalte > .Cells(3, Columns.Count).End(xlToLeft).Column
str_spalte = Split(Cells(1, lng_spalte).Address, "$")(1)
.Cells(3, lng_spalte).FormulaLocal = "=Wenn($B3="""";"""";Wenn(B$3>=" & str_spalte & "$ _
1;1;0))"
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(3, . _
Cells(3, Columns.Count).End(xlToLeft).Column)), Type:=xlFillDefault
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
Loop
End With
End Sub
Das ließe sich das auch ohne Funktion realisieren. weiß aber nicht, ob das von der Performance her günstiger wäre.
Gruß Regina
Anzeige
AW: Makros programmieren und auf andere Bere
19.03.2020 15:16:29
Anna
Hallo Regina,
leider funktioniert es immer noch nicht. Es kommt immer der Fehler "Fehler beim Kompilieren". Es wird dann anschließend die Zeile mit der WENN-Funktion markiert.
AW: Makros programmieren und auf andere Bere
19.03.2020 15:29:32
peterk
Hallo Anna
Vorsicht bei Copy/Past des Codes. Die "_" setzt die Forumssoftware, du mußt sie händisch löschen!
Z.B

.Cells(3, lng_spalte).FormulaLocal = "=Wenn($B3="""";"""";Wenn(B$3>=" & str_spalte & "$ _
1;1;0))"
Solte in deinem Code so aussehen:

.Cells(3, lng_spalte).FormulaLocal = "=Wenn($B3="""";"""";Wenn(B$3>=" & str_spalte & "$1;1;0))"

Anzeige
AW: Makros programmieren und auf andere Bere
19.03.2020 16:43:21
Regina
Hi,
mir ist gerade aufgefallen, der Cod eist so doch unnötig lang. Warum in 9-er-Blöcken arbeiten? Du willst doch im Prozip die Funktion in Zeile 3 jeder gefüllten Spalte eintragen und runter kopieren.
Probier mal so:
Sub Berechnung()
' Berechnung Makro
Dim lng_spalte As Long
Dim obj_wks As Worksheet
Dim str_spalte As String
Set obj_wks = ThisWorkbook.Worksheets("Tabelle1") ' Name anpassen
lng_spalte = 3
With obj_wks
Do Until lng_spalte > .Cells(1, Columns.Count).End(xlToLeft).Column
str_spalte = Split(Cells(1, lng_spalte).Address, "$")(1)
.Cells(3, lng_spalte).FormulaLocal = "=Wenn($B3="""";"""";Wenn(B$3>=" & str_spalte & "$ _
1;1;0))"
.Cells(3, lng_spalte).AutoFill Destination:=Range(.Cells(3, lng_spalte), .Cells(21187,  _
lng_spalte))
lng_spalte = lng_spalte + 1
Loop
End With
End Sub
Der Hinweis von peterk war übrings wichtig: Alle Unterstriche entfernen und die dahinter stehenden zeichen "hoch ziehen".
Gruß
Regina
Anzeige
AW: Makros programmieren und auf andere Bere
19.03.2020 17:35:57
Anna
Hallo,
erstmal vielen Dank für den Hinweis Peter!
Ich will in 9er Blöcken arbeiten, weil die Berechnungen in 8 Spalten unterschiedlich sind(ok, 7 mal gleich, aber in der 8. ist sie etwas anders), dann folgt eine Zeile mit Text und anschließend wiederholt sich die Art der Berechnung wieder.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige