Wer kann mir bei Schleifenprogrammierung helfen?
#1
Hallo zusammen!

Ich bin nicht gerade der Crack was Excel angeht (komme auch nicht vom Fach, da darf ich das  :19: )  , wenngleich es dazu reicht, die Auswertungssoftware unserer Firma für unsere Zwecke anzupassen habe ich Schwierigkeiten, Folgendes umzusetzen:

Ich nutze hier eine Tabelle zwecks Einsatzplanung, die (stark vereinfacht) wie folgt aussieht:

[
Bild bitte so als Datei hochladen: Klick mich!
]

Wie mache ich das, wenn ich mir in ein neues Blatt ausgeben lassen möchte, wer wann an welchem Ort ist? Und zwar für die Mitarbeiter einzeln... Also ich suche im Grunde eine Schleife, die in Abhängigkeit vom Namen in der jeweiligen Zeile nach den "X" bzw. idealerweilse auch nach "(x)" sucht und mir das dazugehörige Datum und den Ort ausgibt. Die Darstellung in der Zieltabelle sollte in etwa so aussehen:

[
Bild bitte so als Datei hochladen: Klick mich!
]

Dabei müssen Namen und Orte natürlich nicht automatisiert eingefügt werden, die habe ich so ruckzuck angelegt. Aber wie schaffe ich es, dass sich die Daten automatisch einfügen, bzw. aktualisieren? Da ich bin ich zu blöd zu anscheinend  Huh Ganz optimal wäre es, wenn die Daten in der "Zieltabelle" irgendwie markiert werden, wenn es sich um ein (x) statt ein X handelt...

Hat da einer ne coole Lösung für mich? Hatte gedacht, dass man das mit ner Schleife mal eben hinbekommt, aber so easy fand ichs dann doch nicht... Und wenn ich da ewig dranhänge, bin ich dann doch schneller, die Daten per Hand einzutragen... Aber für die nächsten Planungen wäre es schön, das automatisch zu haben :20:

Vielen Dank im Voraus!!
Top
#2
Hallo,

mal ganz ehrlich, ich habe es nicht verstanden was Du machen willst  :05:

Wenn Du ein Makrocode willst, dann brauche ich von Dir eine Beispieldatei (zum Testen) wobei einige Zeilen reichen würden.
Ferner braucht man, um einen Code zu erstellen eine genauere Beschreibung, was wann und wo passieren soll.

Mit Bildern kann und will hier niemand was anfangen.
Wir müßten ja sonst die Datei nachbauen und das geht garantiert in die Hose.
Außerdem ist der Aufwand viel zu groß.
Top
#3
Oki... dann noch mal von vorn. Im Anhang Beispieldatei, an der allerdings noch nix gemacht ist.

Im zweiten Tabellenblatt wäre es richtig cool, wenn die Daten, die ich nun per Hand reingeschrieben haben, automatisch aus dem ersten Blatt eingefügt werden würden. Damit meine ich jetzt nur die Einsatztage und die Zusatzinfo "(x)", der Einsatzort und der Name des MA kann ich per Hand eingeben. Nur die Einsatztage sollen sich im besten Fall von selbst einfügen und aktualisieren, wenn im ersten Blatt Änderungen vorgenommen werden bzw. per Knopfdruck aktualisiert werden können.

Also brauche ich eine Funktion, die in der Zeile des entsprechenden Mitarbeiters nach "X" oder "(x)" sucht und mir dann das Datum ausgibt und mir bei der Person hinter die Zelle mit dem ensprechenden Ort schreibt.

Wenn die Berücksichtigung des Ortes zu kompliziert wird, würde es auch reichen, nur das Datum auszugeben, auch das wäre schon eine riesen Hilfe...

Wie könnte/würde man das angehen?


Angehängte Dateien
.xlsx   Beispieleinsatzplan.xlsx (Größe: 12,29 KB / Downloads: 8)
Top
#4
Hallo,


Zitat:Wenn die Berücksichtigung des Ortes zu kompliziert wird, würde es auch reichen, nur das Datum auszugeben, auch das wäre schon eine riesen Hilfe...

so wie ich das sehe, ist das nicht kompliziert, jedenfalls dann nicht, wenn man vernünftige Angaben bekommt.
Darum nochmal die schon oben beschriebene Bitte, genau zu beschreiben, was Du erreichen willst.
Mit anderen Worten, Du weißt genau, was Du erreichen willst; ich aber eben leider nicht.
Versuche doch mal jemandem anderen ... der überhaupt nicht weiß um was es geht ..., Schritt für Schritt zu erklären,
was Du erreichen willst. Das Programm kann doch nur dann vernünftig geschrieben werden, wenn dem Programmierer
klar ist, was er Excel beibringen soll. Folglich muß ich exakt wissen, was ich Excel für Anweisungen geben muß.
Momentan sehe ich nur Zellen, die mit einem Datum gefüllt sind und andere Zellen, die noch ein "x" oder ein "X" oder
ein "(x)" dahintergeklemmt haben. Ich habe aber nicht begriffen, warum und wann diese Anhänge gebraucht werden und
wann nicht.
Top
#5
Hi Peter,

(30.07.2015, 18:06)Käpt schrieb: Momentan sehe ich nur Zellen, die mit einem Datum gefüllt sind und andere Zellen, die noch ein "x" oder ein "X" oder
ein "(x)" dahintergeklemmt haben. Ich habe aber nicht begriffen, warum und wann diese Anhänge gebraucht werden und
wann nicht.

ich verstehe das so:
In der Tabelle "Einsatzplan komplett" wird per x markiert, welcher Mitarbeiter an welchem Tag in welchem Ort eingesetzt wird.

Die Tabelle "Einsätze einzelner MA" ist die Wunsch-Ergebnis-Tabelle, in der zusammengefasst ist für die einzelnen Mitarbeiter, an welchem Ort sie wann waren.

Die beiden Sachen, die für mich noch fraglich sind:
  1. was soll bei (x) geschehen?
  2. wie wird das per VBA gelöst?
Top
#6
Echt so kompliziert? Ich finde andere Beiträge hier deutlich komplizierter und dennoch gibts oft direkt ne Lösung. Hatte gedacht, dass das hier ne Sache von ein paar  Minuten ist für Leute, die sich echt auskennen (im Gegensatz zu mir) Huh

Sorry, aber eh ich das hier drei mal beschrieben habe, bin ich selbst dann doch schneller. Ich habe die Lösung gerade unerwartet hinbekommen, wenn nicht gerade galant, aber es läuft. Trotzdem danke für den Versuch!

VG
Top
#7
(31.07.2015, 08:57)Rabe schrieb: Hi Peter,


ich verstehe das so:
In der Tabelle "Einsatzplan komplett" wird per x markiert, welcher Mitarbeiter an welchem Tag in welchem Ort eingesetzt wird.

Die Tabelle "Einsätze einzelner MA" ist die Wunsch-Ergebnis-Tabelle, in der zusammengefasst ist für die einzelnen Mitarbeiter, an welchem Ort sie wann waren.

Die beiden Sachen, die für mich noch fraglich sind:
  1. was soll bei (x) geschehen?
  2. wie wird das per VBA gelöst?

Ja ganz genau!

Frage zwei wäre auch meine Frage gewesen... Smile
(x) ist einfach ein halber Einsatztag statt eines ganzen...
Top
#8
Hallo!
Zitat:Ich finde andere Beiträge hier deutlich komplizierter und dennoch gibts oft direkt ne Lösung.
Eben! Was Du deutlich komplizierter findest, schien dann für die Helfer nicht kompliziert zu sein, denn ansonsten gäbe es ja keine schnelle Lösung.
Die Einfachheit liegt meistens im Auge des Betrachters.
Zitat:Ich habe die Lösung gerade unerwartet hinbekommen, wenn nicht gerade galant, aber es läuft.
Du scheinst den Sinn von Foren nicht zu verstehen!
Stelle Dir mal vor, jemand recherchiert (ja, solche Leute gibt es noch) und stößt durch Zufall auf diesen Thread.
Meinst Du nicht, dass es sinnvoll wäre, aus diesem Grund Deine Lösung vorzustellen?
Es würde dem Recherchierenden helfen.
Außerdem, noch viel wichtiger:
Es würde auch Dir helfen, denn Deine "nicht galante" Lösung könnte dann nicht nur "aufgehübscht" werden, sondern vielleicht auch schneller oder fehlerresistenter.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • DbSam
Top
#9
(31.07.2015, 09:41)RPP63 schrieb: Meinst Du nicht, dass es sinnvoll wäre, aus diesem Grund Deine Lösung vorzustellen?
Es würde dem Recherchierenden helfen.

Ja genau das hatte ich vor, daher bin ich jetzt hier.

Uff... also ich finde den Ton in Foren irgendwie immer ein bisschen anstrengend, noch bevor man überhaupt irgendetwas gemacht hat, findet irgendjemand immer irgendwas zu beanstanden oder fühlt sich durch irgendetwas angegriffen. Warum ist das immer so..? Schade.

Hier also meine "Lösung", extra mit netten Kommentaren versehen. Vermutlich etwas einfach gehalten, aber es funktioniert mittlerweile sehr gut Blush :

Code:
Sub Schleife()
Dim i As Integer 'zählvariable 1
Dim n As Integer 'zählvariable 2
Dim x As Integer
Dim y As Integer
Dim zeil As Integer
Dim anzahl_termine As Integer
Dim name As String
Dim vorname As String
Dim spalte As Integer
Set t1 = ThisWorkbook.Sheets("aktuell")
Set t2 = ThisWorkbook.Sheets("Einsätze einzelner MA")
Worksheets("Einsätze einzelner MA").Cells.ClearContents
Worksheets("Einsätze einzelner MA").Cells.Font.Bold = False
spalte = 1
zeile = -2
For i = 17 To 40                        ' läuft Zeilen durch
   zeile = zeile + 3
   name = t1.Cells(i, 1)
   vorname = t1.Cells(i, 2)
   anzahl_termine = t1.Cells(i, 11)
   t2.Cells(zeile, 1) = name + ", " + vorname
   t2.Cells(zeile, 1).Font.Bold = True
   t2.Cells(zeile + 1, 1) = "Datum"
   t2.Cells(zeile + 1, 2) = "Ort"
   t2.Cells(zeile + 1, 3) = "Einsatzart"                           'Ganzer oder halber Tag
   t2.Cells(zeile + 1, 4) = "Weitere MA an diesem Tag"             'übrige Mitarbeiter an diesem Tag werden dazu angezeigt
   zeile = zeile + 1
       For n = 13 To 52                                            'läuft Spalten in erster Tabelle durch
           If t1.Cells(i, n) = "X" Or t1.Cells(i, n) = "(x)" Then
                 zeile = zeile + 1
                 t2.Cells(zeile, spalte) = t1.Cells(3, n)          'schreibt Datum
                 t2.Cells(zeile, spalte + 1) = t1.Cells(1, n)      'schreibt Schule
                   If t1.Cells(i, n) = "X" Then                    ' Abfrage, ob ganzer oder halber Tag
                       t2.Cells(zeile, spalte + 2) = "Ganzer Tag"
                       Else: t2.Cells(zeile, spalte + 2) = "Halber Tag"
                   End If
                 For x = 17 To 40                                    ' läuft noch mal Zeilen durch, um andere MA an diesem Tag zu finden
                   If t1.Cells(x, n) = "X" And t1.Cells(x, 1) <> name Then       'fragt ab, ob ganzer Tag und anderer MA als gerade bearbeitet wird
                        t2.Cells(zeile, spalte + 3) = t2.Cells(zeile, spalte + 3) + t1.Cells(x, 2) + " " + t1.Cells(x, 1) + ", "    'schreibt den weiteren MA in die entsprechende Zelle
                   End If
                 Next x
                 For y = 17 To 40
                   If t1.Cells(y, n) = "(x)" And t1.Cells(y, 1) <> name Then    'fragt, ob anderer MA den halben Tag macht
                        t2.Cells(zeile, spalte + 3) = t2.Cells(zeile, spalte + 3) + "Halber Tag " + t1.Cells(y, 2) + " " + t1.Cells(y, 1)
                   'schreibt den MA mit Zusatz "halber Tag" hinter die Auflistung der anderen MA für den Einsatztag
                   End If
                 Next y
           End If
       Next n
Next i
End Sub



VG!
Top
#10
Hi,
aus Interesse mal deinen Code in deiner Datei probiert. Fehler wegen fehlender Variablendeklaration t1, t2, Schreibfehler im Code (zeil statt Zeile) aber das Ergebnis ist nicht das was du als Soll vorgeben hast.
Wäre also nett, wenn du eine/deine Datei mit deinem Code einstellst, wo du meinst, es läuft alles sauber.

Nur noch als Hinweis, weil du etwas genervt auf das Hin und Her bzw den Ton in Foren ansprichst: Da meldet sich jemand, der hat ein Problem, woran er meist schon länger kaut und es nicht gelöst bekommt. Hohe Erwartungshaltung auf Hilfe.
Auf der Forenseite sind Leute, die aus Spaß an Excel oder anderen Dingen Hilfe freiwillig und kostenlos anbieten, im Rahmen der zeitlichen Möglichkeiten. Da der Fragende sein Problem und die Zusammenhänge ja bestens kennt, schreibt er so los, aber die Helfer können nicht in den Kopf bzw seinen PC schauen und Beschreibungen von Tabellen oder Bilder sind schlecht, da der Helfer dann anchbauen müßte, meist beschreiben Helfer auch nur unvollständiug, weils sonst zu lang würde oder sie meinen, es hätte keine Bedeutung. Also ein riesen Feld für unterschiedliche Deutungen, Fehler usw.
Also die Ruhe bewahren, du willst ja was an Hilfe, aber das bedarf eben ausreichender Vorinformationen über das Ist und das Soll. Die Helfer müssen nicht unterstützen, hier ist kein Supportforum, wo du Unterstützung mitbezahlt hast bei Kauf der Software.
Mit freundlichen Grüßen  :)
Michael
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste