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

ein Makro um ein paar kleine Dinge erweitern

ein Makro um ein paar kleine Dinge erweitern
27.04.2019 19:15:06
Christian
Hallo, guten Abend
ich würde mich freuen, wenn ihr mir unten stehendes Makro um ein paar Dinge erweitert,
sind ein paar Punkte aber ich denke nichts, wofür ein VBA Profi lange brauchen würde.
Ich habe 2 Tabellen, eine heißt Ergebnis und in dieser steht auch das Makro und die andere heißt vorher.
Ziel des ganzen ist, die Spalte J zu vergleichen, in wiefern sich in Spalte J etwas durch das Ausführen des bisherigen Makros geändert hat.
das Makro soll jetzt folgendes tun:
1. den bisherigen Inhalt von "vorher" löschen.
2. den Inhalt von "Ergebnis" nach "vorher" kopieren um die Kopie zum späteren Vergleich zu erstellen, dabei in "vorher" anstatt der Formeln die Werte einfügen. (Formeln stehen ausschließlich in Zeile 1).
3. das bisherige Makro in "Ergebnis" ausführen.
4. beide Tabellen neu sortieren, beide Tabellen mit dem ersten Kriterium Spalte A aufsteigend, 2. Kriterium Spalte D aufsteigend.
5. in Spalte L der Tabelle vorher die Formel

=UND(REST(J1;1)=0;J1>=1;J1UND(REST(Ergebnis!J1;1)=0;Ergebnis!J1>=1;Ergebnis!J1
einfügen und die Werte statt den Formeln einfügen.
6. Alle Zeilen in Tabelle "vorher" löschen, in denen die Formel FALSCH ausgegeben hat.
7. Die Tabelle "Ergebnis" wieder so sortieren, wie sie durch das bisherige Makro schonmal sortiert wurde.
Würde mich sehr freuen wen das jemand für mich umsetzt.
Danke
Christian

Sub Makro3()
Dim loLetzte As Long, j As Long, x As Long
Application.ScreenUpdating = False
With Worksheets("Ergebnis")
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B1:C1").Copy .Range("B1:C" & loLetzte)
.Range("B2:C" & loLetzte).Copy
.Range("B2:C" & loLetzte).PasteSpecial xlPasteValues
.Range("E1").Copy .Range("E2:E" & loLetzte)
.Range("E2:E" & loLetzte).Copy
.Range("E2:E" & loLetzte).PasteSpecial xlPasteValues
.Range("K1").Copy .Range("K1:K" & loLetzte)
.Range("K2:K" & loLetzte).Copy
.Range("K2:K" & loLetzte).PasteSpecial xlPasteValues
.Columns("K:K").Copy
.Columns("F:F").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.Range("L1") = "Formel"  'Zeile 1 markieren!!
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("C1:C" & loLetzte), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("F1:F" & loLetzte), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("A1:L" & loLetzte)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Zeile der Markierung in Spalte l suchen
x = .Cells(Rows.Count, 12).End(xlUp).Row
'Formeln ggf. in Zeile1 zurück kopieren
If x > 1 Then
.Cells(x, 2).Resize(1, 2).Copy .Range("B1")
.Cells(x, 7).Resize(1, 5).Copy .Range("G1")
.Cells(x, 5).Copy .Range("E1")
.Rows(x).Value = .Rows(x).Value
End If
.Range("G1:J1").Copy .Range("G2:J" & loLetzte)
.Range("G2:J" & loLetzte).Value = .Range("G2:J" & loLetzte).Value
.Cells(x, 12) = Empty 'markierung löschen
.Range("E2").Select
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
klein ist anders
27.04.2019 21:47:55
onur
"ein Makro um ein paar kleine Dinge erweitern" - Sehr witzig.
AW: klein ist anders
27.04.2019 21:52:40
Christian
Hallo Onur,
sorry dann habe ich das wohl falsch eingeschätzt, wäre aber nett wenn du mir trotzdem hilfst.
Gruß
Christian
AW: klein ist anders
27.04.2019 21:55:16
onur
Die KOMPLETTE Datei wäre hilfreicher als das Makro.
AW: klein ist anders
27.04.2019 22:00:49
Christian
dann musst du leider bis morgen warten, bin im Moment dabei die Ergebnis zu aktualisieren, macht denke ich mehr Sinn wenn da aktuelle Daten drinstehen.
AW: klein ist anders
28.04.2019 11:07:48
Christian
Hallo Onur,
naja das ganze gestaltet sich doch als schwieriger als gedacht, weil die gesamte Tabelle 1,12 MB hat das ganze auf 300 KB beschränken und immer noch alles was benötigt wird drin zu haben, das dauert. Vieles kann ich nicht löschen, da die Formeln in Ergebnis sich per SVERWEIS nochmal auf andere Tabellenblätter beziehen, also wenn ich das bisherige Makro ohne die anderen Tabellenblätter ausführe kommt da nur Murks raus.
Und bevor du mich jetzt fragst warum sagst du nicht vorher dass noch mehr Tabellenblätter eine Rolle spielen, ganz einfach weil sich von dem was ich zusätzlich haben wollte nichts auf diese bezieht, nur das Makro dass ich bereits habe hat mit Formeln zu tun, die sich auf die anderen Blätter beziehen.
Naja nichts desto trotz, die gestern abend angesprochenen Änderungen an Ergebnis sind fertig. Ich habe einfach mal ein Makro aufgezeichnet, vielleicht kannst du ja damit schon was anfangen.
Im Gegensatz zu dem was ich gestern geschrieben habe, habe ich einen Filter eingesetzt, ich wusste sonst nicht, wie ich händig die Zeilen mit FALSCH löschen soll.

Sub Makro1()
' Makro1 Makro
' Tastenkombination: Strg+y
'Inhalt von vorher löschen
Cells.Select
Selection.ClearContents
'Inhalt von Ergebnis nach vorher kopieren und Werte einfügen
Sheets("Ergebnis").Select
Range("A1:K1289").Select
Range("K7").Activate
Selection.Copy
Sheets("vorher").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Makro 3 Ausführen
Sheets("Ergebnis").Select
Application.CutCopyMode = False
Application.Run "Filme.xlsm!Makro3"
'beide Taballen sortieren
Range("A1:K1289").Select
Range("B9").Activate
ActiveWorkbook.Worksheets("Ergebnis").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Ergebnis").Sort.SortFields.Add2 Key:=Range( _
"A1:A1289"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Ergebnis").Sort.SortFields.Add2 Key:=Range( _
"D1:D1289"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Ergebnis").Sort
.SetRange Range("A1:K1289")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("vorher").Select
Range("A1:K1289").Select
Range("F26").Activate
ActiveWorkbook.Worksheets("vorher").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("vorher").Sort.SortFields.Add2 Key:=Range( _
"A1:A1289"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("vorher").Sort.SortFields.Add2 Key:=Range( _
"D1:D1289"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("vorher").Sort
.SetRange Range("A1:K1289")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Genannte Formel in Spalte L einfügen und Werte einfügen
Range("L1").Select
ActiveSheet.Paste
Selection.Copy
Range("L1:L1289").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Spalte L nach Falsch filtern und Zeilen mit falsch löschen
Columns("L:L").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$L$1:$L$1290").AutoFilter Field:=1, Criteria1:="FALSCH"
Rows("2:2").Select
Rows("2:1289").Select
Selection.Delete Shift:=xlUp
ActiveWindow.SmallScroll Down:=-9
'den Filter wieder aufheben, sodass die Zeilen mit WAHR wieder eingeblendet sind.
ActiveSheet.ShowAllData
'Tabelle Ergebnis wieder sortieren
Sheets("Ergebnis").Select
ActiveWorkbook.Worksheets("Ergebnis").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Ergebnis").Sort.SortFields.Add2 Key:=Range( _
"C1:C1289"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Ergebnis").Sort.SortFields.Add2 Key:=Range( _
"F1:F1289"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Ergebnis").Sort
.SetRange Range("A1:K1289")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige