Avatar billede googolplex Novice
07. august 2004 - 22:10 Der er 36 kommentarer og
1 løsning

Udfylde regneark med årets dage

Jeg skal have fyldt en regneark ud med alle årets dage således:

Uge 1
Mandag den 1. januar
Tirsdag den 2. januar
...
Uge 2
Mandag den 8. januar
Tirsdag den 9. januar
...

Osv.

Hvordan gør jeg det nemmest ?
Avatar billede sjap Praktikant
07. august 2004 - 22:17 #1
I første felt skriver du f.eks. 01-01-04.
I det næste felt skrives 02-01-04.
Marker de to felter og træk i den lille firkant i nederste højre hjørne indtil alle 366 felter er fyldt med datoer.
Bevar markeringen af alle felterne og vælg Formater/Celler og marker brugerdefineret. Under "Type" skriver du
dddd" den " d". "mmmm
Avatar billede googolplex Novice
07. august 2004 - 22:23 #2
Det var nemt :P

Et par sidespørgsmål:

1. Hvordan får jeg nemmest puttet ugerne ind imellem jeg har skrevet ?
2. Hvordan får jeg lagt den samme tekst ind i alle tirsdage ?
3. Hvordan får jeg dagene til at begynde med stort ?
Avatar billede sjap Praktikant
07. august 2004 - 22:33 #3
1. Det gør du lettest ved at skrive
  =UGE.NR(A1)
  (hvis dine datoer står i A1) i en ny kolonne, og så kopiere den hele vejen ned.
  Så vidt jeg ved, kan datoen ikke direkte formateres som ugernummer.
Avatar billede sjap Praktikant
07. august 2004 - 22:33 #4
2. Ikke forstået. Skal der stå mere end blot "Tirsdag den 2. januar" ?
Avatar billede sjap Praktikant
07. august 2004 - 22:52 #5
3. Jeg kender ikke nogen metode til at formatere med stort bogstav, så jeg kan kun foreslå en ny kolonne:
  =STORT.FORBOGSTAV(TEKST(A1;"dddd"))&" den "&TEKST(A1;" d"". ""mmmm")
  (igen forudsat at A1 indeholder datoen).
Avatar billede sjap Praktikant
07. august 2004 - 23:03 #6
Hvis du kun skal lave ovenstående én gang og gerne vil undgå datokolonnen, kan du jo blot kopiere og vælge indsæt speciel "værdier" når du er færdig. Herefter kan kolonnen med de oprindelige datoer slettes.
Avatar billede googolplex Novice
07. august 2004 - 23:57 #7
1. Den skriver '#NAVN?'.
2. Hvis jeg nu vil have at der i kolonne 'B' skal stå 'Svømning' ud for alle tirsdage.
3. Perfekt :)
Avatar billede sjap Praktikant
08. august 2004 - 00:17 #8
1. Ups. Funktionen kræver at "Analysis Toolpak" er aktiveret. Det kan gøres under Funktioner/Tilføjelsesprogrammer.

2. Prøv med
  =HVIS(UGEDAG(A1)=3;"Svømmedag";"")

3. :0)
Avatar billede googolplex Novice
08. august 2004 - 09:21 #9
Cool, det hele funker!!

En lille sidste ting, hvordan får jeg den til at skrive:

UGE 32

I stedet for bare:

32

Er du i øvrigt på Messenger, du virker som om du har tjek på det skidt og jeg roder ofte med det :)
Avatar billede brynil Nybegynder
08. august 2004 - 09:27 #10
Bare lidt nysgerrig, men hvordan får du 365 kolonner i et enkelt regneark?
Avatar billede googolplex Novice
08. august 2004 - 09:31 #11
Ok, har lige et til spørgsmål. Nu har jeg skrevet følgende:

A01:
A02: =UGE.NR(A3)
A03: 02-08-2004
A04: 04-08-2004
A05: 06-08-2004
A06:
A07: =UGE.NR(A8)
A08: 09-08-2004
A09: 11-08-2004
A10: 13-08-2004

Nu vil jeg gerne have dette til at fortsætte, altså hvor den kun tager mandag, onsdag, fredag med, samt ugen og et mellemrum. Men når jeg kopierer, så kopierer den bare de 2 uger på skift.

Kan du hjælpe ?

Skal nok give dig nogle flere point :)
Avatar billede brynil Nybegynder
08. august 2004 - 10:36 #12
Måske kan du bruge denne sub:

Sub DatoRække()
Dim i, o As Double

i = 1
For o = CLng(Now()) To CLng(Now() + 365)
    If Weekday(o) = 1 Then
        Cells(i, 1).Value = "=weeknum(" & o & ")"
        Cells(i, 1).Select
        Cells(i, 1).Value = "Uge " & Cells(i, 1).Value
        i = i + 1
    Else
        If Weekday(o) = 2 Or Weekday(o) = 4 Or Weekday(o) = 6 Then
            Cells(i, 1).Value = o
           
            Cells(i, 1).Select
            Selection.NumberFormat = "dddd" & " " & "dd.mmmm"
               
            If Weekday(o) = 2 Then Cells(i, 2).Value = "Samme besked"
           
            i = i + 1
        End If
    End If
