29. november 2005 - 15:57Der er
8 kommentarer og 1 løsning
Vagt-/grundtørn i kalender.
En sag for de virkelige excel-eksperter!!
I et regneark har jeg arbejdspladsens vagtkalender, som indeholder samtlige 28 medarbejderes grundtørn. Grundtørnen indtaster jeg pt. manuelt i hver enkelt celle (enten "D" eller "N"). Dette tager virkelig lang tid hver måned, at skulle indtaste for hver enkelt!
Grundtørnen kører over otte uger og starter så forfra igen. Er der en måned, hvorpå det kan gøres automatisk, så der i hver enkelt celle automatisk kan skrives "D" eller "N" eller ingenting (fri). Jeg tænker mig, at der jo skal være en startdato for grundtørnen, hvorfra det så skal regnes ud hvad der skal stå i cellen i hele kalendermåneden! Men altså: det er mere end jeg selv kan takle!
Vil meget gerne forklare mig nærmere, hvis nogen har lyst til at kikke på det ;-)
I den første celle skriver du hvilken dag den skal starte med i turnusen
1 = den første dag 56 = den sidste når du har skrevet tallet og trykke enter, marker så igen så der er ramme omkring
kør så makroen Jeg har kaldt fridage for F og den sidste i perioden for FS, det er for test skyld
Public Sub Turnus() Dim Tur As Variant, A As Integer, B As Integer, Slut As Integer, I As Integer, Forfra As Boolean Dim X As Integer, N As Integer Tur = Array("D", "N", "F", "F", "D", "F", "F", "N", "F", "F", "D", "N", "F", "F", "F", "F", "D", "N", "F", "D", "D", "F", "D", "N", "F", "F", "F", "F", "D", "N", "F", "F", "D", "F", "F", "N", "F", "F", "D", "N", "F", "F", "F", "F", "D", "N", "F", "N", "N", "F", "D", "N", "F", "F", "F", "F", "FS") A = UBound(Tur) B = ActiveCell.Column Slut = Range("AF2").Column Start = ActiveCell.Value
If Start + (Slut - B) > A Then Forfra = True X = 0 For I = Start - 1 To (Slut + Start) - 1 If I > A Then Exit For If Cells(2, X + B) = "" Then Exit For ActiveCell.Offset(0, X) = Tur(I) X = X + 1 Next
N = Slut - X If Forfra Then For I = 0 To N If X > Slut Then Exit For If Cells(2, X + B) = "" Then Exit For ActiveCell.Offset(0, X) = Tur(I) X = X + 1 Next End If End Sub
Det er utroligt, hvad man kan gøre. Det virkede jo første gang! Er det muligt gøre således, at man skriver dag for start (1 til 56) ved flere medarbejdere og så markere alle, hvorefter man kører makroen og felterne så bliver udfyldt for alle på én gang?
Marker cellerne du har skrever startdag i og kør makroen
Public Sub Turnus() Dim Tur As Variant, A As Integer, B As Integer, Slut As Integer, I As Integer, Forfra As Boolean Dim X As Integer, N As Integer Tur = Array("D", "N", "F", "F", "D", "F", "F", "N", "F", "F", "D", "N", "F", "F", "F", "F", "D", "N", "F", "D", "D", "F", "D", "N", "F", "F", "F", "F", "D", "N", "F", "F", "D", "F", "F", "N", "F", "F", "D", "N", "F", "F", "F", "F", "D", "N", "F", "N", "N", "F", "D", "N", "F", "F", "F", "F", "FS") A = UBound(Tur) For Each c In Selection B = c.Column Slut = Range("AF2").Column Start = c.Value
If Start + (Slut - B) > A Then Forfra = True X = 0 For I = Start - 1 To (Slut + Start) - 1 If I > A Then Exit For If Cells(2, X + B) = "" Then Exit For c.Offset(0, X) = Tur(I) X = X + 1 Next
N = Slut - X If Forfra Then For I = 0 To N If X > Slut Then Exit For If Cells(2, X + B) = "" Then Exit For c.Offset(0, X) = Tur(I) X = X + 1 Next End If Next End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.