17. december 2005 - 07:28Der er
14 kommentarer og 2 løsninger
Formel hjælp til datoer
I et lønskema ønsker jeg at gøre følgende.Jeg vil i felt C32 indtaste et nummer 1-12 der svare til måndesnummer 1=januar, 2=febuar osv.I nedenstående går jeg ud fra 1=Januar 2006.Der skal så ske følgende. 1.I felt B29 skal stå Lønperioden. "16-12-2005 til 15-01-2006" (kan man tage højde for årsskiftet???) 2.I felt c30 skal stå første dato i perioden "16-12-2005" 3.I felt c31 skal stå sidste dato i januar "28-01-2006"(det er den dato lønnen skal være til dispotion på en konto i banken) Skemaet bliver altid udfyldt i samme måned som eks. vis 1=januar således man kan bruge pc,ens dato. Er der nogle der har en god ide hvordan man løser dette bedst????
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Den sidste vil jeg være lidt varsom med at bruge, for hvis du så åbner arket en dag for sent, så skrives den forkerte måned. Hvis du mener at feltet blot skal udfyldes med en fast værdi første gang arket åbnes, så er det en anden ting - så kræver det en lille makro.
Jeg skal lige ud og handle, men måske dukker der andre hjælpsomme sjæle op inden jeg kommer tilbage :0)
Jeg forstår ikke, hvad det er du vil have til at stå i felt C31. Den sidste dag i januar er da den 31. Det er samtidig en hverdag - dvs. en bankdag. Den 28. januar er en lørdag, der ikke er en bankdag.
Hvis det du er ude efter er den sidste hverdag i måneden, kan du bruge nedenstående kode, som du bare kopierer.
Function SidsteArbejdsDag(Dato As Long) As Long Dim Arbejdsdag As Boolean
SidsteArbejdsDag = Dato Do Until Arbejdsdag If ErHelligdag(SidsteArbejdsDag, True, True) Then SidsteArbejdsDag = SidsteArbejdsDag - 1 Else Arbejdsdag = True End If Loop
End Function
Function ErHelligdag(testDato As Long, InclLørdage As Boolean, InclSøndage As Boolean) As Boolean Dim InputYear As Integer, PD As Long, OK As Boolean If testDato <= 0 Then testDato = Date InputYear = Year(testDato) PD = Påskedag(InputYear) OK = True Select Case testDato Case DateSerial(InputYear, 1, 1) ' Nytårsdag Case PD - 7 ' Palmesøndag Case PD - 3 ' Skærtorsdag Case PD - 2 ' Langfredag Case PD ' Påskedag Case PD + 1 ' 2. påskedag Case PD + 26 ' St. Bededag Case PD + 39 ' Kristi Himmelfartsdag Case PD + 49 ' Pinsedag Case PD + 50 ' 2. Pinsedag Case DateSerial(InputYear, 12, 24) ' Juleaftensdag Case DateSerial(InputYear, 12, 25) ' Juledag Case DateSerial(InputYear, 12, 26) ' 2. Juledag Case DateSerial(InputYear, 12, 31) ' Nytårsaftensdag Case Else OK = False If InclLørdage Then If WeekDay(testDato, vbMonday) = 6 Then OK = True End If End If If InclSøndage Then If WeekDay(testDato, vbMonday) = 7 Then OK = True End If End If End Select ErHelligdag = OK End Function
Function Påskedag(InputYear As Integer) As Long Dim d As Integer d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21 Påskedag = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7) End Function
Hej sjap tusind tak for ovenstående. Jeg er lige kommet hjem og har ikke tid mere i aften men vender tilbage i norgen.Det er klart vedr. sidste dag i januar jeg var ikke rigtig vågen i morges. Det skal være sidste hverdag i måneden. Foreløbig tak og her er min mail ft@3060.dk Mvh. Petert
Jeg har måske ikke udtrykt mig presist i spørgsmålet omkring C32. 1. I C32 ville jeg indtaste et tal fra 1 til 12. Dette tal skulle indikerer hvilken periode lønsedlen omhandlede.Her er måske et problem omkring årskiftet. Eks.Hvis jeg tastede 1 skulle lønsedlen omhandle perioden 16-12-foregående år til 15-01-2005 (forudsat jeg indtaster lønsedlen i dag 2005).Hvis jeg indtaster 2 skulle perioden være 16-01-2005 til 15-02-2005 osv. 2.Jeg kan se i dit eksembel det virker omkring din kode, men hvordan kopier jeg og overfører jeg koden til midt ark??? Mvh Petert
1. Hvis du blot ønsker at indlæse måned i C32, så skal du lige fortælle, hvor du så indlæser årstallet - det skal bruges i beregningerne af sidste hverdag.
2. Tryk Alt-F11 og find arket "Modul1" under "Moduler" i venstre side af skærmen og kopier al teksten fra vinduet til højre (eller kopier dem direkte fra mit svar kl. 14:47:07 i går). Mens du stadig er i VBA-editoren finder du dit regneark i venstre side, og markerer det. Vælg menuen Indsæt/Moduler. I højre side er nu en blank side, hvor du så kan indsætte koden.
Ok jeg forstår.I c32 indtaster jeg nummeret for måneden ( eks 1 for første lønperiode fra 16-12-2005 til 15-01-2006 og i c 33 indtaster jeg året(eks 2006) Dette forudsætte jeg udfylder lønskemaet i slutningen af januar 2006.Man skal så hvert år i januar ændre årstallet og det er OK. Jeg prøver i eftermiddag om jeg kan finde ud af og indlæse koden som du beskriver.Dette har jeg ikke gjordt før men er meget intreseret i at lære dette, da jeg kan bruge det i mange andre sammenhænge Mvh Petert
Hej sjap Den er lige ved at være der men den laver en fejl. B29,C30 virker pefekt men i C31 står der #NAVN? Til op lysning er c32 og c33 formateret som standard. Jeg har prøvet og indsætte formlerne i dit ark og her virker der som det skal. Hvad hulen har jeg gjort galt, kan det være noget med indsættelsen af koden i moduel 1???
Fejlen #NAVN? i C31 skyldes at funktionen SidsteArbejdsDag ikke er indsat i regnearket. Hvis den er sat ind, så prøv at lukke regnearket og åbn det igen.
Hej igen nu lysner det. jeg slettede koden i modul 1 og indsatte denne igen lukkede og åbnede og så virkede det.Nu kom der så en advarsel ud for B29,C30,C31 at disse ikke var låst dette gjorde jeg så og ok. Selve arket skal køre på en anden pc, er der noget jeg skal tage højde for når jeg flytter obver for også at få koden i modul1 med over eller er den automatisk med over når jeg kopier??? Tusind tak for kampen og din tålmodighed med en "langt fra exel nørd" mvh Petert
De der "ikke låst" advarsler forstår jeg ikke. Men du har måske fornøjelsen af en nyere version af Excel (jeg sidder stadig og hakker i en 97'er).
Når al kode etc. er placeret i regnearket, skulle der ikke være nogen problemer med at flytte regnearket fra en PC til en anden. MEN som altid kan det anbefales at prøve det - der kommer af og til overrraskelser :0)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.