Hej jag får från ett annat program tid å datum som ser ut såhär i exel 20030416123909000 Först, din tid verkar innehålla tusendels sekunder. Tror inte att excels datumformat kan hatera det. Om du inte behöver tusendelarna kan du använda följande formel (förutsätter att din tid finns lagrad som sträng i cell A1) Detta funkade ju ####-##-##_ ##\:##\:##\:### men hur mycket stökigare blir det om jag vill ha tiden i en annan kolum ??? Få bort tusendelarna: Om du inte skyr makron alltför mycket har du ett med hårdkodade cellreferenser här: Annk detta ser ju inte fel ut men problemet är att jag vet inte hur många poster det rörsej om men skulle tro krin ett par tusen poster, så jag måste ha nått dunamiskt som kan räkna hurmånga rader och sen gör flytten av tiden på alla rader =) Mssförstod dig lite. Jag trodde att du ville ha datumet i Excel format så att du kunde använda det i beräkningar mm. Detta gör jobbet dynamiskt Nää du har rätt datumet ska kunan användas för att kunna bygga diagram. vi ska nämligen se hur många in å ut passeringar det sker mellan vilka tider på dygnet, för att kunna ta beslut om öpet tider =) Med dessa siffror i kolumn A1:A15 Om du vill ha dem i Access, varför inte importera kalkylbladet dit och sedan lägga tillbaka dem i Excel när du bearbetat? Här har du en variant med Loop istället för For Next hej tacka för svaren å beklagar att jag dröjt :( (mycket att göra) TAckar för all hjälp, var bara tvungen att göra om long till stRing så att den inte rensar bort nollorna i början Detta är en funktion jag skrivit ssom kanske passar dig. Du kan ju lägga in den i celler du vill förvandla:Formatera datum
jag skulle vilja ha det i ÅÅÅÅ-MM-DD och i en anna cell TT:MM:SS
jag har provar det mesta typ format anpassa och ####\-##\-## ##\:##\:## eller ÅÅÅÅ-MM-DD TT:SS men inte nått funkar, nu funderar jag på att man ska skriva ett litet vb skript som gör allt med typ mid() å sedan delar upp det i rätt cell, men jag har inte skrivit nått i vba, å härsitter jag nu med ett öppet kod fönster å vet inte vart jag ska börja
/Nicklas GSv: Formatera datum
=DATUM(VÄNSTER(A1;4);EXTEXT(A1;5;2);EXTEXT(A1;7;2))+KLOCKSLAG(EXTEXT(A1;9;2);EXTEXT(A1;11;2);EXTEXT(A1;13;2))
Om du behöver tusendelarna så kan du använda datumformatet för datumdelen men du måste lagra tiden som ett vanligt tal (vilket gör det lite krångligare att formatera)Sv: Formatera datum
Och kan man välja bort tusendelaran ???
Är så satans dålig på exel *suck*
Tackar för ett bra svar jag fick, nu slipper jag ju vbs =) Sv: Formatera datum
<code>
####-##-##_ ##\:##\:##
</code>
Att få tiden i en annan kolumn har jag ingen bra lösning på. Bara att du kopierar över allt till en egen kolumn.
/DSv: Formatera datum
Sub Formatera_datum()
Dim strHarang As String
Dim lngDatum As Long
Dim dblTid As Double
Dim lngTms As Long
Dim strDatum As String
Dim strTid As String
Range("A1").Activate
Selection.NumberFormat = "0"
strHarang = ActiveCell.Text
lngDatum = Left(strHarang, 8)
dblTid = Right(strHarang, 9)
intTms = Left(dblTid, 6)
strDatum = Left(lngDatum, 4) & "-" & Mid(lngDatum, 5, 2) & "-" _
& Right(lngDatum, 2)
strTid = Left(intTms, 2) & ":" & Mid(intTms, 3, 2) & ":" & Right(intTms, 2)
Range("B1").Activate
Selection.NumberFormat = "yyyy-mm-dd;@"
ActiveCell.FormulaR1C1 = strDatum
Range("C1").Activate
Selection.NumberFormat = "hh:mm:ss;@"
ActiveCell.FormulaR1C1 = strTid
End Sub
/akSv: Formatera datum
Hade jag fått bestämma så hade jag laggt in det i acces istället =) Sv: Formatera datum
Om du bara vill formatera det så gör så här
1. Sätt formatet på den kolumn där datumet finns till "####-##-## " (tre blanktecken på slutet)
2. i kolumnen brevid ange formeln =rest(a1;1e9) och formatet "##\:##\:##\:###"
eller "##\:##\:## " (ett blanktecken) för att ta bort tusendelarSv: Formatera datum
Man kan endera starta i markerad cell
då används detta
<code>
iStartRow = ActiveCell.Row
iStartCol = ActiveCell.Column
</code>
eller också hårdkoda startcell så här
<code>
iStartRow = 1
iStartCol = 1
</code>
<code>
Sub Formatera_datum()
Dim strHarang As String
Dim lngDatum As Long
Dim dblTid As Double
Dim lngTms As Long
Dim strDatum As String
Dim strTid As String
Dim iLastRow As Long
Dim iStartRow As Long
Dim iStartCol As Long
Dim i As Long
'Markerad cell som startcell
iStartRow = ActiveCell.Row
iStartCol = ActiveCell.Column
'Startcell satt till A1
iStartRow = 1
iStartCol = 1
iLastRow = Cells(65536, iStartCol).End(xlUp).Row
For i = iStartRow To iLastRow
With Cells(i, iStartCol)
.NumberFormat = "0"
strHarang = .Text
lngDatum = Left(strHarang, 8)
dblTid = Right(strHarang, 9)
lngTms = Left(dblTid, 6)
strDatum = Left(lngDatum, 4) & "-" & Mid(lngDatum, 5, 2) & "-" _
& Right(lngDatum, 2)
strTid = Left(lngTms, 2) & ":" & Mid(lngTms, 3, 2) & ":" & Right(lngTms, 2)
With .Offset(0, 1)
.NumberFormat = "yyyy-mm-dd;@"
.FormulaR1C1 = strDatum
End With
With .Offset(0, 2)
.NumberFormat = "hh:mm:ss;@"
.FormulaR1C1 = strTid
End With
End With
Next i
End Sub
</code>
obs ingen felhantering i denna kodSv: Formatera datum
Sv: Formatera datum
20030416123909000
får jag ut 2003-04-16 i kolumn B
och 12:39:00 i kolumn C
med den kod som jag modifierade
Som jag skrev så finns det ingen felkod som tar hand om eventuella
fel .
På vilken rad i koden stannar det för dig
Fortsätt gärna i den här tråden så kanske
fler kan hjälpa till
Det kan också hjälpa om du talar om vilken
version av excel du använderSv: Formatera datum
/annKSv: Formatera datum
Den loopar tills den hittar första tomma cell
Den kanske fungerar bättre
Har råkat ut för någon gång att excel inte känner av
att det finns data i cellerna och då fungerar inte
SHIFT PIL NED eller UPP för att hoppa till sista cell med data
<code>
Sub Formatera_datum_DO()
Dim strHarang As String
Dim lngDatum As Long
Dim dblTid As Double
Dim lngTms As Long
Dim strDatum As String
Dim strTid As String
Dim iStartRow As Long
Dim iStartCol As Long
Dim i As Long
'Markerad cell som startcell
iStartRow = ActiveCell.Row
iStartCol = ActiveCell.Column
'Startcell satt till A1
iStartRow = 1
iStartCol = 1
i = iStartRow
Do Until Cells(i, iStartCol) = ""
With Cells(i, iStartCol)
.NumberFormat = "0"
strHarang = .Text
lngDatum = Left(strHarang, 8)
dblTid = Right(strHarang, 9)
lngTms = Left(dblTid, 6)
strDatum = Left(lngDatum, 4) & "-" & Mid(lngDatum, 5, 2) & "-" _
& Right(lngDatum, 2)
strTid = Left(lngTms, 2) & ":" & Mid(lngTms, 3, 2) & ":" & Right(lngTms, 2)
With .Offset(0, 1)
.NumberFormat = "yyyy-mm-dd;@"
.FormulaR1C1 = strDatum
End With
With .Offset(0, 2)
.NumberFormat = "hh:mm:ss;@"
.FormulaR1C1 = strTid
End With
End With
i = i + 1
Loop
End Sub
</code>Sv: Formatera datum
Nu har jag körd den nedersta koden å den funkar perfekt nästan =)
har inte hunnit kolla så mucket vad felet är ännu men om tiden är:
20020104072016000 så formaterar den fel, och det har med att klockan är före 10 på förmiddagen då tar den bort nollan :(Varför ???
så formateringen blir 2002-01-04 72:01:60 i stäöllet för
2002-01-04 07:20:16.
ska se om jag kan lösa det själv.
Tacka för all hjälp.
/Nicklas GSv: Formatera datum
/Nicklas GrahnSv: Formatera datum
<code>
Private Type SerialDate
Text As String * 17
End Type
Private Type SeparatedDate
strYear As String * 4
strMonth As String * 2
strDay As String * 2
strHour As String * 2
strMinute As String * 2
strSecond As String * 2
strMillisecond As String * 3
End Type
Public Function UnSerialDate(ByVal Value As Variant) As Variant
Dim Serial As SerialDate
Dim Separated As SeparatedDate
Serial.Text = Value
LSet Separated = Serial
UnSerialDate = DateSerial(Separated.strYear, Separated.strMonth, Separated.strDay) + TimeSerial(Separated.strHour, Separated.strMinute, Separated.strSecond)
End Function
</code>