Avatar billede jjjakobsen Mester
09. oktober 2003 - 19:33 Der er 8 kommentarer og
2 løsninger

Indtastning af dato

Kan man taste datoen ind som 030478, og få den formateret som dato 03-04-78. Det vil gøre indtastningen fødselsdage meget hurtigere.
Avatar billede jkrons Professor
09. oktober 2003 - 19:40 #1
Mit svar vil umiddelbart være Nej. 030478 vil blive opfattt af Excel som 30478 og hvis du prøver at formatere det som dato, får du 5. september 2722!!

Du kan evt vælge et brugerdefineret format ##-##-##, og så kommer det til at se ud, som du ønsker, men det bliver ikke opfattet som en dato af Excel, og du kan fx ikke sortere i datoorden.
Avatar billede jkrons Professor
09. oktober 2003 - 19:41 #2
Iøvrigt bliver 030478 til 11-06-86, ikke 05-09-2722: Det var fordi jeg tastede 300478 :-)
Avatar billede jkrons Professor
09. oktober 2003 - 19:43 #3
Og endnu en rettelse: For at virke korrekt skal formatet faktsi se sådan her ud 0#-##-## - ellers "spider den foranstillede 0'er.
Avatar billede stefanfuglsang Juniormester
09. oktober 2003 - 20:21 #4
og man kan lave en makro der gør det - men det er næsten ikke umagen værd.
Ulempen ved et frit felt er at der ikke er nogen check af om det er en lovlig dato.
Men vælge du løsningen 0#-##-## (f.eks. i A1, så kan du i B1 skrive:
=dato(midt(a1;7;2);midt(a1;4;2);midt(a1;1;2))
- så har du en dato igen
Avatar billede jkrons Professor
09. oktober 2003 - 20:27 #5
stefanfuglsang-> Ikke helt ;-) fordi bindestregerne jo er formaterede, ikke indtastede. Derfor skal de ikke regnes med. Formlen skal hedde =dato(midt(a1;5;2);midt(a1;3;2);midt(a1;1;2))  i stedet. Og så bliver datoen for det indtastede 030478 til 30-11-1911, og det var jo ikke hensigten :-)
Avatar billede jkrons Professor
09. oktober 2003 - 21:11 #6
Bare for sjov! Her er en makro, som kan gøre det. Indtast alle datoerne som du foreslår. De skal stå i en kolonne, og der må ikke være tomme celler. Kør makroen, og 03078 bliver til 03-04-78 og denne gang som en rigtig dato.

Lad dog være med at køre den på kolonner, hvor der allerede står datoer, for så har folk pludselig fødsesldag en ande dag :-) Den reter nemlig også de tal, der ligger til grund for datoen.

Sub TalTilDato()
'Ændrer alle tal, fx 030478 i en kolonne til en dato
'på formatet 03-04-78. Kolonnen skal være ubrudt
' Jkrons, 10-2003

    On Error GoTo TalTilDato_Fejl
   
    'Erklæringer
    Dim TalDag As Long
    Dim sTalDag As String
    Dim Di As Integer
    Dim Mi As Integer
    Dim Yi As Integer
    Dim TempDat As Date
   
    'Start et genneløb af alle celler i A-kolonnen
    'Kan rettes til den rigtige kolonne ved at ændre bogstavet

    For Each c In ActiveSheet.Columns("A").Cells
   
    'Først findes værdien, der står i en cell
        TalDag = c.Value
     
    'Tallet konverteres til en tekststreng
        sTalDag = CStr(TalDag)
       
    'Hvis der er "forsvundet2 et foranstillet 0, sættes det igen
        If Len(sTalDag) < 6 Then
            sTalDag = "0" & sTalDag
        End If
       
    'Nu findes hhv Dag, Måned og År af tekststrengen.
    'Værdierne gemmes som hele tal i hver sin variabel
    'Dateserial, som anvendes senere forventer heltal
        Di = CInt(Left(sTalDag, 2))
        Mi = CInt(Mid(sTalDag, 3, 2))
        Yi = CInt("19" & Right(sTalDag, 2))
       
    'Så omregnes de enkelte tal til en valid dato
        TempDat = DateSerial(Yi, Mi, Di)
       
    'Værdien skrives tilbage til cellen
        c.Value = Format(TempDat, "ddmmyy")
   
    'Vi tager den næste celle i kolonnen
    Next c
   
    'Hvis alt er gået godt forlades proceduren
    Exit Sub
   
   
    'Elers håndterer vi lige en enkelt fejlsituation
TalTilDato_Fejl:
    If Err.Number = 13 Then
        MsgBox "Du er enten færdig med kolonnen, eller der er en tom celle." & vbCrLf _
        & "I givet fald skal den slettes", vbOKOnly + vbExclamation, "Konverteringsfejl"
    Else
        MsgBox "Der er opstået en uventet fejl", vbOKOnly + vbCritical, "Uventet fejl"
    End If

End Sub
Avatar billede jkrons Professor
09. oktober 2003 - 21:26 #7
Men som Stefan siger er den ligeglad med om der står 124321 - den koverterer alligevel.

Og så fik jeg lige lavet en fejl. Linjen

c.Value = Format(TempDat, "ddmmyy")

skal bare hedde

c.Value = TempDat
Avatar billede bak Forsker
10. oktober 2003 - 09:29 #8
Denne makro sættes ind i arkets kodemodul. (højreklik på arkfane, vælg Vis programkoder)
Den er sat til kun at gælde for område A1:A10
Se iøvrigt http://www.cpearson.com/excel/DateTimeEntry.htm

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim DateStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
    Exit Sub
End If
If Target.Cells.Count > 1 Then
    Exit Sub
End If
If Target.Value = "" Then
    Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
    Select Case Len(.Formula)
        Case 4 ' e.g., 9298 = 2-Sep-1998
            DateStr = Left(.Formula, 1) & "-" & _
            Mid(.Formula, 2, 1) & "-" & Right(.Formula, 2)
        Case 5 ' e.g., 11298 = 12-Jan-1998 NOT 2-Nov-1998
            DateStr = Left(.Formula, 1) & "-" & _
                Mid(.Formula, 2, 2) & "-" & Right(.Formula, 2)
        Case 6 ' e.g., 090298 = 2-Sep-1998
            DateStr = Left(.Formula, 2) & "-" & _
                Mid(.Formula, 3, 2) & "-" & Right(.Formula, 2)
        Case 7 ' e.g., 1231998 = 23-Jan-1998 NOT 3-Dec-1998
            DateStr = Left(.Formula, 1) & "-" & _
                Mid(.Formula, 2, 2) & "-" & Right(.Formula, 4)
        Case 8 ' e.g., 09021998 = 2-Sep-1998
            DateStr = Left(.Formula, 2) & "-" & _
                Mid(.Formula, 3, 2) & "-" & Right(.Formula, 4)
        Case Else
            Err.Raise 0
    End Select
    .Formula = DateValue(DateStr)
End If

End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "Ikke en gyldig dato."
Application.EnableEvents = True
End Sub
Avatar billede oyejo Nybegynder
16. oktober 2003 - 09:38 #9
Hvis man ikke skal benytte datoene i beregniger kan man lage et egendefinert format: Du velger Format-Celler- Egendefingert (på Norsk) Hvis du definerer formatet slik: 00"-"00"-"00 vil du få den visnigen du er ute etter. Da vil intastingen 030478 vises som 03-04-78.
DENNE LØSNINGEN VIL KUN FUNGERE SOM EN VISNING.
DEN KAN IKKE BENYTTES I BEREGNINGER AV DATOER.
MEN MAN KAN SE PÅ DET SOM EN TALLVERDI
Avatar billede morteno Nybegynder
03. juli 2007 - 14:35 #10
Kan det lade sig gøre at udvide området til eksempelvis b4:b64000 og f4:f64000?
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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