Next o

End Sub
Avatar billede brynil Nybegynder
08. august 2004 - 10:54 #13
Rettelse, udskift linien:

    Cells(i, 1).Value = "Uge " & Cells(i, 1).Value

med:

    If Year(o) = 2004 Then Cells(i, 1).Value = "Uge " & Cells(i, 1).Value
    If Year(o) = 2005 Then Cells(i, 1).Value = "Uge " & Cells(i, 1).Value - 1

Kan ikke lige se hvorfor den springer uge 1 over.
Avatar billede googolplex Novice
08. august 2004 - 10:57 #14
Ok, hvor skal jeg sætte det ind, har ikke tjek på Excel-scripting :)
Avatar billede brynil Nybegynder
08. august 2004 - 11:13 #15
Tryk Alt+F11 for at åbne VB editor.

Til venstre skal du finde dit regneark, sikkert VBAProject(Mappe#) hvis du lige har åbnet et nyt regneark.

Klik på + til venstre for navnet og højreklik på ThisWorkbook. Vælg så Insert og derefter Module. Paste hele Sub'en ind i modulet og tryk F5, så bliver den afviklet.
Avatar billede googolplex Novice
08. august 2004 - 11:19 #16
Og hvaaad, hvor var det sejt!!

Hvor kan jeg læse mere om det, det vil jeg gerne lære, er det bare VB ? (Kan kun PHP).

Hvordan gør jeg så navnene på ugedagene bliver med stort ?

Laver det et spørgsmål til dig med point.
Avatar billede googolplex Novice
08. august 2004 - 11:20 #17
Der skulle også gerne være en tom række før hver nye uge.
Avatar billede googolplex Novice
08. august 2004 - 11:20 #18
Og ugerne skal være med fed ;)
Avatar billede sjap Praktikant
08. august 2004 - 11:45 #19
brynil -> Du kan ikke få 365 kolonner - desværre (i hvert tilfælde ikke i mine oldgamle versioner af Excel)
Avatar billede googolplex Novice
08. august 2004 - 11:47 #20
Er der en af jer, der lige kan omskrive det VBA-script, så.

1. Der kommer en tom række før hver nye uge.
2. Ugedagene står med stort.
3. Uge # står med fed

Det er det sidste jeg mangler, håber I kan hjælpe :)
Avatar billede sjap Praktikant
08. august 2004 - 11:50 #21
If Year(o) = 2004 Then
        Cells(i, 1).Value = "Uge " & Cells(i, 1).Value
        Cells(i, 1).Font.Bold = True
    End If
Avatar billede sjap Praktikant
08. august 2004 - 12:23 #22
Jeg har trimmet Brynils forslag lidt.

Sub DatoRække()
Dim i, o As Double

Const StartDato = #1/1/2004#
i = 1

For o = StartDato To DateAdd("yyyy", 1, StartDato)
    If WeekDay(o) = 1 Then
        Cells(i, 1).Value = "Uge " & DatePart("ww", o)
        Cells(i, 1).Font.Bold = True
    Else
        If WeekDay(o) = 2 Or WeekDay(o) = 4 Or WeekDay(o) = 6 Then
            Cells(i, 1).Value = StrConv(Format(o, "dddd"), vbProperCase) & " den " & Format(o, " d"". ""mmmm")
            If WeekDay(o) = 2 Then Cells(i, 2).Value = "Samme besked"
        End If
    End If
    i = i + 1
Next o

End Sub
Avatar billede sjap Praktikant
08. august 2004 - 12:25 #23
Din accept af svaret, betyder det at du har fået løst dit problem?
Avatar billede brynil Nybegynder
08. august 2004 - 12:35 #24
>> sjap, den er meget mere overskuelig. Jeg har dog på fornemmelsen at der er tale om et 'skole'-skema, så måske går opdelingen på et kalenderår ikke helt.

Og tak for den der vbProperCase, den ledte jeg efter.

>> googolplex, der er hjælp i VB editorens egen hjælp. Ellers er der masser af bøger på engelsk. En enkelt dansk med grundlæggende VBA er IDG's 'Excel 2000 programmering med VBA. Måske også i nyere udgave, men VBA har endnu ikke ændret sig væsentligt.
Avatar billede sjap Praktikant
08. august 2004 - 12:45 #25
googolplex -> Du svarer ikke længere på spørgsmålene, men uanset om du stadig har brug for det eller ej, så får du her koden, der skulle leve op til dine krav som beskrevet kl. 11:47:35 (med lidt modifikationer inspireret af brynils sidste kommentar).

Sub DatoRække()
Dim i, o As Double
Dim UgeNr As Integer

Const StartDato = #1/1/2004#        'Kan ændres efter behov
Const SlutDato = #1/1/2005#        'Kan ændres efter behov

i = 1
UgeNr = DatePart("ww", StartDato)

For o = StartDato To SlutDato
    If DatePart("ww", o) > UgeNr Then i = i + 1
    If WeekDay(o) = 1 Then
        UgeNr = DatePart("ww", o)
        Cells(i, 1).Value = "Uge " & UgeNr
        Cells(i, 1).Font.Bold = True
    Else
        If WeekDay(o) = 2 Or WeekDay(o) = 4 Or WeekDay(o) = 6 Then
            Cells(i, 1).Value = StrConv(Format(o, "dddd"), vbProperCase) & " den " & Format(o, " d"". ""mmmm")
            If WeekDay(o) = 2 Then Cells(i, 2).Value = "Samme besked"
        End If
    End If
    i = i + 1
Next o

End Sub
Avatar billede brynil Nybegynder
08. august 2004 - 13:05 #26
>> sjap, hvis du kører din makro ind i fx juni 2005, gør den samme fejl som i min den første, den giver forkert ugenummer i 2005.
Avatar billede googolplex Novice
08. august 2004 - 13:12 #27
Jeg kigger lige på det nu, tror det hele funker :)
Avatar billede googolplex Novice
08. august 2004 - 13:19 #28
Hvordan modificerer jeg scriptet, så den ikke laver den fejl brynil nævner ?
Avatar billede kabbak Professor
08. august 2004 - 13:24 #29
UgeNr = DatePart("ww", o, vbMonday, vbFirstFourDays)

skulle rette fejlen
Avatar billede brynil Nybegynder
08. august 2004 - 13:30 #30
Ikke helt! Så springer den desværre ugedagene over og lægger uge 1 dagene i uge 53!

Er det uge 53 der driller eller er det skudåret?
Avatar billede googolplex Novice
08. august 2004 - 13:34 #31
Øhh, det ved jeg ikke, vidste ikke at der var en fejl før du skrev det ;)

Men har fået det til at virke nu tror jeg ved at kombinere jeres scripts lidt :)
Avatar billede kabbak Professor
08. august 2004 - 13:34 #32
Sub DatoRække()
Dim i, o As Double
Dim UgeNr As Integer

Const StartDato = #1/1/2004#        'Kan ændres efter behov
Const SlutDato = #1/1/2006#        'Kan ændres efter behov

i = 1
UgeNr = DatePart("ww", StartDato, vbMonday, vbFirstFourDays)

For o = StartDato To SlutDato
    If DatePart("ww", o, vbMonday, vbFirstFourDays) > UgeNr Then i = i + 1
    If Weekday(o) = 2 Then ' SKAL VÆRE 2 for MANDAG
        UgeNr = DatePart("ww", o, vbMonday, vbFirstFourDays)
        Cells(i, 1).Value = "Uge " & UgeNr
        Cells(i, 1).Font.Bold = True
    Else
        If Weekday(o) = 2 Or Weekday(o) = 4 Or Weekday(o) = 6 Then
            Cells(i, 1).Value = StrConv(Format(o, "dddd"), vbProperCase) & " den " & Format(o, " d"". ""mmmm")
            If Weekday(o) = 2 Then Cells(i, 2).Value = "Samme besked"
        End If
    End If
    i = i + 1
Next o

End Sub
Avatar billede sjap Praktikant
08. august 2004 - 13:39 #33
Sub DatoRække()
Dim i, o As Double
Dim UgeNr As Integer

Const StartDato = #1/1/2004#        'Kan ændres efter behov
Const SlutDato = #1/8/2006#        'Kan ændres efter behov

i = 1
UgeNr = DatePart("ww", StartDato)

For o = StartDato To SlutDato
    If DatePart("ww", o, vbMonday, vbFirstFourDays) <> UgeNr Then
        UgeNr = DatePart("ww", o, vbMonday, vbFirstFourDays)
        Cells(i, 1).Value = "Uge " & UgeNr
        Cells(i, 1).Font.Bold = True
        i = i + 1
    End If
    If WeekDay(o) = 2 Or WeekDay(o) = 4 Or WeekDay(o) = 6 Then
        Cells(i, 1).Value = StrConv(Format(o, "dddd"), vbProperCase) & " den " & Format(o, " d"". ""mmmm")
        If WeekDay(o) = 2 Then Cells(i, 2).Value = "Samme besked"
    End If
    i = i + 1
Next o

End Sub
Avatar billede brynil Nybegynder
08. august 2004 - 13:44 #34
Lige i øjet  ;))
Avatar billede kabbak Professor
08. august 2004 - 13:44 #35
rigtig, det var jeg også kommet til at den Else skulle væk
Avatar billede sjap Praktikant
08. august 2004 - 13:48 #36
Det var godt nok er svær fødsel :0)
Nogen gange tror man, man har den - lige indtil man får set efter i sømmene. Tak for godt teamwork.

Nogen der ved hvor langt Danmark Rundt er nået. Finalerundstrækningen ligger 300 m herfra, så jeg skal da lige ned at glo lidt - formodenligt sammen med 3.000.000 andre i det her vejr!
Avatar billede brynil Nybegynder
08. august 2004 - 13:52 #37
;) Det kan ikke være for de 2 minutter du ser dem suse forbi, så nu er lissågodt som senere! Og selvtak!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester