25.09.2016, 13:52
Hallo liebe Community,
ich habe folgendes Problem vor dem ich stehe.
Bis vor wenigen Tagen habe ich mich mit Excel VBA noch nicht wirklich auseinander gesetzt. Jedoch bin ich im Rahmen meiner Arbeit im Praxissemester gezwungen dies nachzuholen.
Ich habe Grundkenntnisse in Java und habe daher ein wenig Ahnung vom Programmieren (Deklaration von Variablen, Schleifen, if-else...)
Aufgabe/ Problem:
Ich habe eine Excel Tabelle, in der Daten aus einem externen Programm manuell eingefügt werden.
Diese Daten (4 Spalten) sortiere ich über eine Hilfsspalte (5. Spalte) nach einer benutzerdefinierten Liste.
Diesen Vorgang möchte ich nun über eine Schaltfläche automatisieren.
Dazu habe ich folgende Überlegungen getroffen.
Wenn ich den Button drücke soll folgendes passieren.
Die 5 Spalten sollen markiert werden und nach meiner benutzerdefinierten Liste sortiert werden.
Dieses Makro habe ich mit dem Makrorekorder aufgezeichnet, und für den ausgewählten Bereich funktioniert dies auch gut.
Hier der Code dazu:
Range(A4:E700).Select
ActiveWorkbook.Worksheets("Datenspeicher")Sort.Sortfields.Clear
ActiveWorkbook.Worksheets("Datenspeicher").Sort.SortFields.Add Key:=Range(_
"E4:E700"), SortOn:=xlSortOnValues, Order :=xlAscending, CustomOrder:=_
"LED Status, Lichtleiter Status, Justage Status, Spalt Justage", _DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Datenspeicher").Sort
.SetRange.Range("A4:E700E)
.Header=xlGuess
.MatchCase = Flase
.Orientation=xlTopToBottom
.SortMethod=xlPinYin
.Apply
End With
Danach füge ich manuell wieder 4 Spalten direkt daneben (also in Spalte F4 ein), die Hilfspalte entsteht automatisch und das gleiche Makro soll erneut ablaufen, nur in dem neuen Bereich um 5 Spalten nach rechts verschoben.
-->
Range(F4:J700).Select
ActiveWorkbook.Worksheets("Datenspeicher")Sort.Sortfields.Clear
ActiveWorkbook.Worksheets("Datenspeicher").Sort.SortFields.Add Key:=Range(_
"J4:J700"), SortOn:=xlSortOnValues, Order :=xlAscending, CustomOrder:=_
"LED Status, Lichtleiter Status, Justage Status, Spalt Justage", _DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Datenspeicher").Sort
.SetRange.Range("F4:J700")
.Header=xlGuess
.MatchCase = Flase
.Orientation=xlTopToBottom
.SortMethod=xlPinYin
.Apply
End With
Ich habe mir überlegt, dass eine do while Schleife optimal wäre, da am Anfang der Schleife die Abfrage stattfinden soll.
Die Bedingung für den Start der Schleife soll sein, dass die Spalte A, F, K... Inhalt hat, ansonsten soll ein Abbruch stattfinden. Besser gesagt soll das Makro solange laufen, wie Daten in einer Spalte vorhanden sind.
Und genau hier scheitert mein VBA Verständnis.
Ich weiß, dass die Range variable sein soll, also pro Schleifendurchlauf um 5 zunehmen soll.
Ich weiß aber nicht wie ich die Range als Variable deklarieren soll (Datentyp). Ich bräuchte wenn ich mich nicht irre 2 Variablen. Einmal Spalte 1( ab hier startet das Makro) und einmal Spalte 5 (um den Bereich zu markieren und dann zum sortieren)
Des Weiteren weiß ich nicht wie ich die Bedingung in der Schleife formulieren soll, damit die Schleife prüft, ob die Spalte Inhalt besitzt. Mir fehlen da schlicht die Befehle.
Und zu guter Letzt benötige ich noch den Befehl innerhalb der Schleife, sodass die Spalten um 5 erhöht werden (A-->F-->K..)
Ich wäre sehr verbunden wenn mir jemand Ratschläge, Tipps, und eventuell sogar die notwendigen Befehle geben könnte.
In einem anderen Forum konnte mir niemand wirklich helfen.
Mit freundlichen Grüßen
Christian
ich habe folgendes Problem vor dem ich stehe.
Bis vor wenigen Tagen habe ich mich mit Excel VBA noch nicht wirklich auseinander gesetzt. Jedoch bin ich im Rahmen meiner Arbeit im Praxissemester gezwungen dies nachzuholen.
Ich habe Grundkenntnisse in Java und habe daher ein wenig Ahnung vom Programmieren (Deklaration von Variablen, Schleifen, if-else...)
Aufgabe/ Problem:
Ich habe eine Excel Tabelle, in der Daten aus einem externen Programm manuell eingefügt werden.
Diese Daten (4 Spalten) sortiere ich über eine Hilfsspalte (5. Spalte) nach einer benutzerdefinierten Liste.
Diesen Vorgang möchte ich nun über eine Schaltfläche automatisieren.
Dazu habe ich folgende Überlegungen getroffen.
Wenn ich den Button drücke soll folgendes passieren.
Die 5 Spalten sollen markiert werden und nach meiner benutzerdefinierten Liste sortiert werden.
Dieses Makro habe ich mit dem Makrorekorder aufgezeichnet, und für den ausgewählten Bereich funktioniert dies auch gut.
Hier der Code dazu:
Range(A4:E700).Select
ActiveWorkbook.Worksheets("Datenspeicher")Sort.Sortfields.Clear
ActiveWorkbook.Worksheets("Datenspeicher").Sort.SortFields.Add Key:=Range(_
"E4:E700"), SortOn:=xlSortOnValues, Order :=xlAscending, CustomOrder:=_
"LED Status, Lichtleiter Status, Justage Status, Spalt Justage", _DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Datenspeicher").Sort
.SetRange.Range("A4:E700E)
.Header=xlGuess
.MatchCase = Flase
.Orientation=xlTopToBottom
.SortMethod=xlPinYin
.Apply
End With
Danach füge ich manuell wieder 4 Spalten direkt daneben (also in Spalte F4 ein), die Hilfspalte entsteht automatisch und das gleiche Makro soll erneut ablaufen, nur in dem neuen Bereich um 5 Spalten nach rechts verschoben.
-->
Range(F4:J700).Select
ActiveWorkbook.Worksheets("Datenspeicher")Sort.Sortfields.Clear
ActiveWorkbook.Worksheets("Datenspeicher").Sort.SortFields.Add Key:=Range(_
"J4:J700"), SortOn:=xlSortOnValues, Order :=xlAscending, CustomOrder:=_
"LED Status, Lichtleiter Status, Justage Status, Spalt Justage", _DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Datenspeicher").Sort
.SetRange.Range("F4:J700")
.Header=xlGuess
.MatchCase = Flase
.Orientation=xlTopToBottom
.SortMethod=xlPinYin
.Apply
End With
Ich habe mir überlegt, dass eine do while Schleife optimal wäre, da am Anfang der Schleife die Abfrage stattfinden soll.
Die Bedingung für den Start der Schleife soll sein, dass die Spalte A, F, K... Inhalt hat, ansonsten soll ein Abbruch stattfinden. Besser gesagt soll das Makro solange laufen, wie Daten in einer Spalte vorhanden sind.
Und genau hier scheitert mein VBA Verständnis.
Ich weiß, dass die Range variable sein soll, also pro Schleifendurchlauf um 5 zunehmen soll.
Ich weiß aber nicht wie ich die Range als Variable deklarieren soll (Datentyp). Ich bräuchte wenn ich mich nicht irre 2 Variablen. Einmal Spalte 1( ab hier startet das Makro) und einmal Spalte 5 (um den Bereich zu markieren und dann zum sortieren)
Des Weiteren weiß ich nicht wie ich die Bedingung in der Schleife formulieren soll, damit die Schleife prüft, ob die Spalte Inhalt besitzt. Mir fehlen da schlicht die Befehle.
Und zu guter Letzt benötige ich noch den Befehl innerhalb der Schleife, sodass die Spalten um 5 erhöht werden (A-->F-->K..)
Ich wäre sehr verbunden wenn mir jemand Ratschläge, Tipps, und eventuell sogar die notwendigen Befehle geben könnte.
In einem anderen Forum konnte mir niemand wirklich helfen.
Mit freundlichen Grüßen
Christian