Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1632to1636
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Unix-Timestamp in umwandeln

Unix-Timestamp in umwandeln
25.07.2018 13:44:20
Albin
Hallo Zusammen
Brauche mal wieder Eure Hilfe
Ich habe eine sehr grosse Tabelle mit Unix-Timestab Ausgabe in Spalte C.
Nun möchte ich mit VBA in Spalte D (Nachbarzelle)die Ausgabe im Format TT.MM.JJJJ hh.mm.ss haben.
Klar mit = B2 / 86400 + 25569 würde es gehen. Wäre aber schön wenn es mit VBA geht.
VBA sollte von der zweiten Zeile bis zur letzte Zeile durchlaufen.
Siehe Beilage.
https://www.herber.de/bbs/user/122877.xlsx
Danke und Gruss
Albin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unix-Timestamp in umwandeln
25.07.2018 14:04:05
Nepumuk
Hallo Albin,
teste mal:
Option Explicit

Public Sub ConvertTimestamp()
    Dim avntUnix As Variant, vntItem As Variant
    Dim adtmDateTime() As Date
    Dim ialngIndex As Long, lngCount As Long
    With Tabelle2
        avntUnix = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value2
    End With
    lngCount = UBound(avntUnix, 1)
    Redim adtmDateTime(1 To lngCount)
    For Each vntItem In avntUnix
        ialngIndex = ialngIndex + 1
        adtmDateTime(ialngIndex) = vntItem / 86400 + 25569
    Next
    Tabelle2.Cells(2, 3).Resize(lngCount, 1).Value = Application.Transpose(adtmDateTime)
End Sub

Gruß
Nepumuk
Anzeige
AW: Unix-Timestamp in umwandeln
25.07.2018 16:12:30
Albin
Hoi Nepunmuk
Danke für die rasche Lösung. Wie es leider aussieht, habe ich ein Mengenproblem. Wenn es nur ca. 1000 Zeilen sind, läuft das Makro wunderbar durch. Ich habe ca. 393000 Zeilen :-( Da kommt der blöde Fehler Laufzeitfehler 13, Typen unverträglich.
Gibt es dafür eine Lösung?
Gruss Albin
PS: kann leider das File nicht downloaden, ist ca. 8 MB gross.
AW: Unix-Timestamp in umwandeln
25.07.2018 16:33:59
Nepumuk
Hallo Albi,
dann so:
Option Explicit

Public Sub ConvertTimestamp()
    Dim avntUnix As Variant, vntItem As Variant
    Dim adtmDateTime() As Date
    Dim ialngIndex As Long, lngCount As Long
    With Tabelle2
        avntUnix = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value2
    End With
    lngCount = UBound(avntUnix, 1)
    Redim adtmDateTime(1 To lngCount, 0 To 0)
    For Each vntItem In avntUnix
        ialngIndex = ialngIndex + 1
        adtmDateTime(ialngIndex, 0) = vntItem / 86400 + 25569
    Next
    Tabelle2.Cells(2, 3).Resize(lngCount, 1).Value = adtmDateTime
End Sub

Gruß
Nepumuk
Anzeige
AW: Unix-Timestamp in umwandeln
25.07.2018 18:10:00
Albin
Hallo Nepunmuk
jetzt läuft es wie eine 1.
Super und vielen Dank für deine Lösung.
Lieber Gruss
Albin
AW: Unix-Timestamp in umwandeln mit VBA einfach
25.07.2018 21:34:21
Daniel
Hi
du kannst auch in VBA mit Formeln arbeiten.
ist schnell, massendatentauglich und einfach zu programmieren.
With Range("C2:C" & Cells(Rows.count, 2).end(xlup).row)
.FormulaR1C1 = "=RC2/86400+25569"
.Formula = .Value
.Numberformat = "DD.MM.YYYY hh:mm:ss"
End With
Gruß Daniel
Anzeige
AW: Unix-Timestamp in umwandeln
25.07.2018 22:00:49
Daniel
Hi
nochmal ne Variante, auch sehr schnell für große Datenmengen
Sub test()
Dim Zelle As Range
Set Zelle = Cells(1, Columns.Count).End(xlToLeft).Offset(0, 2)
With Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row)
.Copy .Offset(0, 1)
With .Offset(0, 1)
Zelle.Value = 86400
Zelle.Copy
.PasteSpecial xlPasteValues, operation:=xlPasteSpecialOperationDivide
Zelle.Value = 25569
Zelle.Copy
.PasteSpecial xlPasteValues, operation:=xlPasteSpecialOperationAdd
.Cells(1).Value = "Time"
.NumberFormat = "DD.MM.YYYY hh:mm:ss"
Zelle.Clear
End With
End With
End Sub
Gruß Daniel
Anzeige
AW: Unix-Timestamp in umwandeln
26.07.2018 10:26:49
Albin
Hoi Daniel
Auch ein Danke für deine Lösung, ist auch super schnell. Wenn ich Dich schon in der Leitung habe, habe ich eine andere Fragen bezüglich der Geschwindigkeit. Ich habe in der Spalte D eine sehr langen Text / Zahlen drin.
Nun möchte ich alle Zeilen löschen, die nicht zum Beispiel den Inhalt *1234* drin haben. Mit dem nachfolgenden Makro geht es zwar, aber bei 600000 braucht dieser Druchlauf sehr lange. :-(
Diese Zeile mit Text in Spalte D sollte nicht gelöscht warden:
Bereitschaft 1234 eintragen -> Loginuser: TKT4M / Kreis: 1014 / MA: Mika Tammilehto / Am: 22.10.2018
Lieber Gruss
Albin
Sub test()
Dim i As Long
Dim letzteZeile As Long
letzteZeile = Range("d65536").End(xlUp).Row
For i = letzteZeile To 1 Step -1
If Not Cells(i, 5).Value Like "*1234*" Then
Rows(i).Delete Shift:=xlUp
End If
Next i
End Sub

Anzeige
AW: Unix-Timestamp in umwandeln
29.07.2018 19:29:14
Daniel
Hi
zum Zeilenlöschen mit bedingung verwende das Duplikate-Entfernen.
das ist auch bei großen Datenmengen sehr schnell.
hierzu schreibt man in die erste freie Spalte eine Formel, welche alle Zeilen, die gelöscht werden müssen, mit der 0 kennzeichnet und alle die stehen bleiben sollen mit der Zeilennummer
in die Überschriftenzeile kommt ebenfalls die 0
dann kann man mit dem Duplikate-Entfernen alle Zeilen mit 0 löschen, nur die erste Zeile mit 0, die Überschrift bleibt stehen.
sieht als Code so aus:
With ActiveSheet.Usedrange
With .Columns(.columns.Count + 1)
.formular1c1 = "=if(isnumber(find("1234",RC4)),Row(),0)"
.Cells(1, 1).Value = 0
.EntireRow.Removeduplicates .column, xlno
.clearcontents
end with
end with
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige