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

Vereinfachungsmakro - Datensatz

Vereinfachungsmakro - Datensatz
28.12.2016 15:51:47
Simon
Hallo ihr Lieben,
hier mein erster Beitrag. Ich stehe vor der Problemstellung eine .xls, die viele nicht notwendige Daten erhält, stark auszudünnen um aus den relevanten Daten schneller Informationen zu erhalten.
Der Datensatz besteht aus 27 Spalten und sehr sehr vielen Zeilen.
Anforderungen an das Skript:
=> Zeilen entfernen aber niemals die 1. Zeile
1. Alle Zeilen mit ColorIndex (Grün) = 43 sollen entfernt werden. Die Farbe grün streckt sich hier immer über den gesamten Spaltebereich innerhalb einer Zeile.
2. Alle Zeilen in denen in Spalte B (2) nichts enthalten ist (außer Zeile 1) oder ein bestimmter Wert „bla“ gesetzt ist, sollen entfernt werden. Bla kann in vielen Zellen innerhalb der Spalte B vorkommen (jedoch nicht in anderen Spalten!). Immer wenn das der Fall ist, soll gleich die gesamte Zeile gelöscht werden.
3. Alle Zeilen, bei denen in Spalte F eine 0 steht, sollen in ein neues zweites Tabellenblatt kopiert werden (inkl. erste Zeile) mit dem Namen „NeuesBlatt“ (wichtig, dass das erst passiert nachdem 1 und 2 abgeschlossen ist), alle restlichen Zeilen sollen in dem Tabellenblatt bestehen bleiben
=> Berechnetes Feld
5. Für alle bestehenden Zeilen bei denen Spalte F NICHT 0 ist, sollen im ersten Tabellenblatt eine weitere Spalte (am Ende) hinzugefügt werden in denn ein berechnetes Feld montiert werden soll. Die Formel ist natürlich abhängig davon, wann der folgende Schritt mit der Spaltenlöschung kommt. Es soll auf jeden Fall fröhlich rumdividiert werden und ein Prozentsatz ausgerechnet werden. Nachdem Schritt 4 auch noch getan ist gilt folgende Formel: =(D3-(F3*-1000/C3))/(F3*-1000/C3) . Das ist ein Beispiel für Zeile3.
=> Spalten entfernen
4. Folgende Spalten sollen gelöscht werden: 4,6, F:L, N:Y, 27
Ich als VBA-Anfänger bin jetzt seit einigen Wochen dran und habe schon unzählige Tutorials durch. Mein Ansatz ist aktuell folgender:

Sub VereinfachungsMakro()
Dim Bereich As Range
Set Bereich = Union(Columns(4), Columns(6), Columns("F:L"), Columns("N:Y"), Columns(27))
Bereich.Delete
Dim rng As Range
For Each rng In ActiveSheet.UsedRange
If rng.Interior.ColorIndex = 43 Then
rng.Delete
End If
Next rng
Dim rng2 As Range
For Each rng2 In ActiveSheet.UsedRange
If rng2.Value = "" Then
rng2.Delete
End If
Next rng2
Dim rng3 As Range
For Each rng3 In ActiveSheet.UsedRange
If rng3.Value = "bla" Then
rng3.Delete
End If
Next rng3
End Sub
Hat hier jemand Verbesserungsvorschläge bzw. kann mir Tipps geben wie ich zum Ergebnis komme? Ich bin sehr darauf versteift das selbst hinzukriegen, aber leider reichen meine Kenntnisse dafür noch nicht aus.
Vielen Dank und schöne Grüße
Simon

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vereinfachungsmakro - Datensatz
28.12.2016 22:43:39
Michael
Hi,
warum ist es wichtig, daß 3. erst nach 1. und 2. kommt?
FALLS dort Formeln vorhanden sein sollten, die sich auf Zeilen vorher/nachher beziehen, sind die durch das Löschen fehlerhaft: #WERT! - falls nicht, ist es egal, dann kann man es mit 1. und 2. in einem Rutsch machen...
Außerdem bei 3.: nur "kopiert" oder "kopiert und gelöscht"?
Am besten ist, Du lädst eine Beispieldatei mit ein paar Datensätzen hoch, meinetwegen 20 oder so, damit wir genau wissen, was Du benötigst.
Gehen könnte es etwa so:
Sub raus()
Dim vonZ&, bisZ&, nachZ&, z& ' & = as long
Dim sh2 As Worksheet
Dim loeschen As Boolean
Const bla = "bla"
Const weg = "D:D,F:L,N:Y,AA:AA" ' Columns(6) IST Spalte F!!!
Range(weg).Delete
vonZ = 2
nachZ = 2
bisZ = Range("A" & Rows.Count).End(xlUp).Row
Set sh2 = Sheets("Ziel")
Range("A1:F1").Copy sh2.Range("A1")
Range("G1") = "x"
For z = vonZ To bisZ
loeschen = False
If Range("A" & z).Interior.ColorIndex = 43 Or _
Range("B" & z).Value = "" Or Range("B" & z).Value = bla Then
loeschen = True
Else
If Range("F" & z) = 0 Then
Range("A" & z).Resize(, 6).Copy sh2.Range("A" & nachZ)
loeschen = True ' falls die auch gelöscht werden soll
nachZ = nachZ + 1
End If
End If
If loeschen Then Range("G" & z).Value = "x" Else Range("G" & z).Value = z
Next
Range("A1:G" & bisZ).RemoveDuplicates Columns:=7, Header:=xlNo
bisZ = Range("A" & Rows.Count).End(xlUp).Row
If bisZ 

Schöne Grüße,
Michael
Anzeige
AW: Vereinfachungsmakro - Datensatz
29.12.2016 10:05:16
Simon
Hallo Michael,
vielen Dank für deine Unterstützung!
Du hast Recht, Formeln sind ja nur beim berechneten Feld hinterlegt. Also kann 1-3 sicher in einem Rutsch gemacht werden.
Bei Schritt 3 ist mir noch ein Fehler aufgefallen - es ist Spalte M ("revenueOriginalNumberOfEvents") NICHT Spalte F. Das heißt, wenn dort der Wert "0" eingetragen ist, sollen alle dazugehörigen Zeilen kopiert und in ein neues Tabellenblatt kopiert werden. Anschließend können diese Zeilen im alten Tabellenblatt gelöscht werden. Wichtig ist, dass in beiden Tabellenblättern immer die 1. Zeile mit den Überschriften vorhanden ist.
Hier ist eine entsprchende Beispieldatei:

Die Datei https://www.herber.de/bbs/user/110241.xls wurde aus Datenschutzgründen gelöscht


Dort habe ich alle Spalten oben gelb markiert, die auf jeden Fall bleiben sollen. Auch das berechnte Feld habe ich schon mal dazu kopiert. Dies ist allerdings nicht im vorhandenen Datensatz erhalten und wurde manuell von mir eingefügt. Es wäre super, wenn das Makro dies auch übernehmen kann
1000 Dank - das ist wirklich klasse.
LG
Simon
Anzeige
AW: Vereinfachungsmakro - Datensatz
29.12.2016 20:20:49
Michael
Hi,
Datei anbei: https://www.herber.de/bbs/user/110257.xls
Das range("H1").clear kannst Du, wenn Du das Grün erhalten willst, auf range("H1").clearcontents ändern.
Schöne Grüße,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige