PDA

Vollständige Version anzeigen : Einträge untereinander anordnen/aufzählen


DCStefano
17.04.2009, 12:13
Hallo zusammen,

ich stehe vor einem Problem, bei dem ich Hilfe benötigen würde.

Die Ausgangsdatei ist folgendermaßen aufgebaut:
PersNr., Name, Datumseinträge

Als Ergebnis soll jeder Datumseintrag zeilenweise aufgeführt werden.

zum besseren Verständnis eine Bspliste.

Danke für euere Tipps/Hilfen.

Matthias5
17.04.2009, 12:42
Hallo Stefano,

hier mal ein Vorschlag:

<table style="border-collapse:collapse;"><tbody><tr><td style="font-family:Courier New;font-size:12;"><span style="color:#0000FF">Sub</span>&nbsp;Urlaubsliste()
<span style="color:#0000FF">Dim</span>&nbsp;i&nbsp;<span style="color:#0000FF">As&nbsp;Long</span>,&nbsp;arr,&nbsp;c&nbsp;<span style="color:#0000FF">As</span>&nbsp;Range,&nbsp;j&nbsp;<span style="color:#0000FF">As&nbsp;Integer</span>,&nbsp;a&nbsp;<span style="color:#0000FF">As&nbsp;Byte</span>,&nbsp;spalte&nbsp;<span style="color:#0000FF">As&nbsp;Byte</span>
spalte&nbsp;=&nbsp;Application.Match("Urlaubstage",&nbsp;Range("1:1"),&nbsp;0)
<span style="color:#0000FF">For</span>&nbsp;i&nbsp;=&nbsp;4&nbsp;<span style="color:#0000FF">To</span>&nbsp;Range("A"&nbsp;&amp;&nbsp;Rows.Count).End(xlUp).Row
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">Set</span>&nbsp;c&nbsp;=&nbsp;Cells(i,&nbsp;spalte)
&nbsp;&nbsp;&nbsp;&nbsp;arr&nbsp;=&nbsp;Split(c,&nbsp;";")
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">If&nbsp;UBound</span>(arr)&nbsp;&gt;&nbsp;0&nbsp;<span style="color:#0000FF">Then</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">For</span>&nbsp;j&nbsp;=&nbsp;0&nbsp;<span style="color:#0000FF">To&nbsp;UBound</span>(arr)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">If</span>&nbsp;arr(j)&nbsp;&lt;&gt;&nbsp;""&nbsp;<span style="color:#0000FF">Then</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;Day(<span style="color:#0000FF">CDate</span>(arr(j)))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cells(i,&nbsp;2&nbsp;+&nbsp;a).Value&nbsp;=&nbsp;"U"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">End&nbsp;If</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">Next</span>&nbsp;j
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">End&nbsp;If</span>
<span style="color:#0000FF">Next</span><br />
<span style="color:#0000FF">End&nbsp;Sub</span>
</td></tr><tr><td style="font-size:10;">Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.15</a></b></td></tr></tbody></table>

NoNet
17.04.2009, 13:13
Hallo DC Stefano,

anbei eine Lösung auf Basis von MATRIX-Funktionen im Bereich B10:B41.
Die Funktion habe ich nur in B10 eingegeben, dann mit Strg+Shift+Enter bestätigt und bis B41 runterkopiert !

Damit das Ganze flexibler zu handhaben ist, habe ich noch den Datumsbereich (gelber Bereich) etwas angepasst :
Du musst nun nur noch das Datum (den Monatsersten !!) in C1 eingeben, der Rest passt sich automatisch an :

Matthias5
17.04.2009, 13:18
.....

DCStefano
17.04.2009, 13:30
@NoNet

Evtl. kann ich damit etwas anfangen, aber ich bräuchte am Ende schon folgendes Format:

PersNr. | Datum1 | Datum2


Bei deiner Lösung werden nur die einzelnen Urlaubstage aufgeführt, aber nicht der PersNr. zugeordnet.


@ Matthias5
Bei deinem Code bekomme ich die Fehlermeldung "Laufzeitfehler '13' Typen unverträglich"

Matthias5
17.04.2009, 13:49
Hi,

der Code läuft bei mir problemlos durch, aber ich hatte die Frage offenbar sowieso falsch verstanden.

DCStefano
17.04.2009, 13:51
Sry hatte das falsche Bsp. angehängt!


Im Beispiel im Tabellenblatt "Ergebnis" ist aufgeführt wie es aussehen soll.

Bei mir kommt die Fehlermeldung, habe Excel 2003.

Matthias5
17.04.2009, 13:57
Ach so, in meinem Code trage ich die "U"s anhand der Urlaubstageliste in die Übersicht ein. Das soll woll umgekehrt laufen, oder?

DCStefano
17.04.2009, 14:01
Also das mit den "U" als Einträgen ist etwas anderes, hat zwar indirekt damit was zu tun, aber das Thema wurde bereits umgesetzt.

Nun habe ich eine Liste der MA und die entsprechenden Datumsangaben, die dann zeilenweise aufgeführt werden sollen.

Sieh dir am Besten das neue Beispiel an, dass sollte selbsterklärend sein, etwas kompliziert zu umschreiben.

NoNet
17.04.2009, 14:05
Hallo Stefano,

ich hatte das genau SO interpretiert, dass Du nur wissen möchtest, an welchen Tagen Urlaubstage eingetragen sind. Die Zuordnung zu den einzelnen Mitarbeiter hatte ich nicht aus Deiner Fragestellung herausgelesen.

[JOKE-Mode]
PS: Deine Excel-Fehlermeldung muss falsch sein, denn Matthias5 und ich sind garantiert keine "unverträgliche Typen" :grins:
[/JOKE-Mode]

DCStefano
17.04.2009, 14:09
Ich hatte ein falsches Beispiel angehängt, sry.

Das neue Beispiel habe ich bereits hochgeladen, welches mein Problem sicherlich verständlicher macht. Also im Tabellenblatt "Ergebnis" sieht man wie das Ergebnis aufgrund der Ausgangsdatei aussehen soll, Danke nochmals für euere Mühen.

NoNet
17.04.2009, 14:10
OT = "Off Topic"
PN = "Persönliche Nachricht"
_oT = "ohne Text"

Matthias5
17.04.2009, 14:18
Hi nochmal,

versuche mal diesen hier:

<table style="border-collapse:collapse;"><tbody><tr><td style="font-family:Courier New;font-size:12;"><span style="color:#0000FF">Sub</span>&nbsp;urlaubsliste()
<span style="color:#0000FF">Dim</span>&nbsp;i&nbsp;<span style="color:#0000FF">As&nbsp;Long</span>,&nbsp;j&nbsp;<span style="color:#0000FF">As&nbsp;Long</span>,&nbsp;tage&nbsp;<span style="color:#0000FF">As&nbsp;Byte</span>
j&nbsp;=&nbsp;2
<span style="color:#0000FF">With</span>&nbsp;Sheets("Ergebnis")
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">For</span>&nbsp;i&nbsp;=&nbsp;2&nbsp;<span style="color:#0000FF">To</span>&nbsp;Range("A"&nbsp;&amp;&nbsp;Rows.Count).End(xlUp).Row
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tage&nbsp;=&nbsp;Application.CountA(Range(i&nbsp;&amp;&nbsp;":"&nbsp;&amp;&nbsp;i))&nbsp;-&nbsp;2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">If</span>&nbsp;tage&nbsp;&gt;&nbsp;0&nbsp;<span style="color:#0000FF">Then</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Range("A"&nbsp;&amp;&nbsp;j)&nbsp;=&nbsp;Range("A"&nbsp;&amp;&nbsp;i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Range("C"&nbsp;&amp;&nbsp;i).Resize(,&nbsp;tage).Copy
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Range("B"&nbsp;&amp;&nbsp;j&nbsp;&amp;&nbsp;":C"&nbsp;&amp;&nbsp;j).PasteSpecial&nbsp;Transpose:=<span style="color:#0000FF">True</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;j&nbsp;+&nbsp;tage
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">End&nbsp;If</span>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF">Next</span>&nbsp;i
<span style="color:#0000FF">End&nbsp;With</span>
<span style="color:#0000FF">End&nbsp;Sub</span>
</td></tr><tr><td style="font-size:10;">Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.15</a></b></td></tr></tbody></table>

DCStefano
17.04.2009, 14:25
Hi Matthias,

Danke der Code funktioniert wunderbar!

Matthias5
17.04.2009, 14:40
Aah, wunderbar! :-))

DCStefano
09.05.2009, 10:40
Hallo zusammen,

eine Frage, wie müsste ich den Code verändern damit in jeder Zeile die entsprechende Personalnummer in Spalte A steht?

Sub urlaubsliste()
Dim i As Long, j As Long, tage As Byte
j = 2
With Sheets("Ergebnis")
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
tage = Application.CountA(Range(i & ":" & i)) - 2
If tage > 0 Then
.Range("A" & j) = Range("A" & i)
Range("C" & i).Resize(, tage).Copy
.Range("B" & j & ":C" & j).PasteSpecial Transpose:=True
j = j + tage
End If
Next i
End With
End Sub

Backowe
09.05.2009, 14:47
Hi Stefano,

einfach quick and dirty! ;)

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> Urlaubsliste()
<span class="TOKEN">Dim</span> i&amp;, j&amp;, tage <span class="TOKEN">As</span> <span class="TOKEN">Byte</span>
Application.ScreenUpdating = <span class="TOKEN">False</span>
j = 2
<span class="TOKEN">With</span> Sheets(&quot;Ergebnis&quot;)
<span class="TOKEN">For</span> i = 2 <span class="TOKEN">To</span> Range(&quot;A&quot; &amp; Rows.Count).End(xlUp).Row
tage = Application.CountA(Range(i &amp; &quot;:&quot; &amp; i)) - 2
<span class="TOKEN">If</span> tage &gt; 0 <span class="TOKEN">Then</span>
.Range(&quot;A&quot; &amp; j) = Range(&quot;A&quot; &amp; i)
Range(&quot;C&quot; &amp; i).Resize(, tage).Copy
.Range(&quot;B&quot; &amp; j &amp; &quot;:C&quot; &amp; j).PasteSpecial Transpose:=True
j = j + tage
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> i
Application.CutCopyMode = <span class="TOKEN">False</span>
<span class="TOKEN">For</span> j = 2 <span class="TOKEN">To</span> .Cells.Find(&quot;*&quot;, .[A1], , , xlByRows, xlPrevious).Row
<span class="TOKEN">If</span> .Cells(j, &quot;A&quot;) = &quot;&quot; <span class="TOKEN">Then</span> .Cells(j, &quot;A&quot;) = .Cells(j - 1, &quot;A&quot;)
<span class="TOKEN">Next</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
Application.ScreenUpdating = <span class="TOKEN">True</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)