VBA Excel Filter mit vor Definiertem Freien Platz
Hey ihr ,
unzwar habe ich einen Excel Report , für den ich ein VBA script habe , was mir meine direkten sachen Filtert.
Das Filtern funktioniert auch so ohne Problem ,es werden meine Excel Sheets erstellt alles Gut .
Jetzt kommt es zu der Frage
Zur Info : Es sind Status Einträge
Ich erstelle ein Dictenory mit allen Einträgen in meinem Fall ist es [ - A bis ZY ] .
Jetzt sollen alle einträge in dem neuen Sheet nicht am Anfang sondern paar Spalten weiter unten eingefügt werden , da oben für jeden Status ein Seperater Text Spezifisch für den Status mit eingefügt werden soll .
Also wenn er mir z.B. den Sheet A erstellt Diesen xyz Text mit einfügen und darunter weiter machen mit den Einträgen .
Wenn er jetzt zum erstellen von Sheet B kommt Diesen Text mit Blabla einfügen .
Aufbau des Excel Files
Geht von A - L
Einträge sind
von links nach rechts ...
Beschreibung , Bezeichner ,Betreiberbezeichner , Wert, Einheit ,Objektbeschreibung , Zustand , Typ ;L/S, Parameter, Min, Max
Ich Filter nach Zustand und erstelle für jede Zustands möglichkeit ein neues Sheet wo alle Einträge mit dem Zustand Hinzugefügt werden , das Funktioniert Ohne Probleme .
Es gibt gesamt 14 Zustände
jetzt soll für Jeden Zustand ein Seperater Text am Anfang mit eingefügt werden und darunter die Einträge
Beispiel :
Zustand 1 Es muss das und das Gemacht werden
Datensatz
Datensatz
alle Einträge mit mit Zustand 1 abgearbeitet , kommt Zustand 2
wieder oben der Eintrag
Zustand 2 Hier muss es anders Gemacht werden
Datensatz
Datensatz
...
usw ...
hoffe man versteht es nu besser , es ist immer blöd was zu erklären was man selber nicht ganz versteht ...
code sieht wie folgt aus (beiu dem Wurde mir hier auch geholfen )
danke schon mal im voraus für die Hilfe
gruß chaos2go
unzwar habe ich einen Excel Report , für den ich ein VBA script habe , was mir meine direkten sachen Filtert.
Das Filtern funktioniert auch so ohne Problem ,es werden meine Excel Sheets erstellt alles Gut .
Jetzt kommt es zu der Frage
Zur Info : Es sind Status Einträge
Ich erstelle ein Dictenory mit allen Einträgen in meinem Fall ist es [ - A bis ZY ] .
Jetzt sollen alle einträge in dem neuen Sheet nicht am Anfang sondern paar Spalten weiter unten eingefügt werden , da oben für jeden Status ein Seperater Text Spezifisch für den Status mit eingefügt werden soll .
Also wenn er mir z.B. den Sheet A erstellt Diesen xyz Text mit einfügen und darunter weiter machen mit den Einträgen .
Wenn er jetzt zum erstellen von Sheet B kommt Diesen Text mit Blabla einfügen .
Aufbau des Excel Files
Geht von A - L
Einträge sind
von links nach rechts ...
Beschreibung , Bezeichner ,Betreiberbezeichner , Wert, Einheit ,Objektbeschreibung , Zustand , Typ ;L/S, Parameter, Min, Max
Ich Filter nach Zustand und erstelle für jede Zustands möglichkeit ein neues Sheet wo alle Einträge mit dem Zustand Hinzugefügt werden , das Funktioniert Ohne Probleme .
Es gibt gesamt 14 Zustände
jetzt soll für Jeden Zustand ein Seperater Text am Anfang mit eingefügt werden und darunter die Einträge
Beispiel :
Zustand 1 Es muss das und das Gemacht werden
Datensatz
Datensatz
alle Einträge mit mit Zustand 1 abgearbeitet , kommt Zustand 2
wieder oben der Eintrag
Zustand 2 Hier muss es anders Gemacht werden
Datensatz
Datensatz
...
usw ...
hoffe man versteht es nu besser , es ist immer blöd was zu erklären was man selber nicht ganz versteht ...
code sieht wie folgt aus (beiu dem Wurde mir hier auch geholfen )
Sub CopyUniqueToSheets()
'Alle Leeren Einträge mit etwas Füllen keine Datei mit Leeren Namen erstellt werden kann
Columns("G:G").Select
Selection.Replace What:="", Replacement:="empty", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Dim ws As Worksheet, newWS As Worksheet, cell As Range, dic As Object, c As Range
'Dictionary-Objekt erzeugen
Set dic = CreateObject("Scripting.Dictionary")
'Worksheet festlegen in dem die Daten liegen
Set ws = Sheets(1)
'letze Zeile ermitteln
lastRow = ws.UsedRange.Rows.Count
For Each cell In ws.Range("G25:G" & lastRow)
'Wenn der Zustand in der aktuellen Zelle noch nicht verarbeitet wurde
If Not dic.Exists(cell.Value) Then
'Zustand zum Dictionary hinzufügen
dic.Add cell.Value, ""
'neues Worksheet hinzufügen
Set newWS = Worksheets.Add(After:=Worksheets(Worksheets.Count))
'dem Worksheet den Namen des Zustandes geben
newWS.Name = cell.Value
'Überschriftenzeile übertragen
ws.Range("A24").EntireRow.Copy newWS.Range("A24")
'Suche in Spalte G
With ws.Range(cell, "G" & lastRow)
'Suche den Zustand in der aktuellen Zelle
Set c = .Find(cell.Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
'Eintrag gefunden, kopiere die gefundene Zeile ins neue Sheet ans Ende
c.EntireRow.Copy newWS.UsedRange.Cells(newWS.UsedRange.Rows.Count + 1, 1)
'Suche den nächsten Eintrag
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End If
Next
MsgBox "Its Done"
End Sub
danke schon mal im voraus für die Hilfe
gruß chaos2go
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 260063
Url: https://administrator.de/contentid/260063
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
14 Kommentare
Neuester Kommentar
Zitat von @chaos2go:
Also wenn er mir z.B. den Sheet A erstellt Diesen xyz Text mit einfügen und darunter weiter machen mit den Einträgen
Wenn er jetzt zum erstellen von Sheet B kommt Diesen Text mit Blabla einfügen .
Ich glaube keiner versteht hier so ganz was du meinst. Nutze unseren vielfältigen Formatierungsmöglichkeiten um deiner Erklärung etwas mehr Klarheit zu verleihen.Also wenn er mir z.B. den Sheet A erstellt Diesen xyz Text mit einfügen und darunter weiter machen mit den Einträgen
Wenn er jetzt zum erstellen von Sheet B kommt Diesen Text mit Blabla einfügen .
Stell dir immer vor das wir dein Sheet nicht kennen...
Gruß jodel32
Hallo,
ich bin mit VBA Script nicht weiter vertraut, aber ausgehend von VBA sollte es doch möglich sein,
die erste Zeilennummer anzugeben, wo dein Report hingeschrieben wird.
Bzw. hast du eine Variable für den Zeilenindex und fängst mit deinen Texten bei Zele 1 an und die Variable wird dann beim Report weiter hochgezählt.
Gruß
Xolger
ich bin mit VBA Script nicht weiter vertraut, aber ausgehend von VBA sollte es doch möglich sein,
die erste Zeilennummer anzugeben, wo dein Report hingeschrieben wird.
Bzw. hast du eine Variable für den Zeilenindex und fängst mit deinen Texten bei Zele 1 an und die Variable wird dann beim Report weiter hochgezählt.
Gruß
Xolger
Keine Ahnung wie du es für den Report realisiert hast aber:
Vor der Ausgabe in einem Sheet kannst du doch erstmal eine Zelle (1,1) ansteuern und deinen Text reinschreiben lassen.
Dann legt der Report los und startet mit der Ausgabe halt bei Zelle (2,1).
Oder sehe ich das zu simpel?
Ansonsten poste mal einen Codeschnipsel damit man sieht wie das Script arbeitet.
Vor der Ausgabe in einem Sheet kannst du doch erstmal eine Zelle (1,1) ansteuern und deinen Text reinschreiben lassen.
Dann legt der Report los und startet mit der Ausgabe halt bei Zelle (2,1).
Oder sehe ich das zu simpel?
Ansonsten poste mal einen Codeschnipsel damit man sieht wie das Script arbeitet.
Moin,
einfach in einem zweiten Dictionary zu Beginn deine Statustexte mit den Zuständen als Key hinterlegen:
Und dann hinter Zeile 30 folgendermaßen in das jeweilige Sheet einfügen
Gruß jodel32
einfach in einem zweiten Dictionary zu Beginn deine Statustexte mit den Zuständen als Key hinterlegen:
set dicZustandstexte = CreateObject("Scripting.Dictionary")
dic.add "Zustand1","Es muss das und das Gemacht werden"
dic.add "Zustand2","Hier muss es anders Gemacht werden "
dic.add "Zustand3","Und hier noch was anderes"
' und so weiter
if dicZustandstexte.Exists(cell.Value) then
newWS.Range("A22").Value = dicZustandstexte.Item(cell.Value)
End if