9.7k Aufrufe
Gefragt in Tabellenkalkulation von benedikt Einsteiger_in (31 Punkte)
Hallo zusammen,
ich habe folgendes Probelm:
Auf Blatt 1 stehen in der einen Spalte alle Mitarbeiter in den Zellen B 2 bis B20. In den folgenden Spalten stehen die Monatstage. An jedem Tag muss ein Mitarbeiter Tagdienst (TD), einer Spätdienst Gruppe A (SA), einer Spätdienst Gruppe B (SB), einer Nachtdienst (ND) usw. machen.
Auf Blatt 2 ist der Monatsplan in dem derjenige genannt wird, der den SDA bzw. den SDB an dem jeweiligen Tag hat.

Hat jemand eine Idee, wie die Formel lautet, mit der die Angaben von Blatt 1 auf Blatt 2 übertragen werden können?
Ich bekomme es ja gerade noch hin folgende Formel zu erstellen:
=WENN(Tabelle2!D10="SA";Tabelle2!B10).
Ich will aber die entsprechenden Spalten der einzelnen Tage durchsuchen lassen, wer denn den SB Dienst hat, um dann dessen Namen aus Spalte B2-20 einzutragen.

Ich hoffe, die Frage ist verständlich!?
Danke schon mal im voraus...
Grüße
Benedikt

18 Antworten

0 Punkte
Beantwortet von benedikt Einsteiger_in (31 Punkte)
Sorry Rainer,
aber wie soll ich Dir denn eine Beispieldatei geben?
Kann ich die irgendwo einstellen?
Gruß
Benedikt
0 Punkte
Beantwortet von benedikt Einsteiger_in (31 Punkte)
...ich maile sie Dir auch gerne zu....

Grüße
B.
0 Punkte
Beantwortet von
Hi,

Ein möglicher Weg, Deine Datei hier zur Verfügung zu stellen, wäre der, sie bei z.B. www.file-upload.net/ hochzuladen.

Ist dies geschehen, kannst Du den Link, den Du dort erhälst hier in einem Posting veröffentlichen.

Denke bitte bei einer Veröffentlichung an den Datenschutz. Also keine "echten" Mitarbeiterdaten, Adressen, etc. pp...
Am besten eignet sich wohl eine Musterdatei, die Du nach dem Muster der "echten" Datei anlegst.

Bye
malSchauen
0 Punkte
Beantwortet von benedikt Einsteiger_in (31 Punkte)
...also Dank der Info von malSchauen hier der Link für die Datei...

http://www.file-upload.net/download-1659893/Monatsplan.xls.html

Danke
Benedikt
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Also sorry, im gegensatz zu vielen anderen hier lade ich grundsätzlich keine fremden Dateien herunter, habe mich also an Deiner Antwort 2 orientiert und die 4 Abkürzungen aus Deiner Frage benutzt. Du klickst auf Extras, makros, visual basic editor, dann klickst du auf einfügen Modul und kopierst dann den folgenden Code dort hinein. Nun kannst Du den Code laufen lassen, wann immer Du möchtest, eventuell auch hinter einen Button legen, oder bei Änderung auf Tabellenblatt 1. Es wird Dir jedesmal Tabellenblatt 2 aktualisiert.

Allerdings musst Du anpassen, wenn Du andere Spalten oder Zeilen oder Abkürzungen benutzt. Das hattest Du ja gesagt, dass Du das kannst, nun bin ich mal gespannt.

Gruß Marie

Public Sub fkt_Dienstplan()

' ich gehe davon aus wie in Antwort 2:
' das Datum steht in Tabelle 1 in der ersten Zeile und in Tabelle 2 in der ersten Spalte
' Tag 1 des Monats ist in Tabelle 1 in B1 - in Tabelle 2 in A2
' Tag 2 des Monats ist in Tabelle 1 in C1 - in Tabelle 2 in A3
' Tag 3 des Monats ist in Tabelle 1 in D1 - in Tabelle 2 in A4 usw

Dim wsTab1 As Worksheet
Dim wsTab2 As Worksheet
Dim inti As Integer
Dim intj As Integer
Dim iSearchColumn As Integer
Dim ILine As Integer
Dim strSearch As String
Dim strName As String

Set wsTab2 = ThisWorkbook.Worksheets("Tabelle2")
Set wsTab1 = ThisWorkbook.Worksheets("Tabelle1")
ILine = wsTab1.Cells.SpecialCells(xlCellTypeLastCell).Row 'letzte beschriebene Zeile in Tabelle 1
For inti = 1 To 31 ' Tage eines Monats durchlaufen
iSearchColumn = inti + 1 ' Suche in Tabelle 1 Spalte Datumstag+1
For intj = 1 To 4 ' 1= TD 2 = SA 3=SB 4 = ND 4 Dienste durchlaufen und Kürzel suchen in Tabelle 1
If intj = 1 Then strSearch = "TD" 'jeweils Überschrift in Tabelle 2 in Spalte intj+1
If intj = 2 Then strSearch = "SA"
If intj = 3 Then strSearch = "SB"
If intj = 4 Then strSearch = "ND"
With wsTab1
For i = 2 To ILine ' Mitarbeiterzeilen duchsuchen nach Ausdruck strSearch
If StrComp(.Cells(i, iSearchColumn).Value, strSearch, vbTextCompare) = 0 Then
strName = .Cells(i, 1).Value
'schreibe den Mitarbeiternamen in Tabelle 2 in Spalte intj+1 in Zeile inti+1
wsTab2.Cells(inti + 1, intj + 1).Value = strName
End If
Next
End With
Next intj
Next inti

End Sub
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Der Name der Person (1. Spalte von Blatt 1)

Ich will aber die entsprechenden Spalten der einzelnen Tage durchsuchen lassen, wer denn den SB Dienst hat, um dann dessen Namen aus Spalte B2-20 einzutragen.

Also bei mir ist die erste Spalte die Spalte A, in dem Code stehen die Mitarbeiter in Spalte A, solltest Du sie in Spalte B haben, dann schreib bitte künftig in der zweiten Spalte und ändere entsprechend sämtliche Spalten in obigem Code.

Auf Blatt 1 stehen in der einen Spalte alle Mitarbeiter in den Zellen B 2 bis B20.
In Blatt 1 muss also in den einzelnen Spalten unter 25 Personen die identifiziert werden, die SD oder ND hat.

Da Du dich auch hier nicht entscheiden kannst (Zeile B2 bis B20 sind ganze 19 Zeilen und keine 25!) habe ich die letzte beschriebene Zeile in Tabelle 1 genommen, in Tabelle 2 müssen wieder exakt die Zeilen stimmen, hast Du den ersten des Monats nicht in Zeile 2 stehen, dann stimmt natürlich alles nicht, also entweder künftig korrekt beschreiben oder anpassen.

Nochmal Gruß
Marie
0 Punkte
Beantwortet von benedikt Einsteiger_in (31 Punkte)
Hi, Marie,
HUT AB!
Das Ding läuft super. Für mich unglaublich!
Zwei Fragen habe ich noch:
1. Ich habe die Spalten - soweit ich das verstanden habe - angepasst. Allerdings würde ich gerne noch eine Spalte vor die MItarbeiternamen in Tabelle 1 einfügen. Damit verschiebt sich alles nach um eine Spalte nach rechts. Die MItarbeiternamen stehen dann in Spalte B. Wo gebe ich das an?

2. Kann man zu der von Dir genannte Formel
For intj = 1 To 4 ' 1= TD 2 = SA 3=SB 4 = ND
noch ein "oder" einfügen. D.h. Suche z.B. bitte "SA oder TA"?

Dann wäre alles Perfekt!
Ganz lieben Dank und Danke für die Mühe.
B.
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Na wie gesagt, bitte künftig nicht sagen die namen seien in der ersten Spalte, wenn sie in der zweiten sind. es rutscht ja dann nicht nur der Name in Spalte 2 sondern sämtliche folgenden Spalten verschieben sich ja ebenfalls um eine Spalte nach rechts, deshalb genügt es nicht nur die eine Stelle zu ändern.

zu 1) iSearchColumn = inti + 1 ' Suche in Tabelle 1 Spalte Datumstag+1
muss dann geändert werden in iSearchColumn = inti + 2
den rest musste selber ausprobieren, hab jetzt keine Zeit und ehrlich gesagt auch keine lust nochmal von vorne anzufangen. Musst ja einfach nur einen Probedatensatz eingeben und prüfen ob das Datum stimmt.
Den Mitarbeiternamen holste dann nicht aus der ersten Spalte
strName = .Cells(i, 1).Value sondern aus der zweiten:
strName = .Cells(i, 2).Value
zu 2)
2. Kann man zu der von Dir genannte Formel
For intj = 1 To 4 ' 1= TD 2 = SA 3=SB 4 = ND
noch ein "oder" einfügen. D.h. Suche z.B. bitte "SA oder TA"?
Menno, ich dachte Du blickst es, also bitte künftig nicht sagen Du kannst es Dir selbst anpassen, wenn Du nichtmal eine Schleife verstehst und auch nicht ordentlich lesen kannst:
If intj = 1 Then strSearch = "TD" 'jeweils Überschrift in Tabelle 2 in Spalte intj+1
If intj = 2 Then strSearch = "SA"
If intj = 3 Then strSearch = "SB"
If intj = 4 Then strSearch = "ND"

die Schleife wird 4 mal durchlaufen, du kannst aus der 4 eine 10 machen, dann wird sie 10 mal durchlaufen, und in der Schleife steht: Wenn i=1, dann soll er nach SA suchen, also wenn er nun noch nach TA suchen soll, dann machste For intj = 1 To 5 If intj = 5 Then strSearch = "TA", allerdings musste jetzt selbst mal schauen wo er dann hinschreiben soll, denn erstens haste wieder nicht wirklich gesagt was es dann schreiben soll und zweitens muss ich jetzt weg, sorry

Gruß marie
...