Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Excel In einer Zeile Anfangs und Enddatum ermitteln

Frage Microsoft Microsoft Office

Mitglied: Perle66

Perle66 (Level 1) - Jetzt verbinden

08.12.2012 um 19:26 Uhr, 3254 Aufrufe, 7 Kommentare

Hallo Zusammen,
vielleicht kann mir jemand helfen.
Ich habe eine Excel Tabelle (Urlaubsplan) in der in Spalte A Namen (Herr x,y,..) stehen, in Zeile 1 das fortlaufende Datum (01.01...31.07.). In Zeile 2 beim Namen x steht in irgendeiner Zelle ein U manchmal eins und manchmal mehrere hintereinander und dann irgendwo wieder. Es ist ein Urlaubsplan.
Ist es möglich die Daten auszulesen in der Form, dass vorn der Name steht, in der nächsten Spalte das Datum des ersten Urlaubstags und danach des letzten Urlaubstags?
Hier ein Bsp.
Datum 04.03. 05.03. 06.03. ... 16.04. 17.04. 18.04. 19.04. ... 20.07. 21.07. 22.07. 23.07...
Herr x U U U U U U U U
Herr y U U
Herr z U

Die Ausgabe sollte so aussehen:
Herr x 04.03. 06.03. leer 16.04. 19.04. leer 20.07.
Herr y 21.07. 22.07 leer
Herr z 20.07 leer

Das leer soll eine leere Zelle sein und zur Erkennung dienen, welche Urlaubstage zusammenhängen.

Ich hoffe, ich habe mich verständlich ausgedrückt. Erwähnen möchte ich auch, das ich von VBA und Makros so gut wie keine Ahnung habe.
Excel Version 2003 (11.0).
Vielen Dank schon jetzt für die Hilfe!
Mitglied: bastla
08.12.2012, aktualisiert um 21:41 Uhr
Hallo Perle66 und willkommen im Forum!

Wenn ich Deine etwas abenteuerliche Darstellung der Daten richtig interpretiere, sollte das etwa so gehen:
01.
Sub Urlaubszusammenfassung() 
02.
Quelle = "Tabelle1" 'Name der Quelltabelle 
03.
AbZeileQ = 1 'Zeile, in welcher die Datumswerte stehen 
04.
AbSpalteQ = 1 'Spalte, in welcher die Mitarbeiternamen stehen 
05.
Ziel = "Tabelle2" 'Name der Zieltabelle 
06.
AbZeileZ = 1 'Zeile, ab welcher die Ergebnisdaten eingetragen werden sollen 
07.
AbSpalteZ = 1 'Spalte, ab welcher die Ergebnisdaten eingetragen werden sollen 
08.
Kennz = "U" 'Kennzeichen, nach welchem gesucht werden soll 
09.
 
10.
ZeileQ = AbZeileQ + 1 'Beginne in Quelltabelle in der Zeile mit erstem Mitarbeiter 
11.
ZeileZ = AbZeileZ 'Beginne in der Zieltabelle in der ersten Ergebniszeile 
12.
MA = Worksheets(Quelle).Cells(ZeileQ, AbSpalteQ).Value 'Mitarbeiternamen lesen 
13.
Do While MA <> "" 'Solange ein Mitarbeitername gefunden wird, Schleife durchführen 
14.
    SpalteQ = AbSpalteQ + 1 'Beginne in der Quelltabelle in der Spalte mit dem ersten Datumswert 
15.
    SpalteZ = AbSpalteZ + 1 'Beginne in der Zieltabelle in der Spalte nach dem Mitarbeiternamen 
16.
    Beginn = "" 'Beginndatum des Urlaubszeitraumes löschen 
17.
    Worksheets(Ziel).Cells(ZeileZ, AbSpalteZ).Value = MA 'Mitarbeiternamen in vorgegebene Spalte der Zieltabelle übertragen 
18.
    Dat = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ).Value ' Datumswert aulsesen 
19.
    Do While Dat <> "" 'Solange es noch Datumswerte gibt, Schleife wiederholen 
20.
        If Worksheets(Quelle).Cells(ZeileQ, SpalteQ).Value = Kennz Then ' Wenn das Kennzeichen in der Zeile des MA gefunden wird ... 
21.
            If Beginn = "" Then '... und nicht bereits ein Urlaubsbeginn voerher erkannt wurde ... 
22.
                Worksheets(Ziel).Cells(ZeileZ, SpalteZ).Value = Dat ' ... Urlaubsbeginn in Zieltabelle eintragen und ... 
23.
                Beginn = Dat ' ... Beginndatum zwischenspeichern 
24.
                SpalteZ = SpalteZ + 1 'nächster Eintrag in Zieltabelle erfolgt in nächster Spalte 
25.
            End If 
26.
        Else ' kein Urlaubstag 
27.
            If Beginn <> "" Then ' Wenn laufender Urlaub ... 
28.
                Ende = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ - 1).Value ' ... als Enddatum den gestrigen Tag festlegen 
29.
                If Beginn <> Ende Then ' Wenn Beginn und Ende unterschiedlich (mehrtätiger Urlaub) ... 
30.
                    Worksheets(Ziel).Cells(ZeileZ, SpalteZ).Value = Ende ' ... Enddatum eintragen 
31.
                    'SpalteZ = SpalteZ + 1 'nächster Eintrag in Zieltabelle erfolgt in nächster Spalte 
32.
                End If 
33.
                Beginn = "" 'Beginndatum des Urlaubszeitraumes löschen 
34.
                SpalteZ = SpalteZ + 2 'nächster Eintrag in Zieltabelle erfolgt in übernächster Spalte - dadurch leere Zelle(n) nach Urlaub 
35.
            End If 
36.
        End If 
37.
        SpalteQ = SpalteQ + 1 'nächsten Tag des Jahres betrachten ... 
38.
        Dat = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ).Value '... und dessen Datumswert zwischenspeichern 
39.
    Loop 'alle Datumswerte (des Jahres) durch 
40.
    ZeileQ = ZeileQ + 1 'nächste Zeile für Mitarbeiter in Quelltabelle 
41.
    ZeileZ = ZeileZ + 1 'nächste Zeile für Mitarbeiter in Quelltabelle 
42.
    MA = Worksheets(Quelle).Cells(ZeileQ, AbSpalteQ).Value'Mitarbeiternamen lesen 
43.
Loop 'alle Mitarbeiter durch 
44.
MsgBox "Fertig." 
45.
End Sub
Vorausgesetzt habe ich für die Quelltabelle, dass zwischen den Datumswerten und den Namen keine Zeile frei bleibt und zwischen den Namen und Datumswerten es auch keine leere Spalte gibt.

Für die Zieltabelle müsste ich ggf noch ein Löschen der bereits vorhandenen Einträge einbauen ...

Grüße
bastla

[Edit] Zeilen 31 und 34 angepasst, sodass für jeden Urlaub insgesamt 3 Zellen verwendet werden [/Edit]
Bitte warten ..
Mitglied: Perle66
08.12.2012 um 20:56 Uhr
Hallo bastla,
Du hast meine abenteuerliche Darstellung super verstanden. Ich hatte die U auch unter dem jeweiligen Tag stehen, aber die Leerzeichen sind auf einmal alle verschwunden.
Hat Dir schon mal jemand gesagt, dass Du Spitze bist! Echt Klasse wie es funktioniert!
Eine Bitte hätte ich noch, kriegst Du es hin, das wenn nur ein Urlaubstag vorhanden ist, zwei leere Zellen eingefügt werden, damit der Urlaubsbeginn immer untereinander steht.
Ich kenne mich zwar mit Formeln in Excel aus, aber für VBA hatte ich bisher keine Zeit.
Schöne das Leute wie Dich gibt! Echt Spitze, wie Du das so schnell aus dem Ärmel geschüttelt hast!!!
Viele Grüße
Perle
Bitte warten ..
Mitglied: bastla
08.12.2012 um 21:42 Uhr
Hallo Perle66!

Freut mich, wenn's soweit passt ...

Die gewünschte Änderung habe ich gleich oben vorgenommen.

Grüße
bastla
Bitte warten ..
Mitglied: Perle66
08.12.2012 um 22:11 Uhr
Hallo bastla,
schade, das funktioniert leider nicht. Es werden jetzt bei einem Urlaubstag 2 leere Zellen eingefügt und auch bei einem Zeitraum 2 leere Zellen eingefügt. Bei einem Zeitraum dürfte jedoch nur eine leere Zelle eingefügt werden, damit der Beginn des Urlaubs immer untereinander steht.
Hast Du noch eine Idee? Vielleicht habe ich ja auch was übersehen. Hab nur Zeile 34 angepasst, statt +1 jetzt plus 2.
Viele Grüße
Perle
Bitte warten ..
Mitglied: bastla
08.12.2012 um 22:17 Uhr
Hallo Perle66!

Die Zeile 31 musst Du auch noch entweder "auskommentieren" (durch einen vorangestellten Apostroph wird die Zeile zum Kommentar und daher nicht mehr ausgeführt - hatte ich oben so gemacht) oder gleich ganz löschen.

Grüße
bastla
Bitte warten ..
Mitglied: Perle66
08.12.2012 um 22:23 Uhr
Hallo bastla,
super, funktioniert perfekt. Apostroph hatte ich nicht gesehen, mein Fehler.
Vielen, vielen Dank noch mal!!!
Ich wünsche Dir ein schönes Weihnachtsfest und einen guten Rutsch im Kreis Deiner Lieben.
Bis zum nächsten Mal, vielleicht kann ich dann auch schon dem ein oder anderen mal ein wenig helfen.
Viele Grüße
Perle
Bitte warten ..
Mitglied: bastla
08.12.2012 um 22:27 Uhr
Hallo Perle66!

Die guten Wünsche erwidere ich gerne, und zum Vorsatz, hier auch helfen zu wollen, kann ich nur gratulieren ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...