Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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 Aufzeichnung nachrüsten

Makro Aufzeichnung nachrüsten
09.03.2017 13:15:44
Shahed
Hallo zusammen,
könnte jemand mir weiterhelfen?
Per „Makros aufzeichnen“ habe ich mir eine Datei erstellt. Die Datei besteht aus 6 Arbeitsmappe.
3 Davon sind Rohdaten und 3 weitere sind berechnete Zeilen.
In Modulen habe ich z.B Sverweis oder WENN Funktionen:
z.B:
Sheets("ACC").Select
Range("D2").Select
ActiveCell.FormulaR1C1 = "=RC[-3]&""-""&RC[-2]&""-""&RC[-1]"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:<b>D4397</b>")
Range("D2:D4397").Select
~f~
Oder
~f~
Sheets("Event").Select
Range("E2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],ACC!C[-1]:C,2,FALSE)"
Selection.AutoFill Destination:=Range("E2:<b>E4708</b>")
Range("E2:E4708").Select
~f~
Problem:
Meine Rohdaten (erste 3 Tabellen) haben unterschiedliche Zeilenanzahlen und bei jedem Lauf ändert sich wieder. In den Beispielen sieht man, dass eine <i>in dem Fall</i> 4708 Zeilen hat und die andere 4397. Und beim nächsten Lauf kann wieder alles anders sein.
Wenn ich der Anzahl pauschal 100.000 eingebe, dauert die Berechnung ewig.
Bitte:
Kann jemand mir sagen, wie ich meine „Makro Aufzeichnung“ nachrüsten kann, damit sie vor jeden Formeln (SVERWEIS, Copy Paste, Wenn, ISTNV usw..), die Länge der Tabelle rechnet und demensprechend die Funktion durchführt.
Idee:
Der Anzahl als Variable definieren (z.B 4397)= <b>p</b>
Und Anstatt
~f~
Range("E2:E<b>4708</b>") --> Range("E2:E<b>p</b>")
Ist das so möglich?
Vielen Dank im Voraus.
Viele Grüße
Shahed

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
String-Schreibweise
09.03.2017 13:20:40
Michael
Hi,
das geht im Prinzip so:
dim p as long
p=4000
range("E2:E" & p)
wobei "E2:E" & p dann als String "E2:E4000" an den Range übergeben wird.
Schöne Grüße,
Michael
P.S.: guck Dir auch mal Range.Resize an, damit geht's auch:
range("E2").resize(p-1)
MINUS 1, weil erst ab Zeile 2
AW: Makros Aufzeichung nachrüsten
10.03.2017 11:09:52
Shahed
Hallo Michael,
so funktioniert leider nicht, da wieder fest mit 4000 Zeile gerechnet wird.
Ziel ist, dass der Code erstmal den Zeilenanzahl rechnet danach dementsprechend rechnet.
Noch jemand?
VG und Danke
Shahed
Dann meinst Du wohl das...
10.03.2017 11:27:27
Michael
Shahed,
...schau mal
Sub a()
Dim Ws As Worksheet: Set Ws = ThisWorkbook.Worksheets("ACC")
Dim r As Range
With Ws
'(.Rows.count, 4).End(xlUp).Row ermittelt die letzte befüllte
'Zelle in Spalte 4 = D:D
Set r = .Range("D2:D" & .Cells(.Rows.Count, 4).End(xlUp).Row)
r.FormulaR1C1 = "=RC[-3]&""-""&RC[-2]&""-""&RC[-1]"
End With
End Sub
Schema klar?
LG
Michael
Anzeige
AW: Makro Aufzeichnung nachrüsten
10.03.2017 11:22:10
Daniel
HI
diesen Codeteil
Sheets("ACC").Select
Range("D2").Select
ActiveCell.FormulaR1C1 = "=RC[-3]&""-""&RC[-2]&""-""&RC[-1]"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D4397")
Range("D2:D4397").Select
schreibt man besser so, die Formel wird soweit in Spalte D eingefügt, wie in Spalte A Werte stehen.
With Sheets("ACC")
With .Range("D2:D" & .Cells(Rows.count, 1).End(xlup).row)
.FormulaR1C1 = "=RC[-3]&""-""&RC[-2]&""-""&RC[-1]"
end with
End with
die WITH-Klammer ist ein Konstrukt, um Code zu verkürzen.
sie wird dann eingesetzt, wenn ein Objekt in der Folge häufiger benötigt wird.
hierbei wird dieses Objekt in der Zeile mit WITH definiert.
In der folge wird, wenn dieses Objekt verwendet werden soll, nur der Punkt "." gesetzt.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige