Avatar billede barentsen Novice
24. juli 2007 - 10:46 Der er 7 kommentarer og
1 løsning

Problemer med datoformatering

Hej eksperter

Jeg har et regneark med pt. ca. 33.000 rækker.
En kollonne (E) indeholder dato + tidspunkt angivet som tekst.
Ex.:
'7/16/2007 11:46:11 AM
'7/4/2007 1:36:49 PM

For hver række, har jeg brug for at vide, hvor mange dage det er siden. (1. række i mit eksempel skal være lig 8 dage, 2. række = 20 dage)
Problemet er, at det ikke er et egenligt datofelt, og at datoerne er angivet med forskellig længde alt efter dato (dag i ex. er på 2 cifre i linie 1 og 1 ciffer i linie 2)

Er der nogle der har en god ide til hvordan jeg får excel til at regne ud hvor mange dage det er siden...?

PFT.
Avatar billede kabbak Professor
24. juli 2007 - 11:45 #1
Her er en funktion, der kan oversætte dine tider til dansk tid, hvis du sætter den ind i en anden kolonne, kan du regne på den.


Public Function DT(Etid) As Date
a = InStr(1, Etid, " ")
b = InStr(1, Etid, "/")
C = InStr(b + 1, Etid, "/")
y = Val(Mid(Etid, a - 4, 4))
m = Val(Mid(Etid, 2, b - 1))
d = Val(Mid(Etid, b + 1, C - (b + 1)))
DT = DateSerial(y, m, d) + TimeValue(Right(Etid, Len(Etid) - 1))

'kaldes med = DT(A1), i en celle, hvor A1 er den engelske form for datotid

End Function
Avatar billede barentsen Novice
24. juli 2007 - 12:57 #2
Foreløbigt tak kabbak!

Kan du også hjælpe mig lidt videre, så jeg kan bruge dit svar? - Har aldrig prøvet sådan noget med funktioner (kun dem der er i "Indsæt", "funktion...")

Hvor skal funktionen skrives henne for at den kan bruges? - Hvordan bruger man funktionen?

- Til orientering skal jeg ikke brug tidspunkterne til noget - kun datoerne - så hvis tiden kan fjernes vil det ikke være dumt, men det betyder sådan set ikke noget!
Avatar billede kabbak Professor
24. juli 2007 - 15:10 #3
Public Function DT(Etid) As Date
a = InStr(1, Etid, " ")
b = InStr(1, Etid, "/")
C = InStr(b + 1, Etid, "/")
y = Val(Mid(Etid, a - 4, 4))
m = Val(Mid(Etid, 2, b - 1))
d = Val(Mid(Etid, b + 1, C - (b + 1)))
DT = DateSerial(y, m, d)' + TimeValue(Right(Etid, Len(Etid) - 1))'fjern ', hvis du vil have klokken med

'kaldes med = DT(A1), i en celle, hvor A1 er den engelske form for datotid

End Function

Den skal sættes ind i et modul. samme sted som dine optagne makroer findes.

Ellers tryk ALT + F11, så kommer du ind i VBA editoren,
vælg insert module, kopier koden ind på den hvide flade, truk på disketten for save, luk editoren på øverste X, så er du tilbage på arket.
Avatar billede barentsen Novice
24. juli 2007 - 15:42 #4
Det kan man da kalde hjælp:-)
Rart med noget step by step vejledning, her første gang.

Mht. resultatet af funktionen, så driller den lidt. Er der noget i funktionen jeg skal tilrette?

Der sker følgende:
Ex.
Felt E12 = '7/12/2007 5:45:36 AM
i I12 har jeg skrevet =DT(E12)
Resultat = 39063

Jeg har så formateret feltet, så det bliver dansk datoformateret.
Resultat = 12-12-2006

Når jeg kopierer den nedad i Kolonnen I, kan jeg se at dagen altid er rigtig, men at året altid er 1 år mindre end det rigtige år, og endeligt bliver der altid valgt december (12) som måned.

Kan du klare den også så har du i den grad fortjent pointene.
Avatar billede kabbak Professor
24. juli 2007 - 19:28 #5
jeg har testet
'7/12/2007 5:45:36 AM

der får jeg 12-07-2007

Er du sikker på at du har en ' foran

prøv nu, den tjekker for '

Public Function DT(Etid) As Date
    Etid = Replace(Etid, "'", "")
    b = InStr(1, Etid, "/")
    c = InStr(b + 1, Etid, "/")
    y = Val(Mid(Etid, c + 1, 4))
    m = Val(Left(Etid, b - 1))
    d = Val(Mid(Etid, b + 1, c - (b + 1)))
    DT = DateSerial(y, m, d)    '+ TimeValue(Right(Etid, Len(Etid))) 'fjern ' foran +, hvis du vil have klokken med
    '
    'kaldes med = DT(A1), i en celle, hvor A1 er den engelske form for datotid

End Function
Avatar billede barentsen Novice
24. juli 2007 - 21:15 #6
Jeg har tjekket, og kan garantere, at der er et ' foran alle datoerne...

Men den nye funktion virker! Så hvis du smider et svar, så får du pointene.
Mange tak for god hjælp.

Hvis du har lyst, vil jeg ikke klage over en lille forklaring på hvad det er der sker i funktionen... men det er ikke noget krav for at du får dine velfortjente point.
Avatar billede kabbak Professor
24. juli 2007 - 21:52 #7
Public Function DT(Etid) As Date
    Etid = Replace(Etid, "'", "")' erstatter ' med intet, hvis den er der
    b = InStr(1, Etid, "/")' finder placeringen på 1. skråstreg
    c = InStr(b + 1, Etid, "/")' finder placeringen på 2. skråstreg
    y = Val(Mid(Etid, c + 1, 4)) ' finder årstallet 4 tegn til højre for 2 skråstreg
    m = Val(Left(Etid, b - 1))  ' måned er alt til venstre for 1. skråstreg
    d = Val(Mid(Etid, b + 1, c - (b + 1)))' dag er det imellem de 2 skråstreger
    DT = DateSerial(y, m, d)    '+ TimeValue(Right(Etid, Len(Etid))) 'fjern ' foran +, hvis du vil have klokken med
    '
    'kaldes med = DT(A1), i en celle, hvor A1 er den engelske form for datotid

End Function
Avatar billede barentsen Novice
25. juli 2007 - 00:02 #8
Tak for hjælpen og forklaringen...
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