24. juli 2007 - 10:46Der 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...?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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!
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.
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.
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
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.
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
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.