Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
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

Änderung Format aus ISO 6801

Änderung Format aus ISO 6801
02.02.2019 11:33:59
Rob
Hallo zusammen
Projektaufgaben werden auf einer Webseite erfasst. Mittels json werden diese ganzen Informationen über power query in Excel eingelesen. Die registrierten Arbeitsstunden werden in einem ISO 6801 Format geliefert, mit denen man aber keine weiteren Berechnungen so einfach machen kann.
Beispiele wären:
PT2H30M
PT30M
PT4H
Mit Formeln allein in Excel bin ich nicht bis zum gewünschten Ziel gekommen. Daher würde ich in Richtung vba oder ein Script für power query gehen. Für power query habe ich bisher noch nie was gemacht, vba ist schon ein paar Jahre.
Jetzt bin ich mir nur nicht sicher, was sich mehr für sowas eignet, power query oder vba? Oder wäre es gar nur mit Formeln in Excel zu lösen?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung Format aus ISO 6801
02.02.2019 11:59:35
Günther
Moin,
ich würde das wahrscheinlich mit Power Query lösen. Aber auch eine "Zwischenbearbeitung" mit VBA sollte zielführend sein.
Gruß
Günther
AW: Änderung Format aus ISO 6801
02.02.2019 14:20:03
Rob
Dann befasse ich mich damit mal.
Danke
AW: VBA
02.02.2019 14:37:06
Fennek
Hallo,
ein Ansatz für das gezeigte Format:

Sub F_en()
With CreateObject("vbscript.regexp")
.Global = True
.ignorecase = False
.Pattern = "GT(\d{1,2}H)(\d{1,2}M)"
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Tim = 0
Ti = .Replace(Cells(i, 1), "$1 $2")
If Left(Ti, 2) = "GT" Then Ti = Mid(Ti, 3)
Tm = Split(Ti)
For t = LBound(Tm) To UBound(Tm)
If Right(Tm(t), 1) = "H" Then Tim = Val(Tm(t)) * (1 / 24)
If Right(Tm(t), 1) = "M" Then Tim = Tim + Val(Tm(t)) * (1 / (60 * 24))
Next t
Cells(i, 2) = Tim
Cells(i, 2).NumberFormat = "hh:mm"
Next i
End With
End Sub
Falls noch Tage, Wochen usw gezeigt werden, sind vermutlich Anpassungen nötig.
mfg
https://www.herber.de/bbs/user/127371.xlsm
Anzeige
AW: VBA (etwas vereinfacht)
02.02.2019 18:22:04
Fennek

Sub F_en2()
With CreateObject("vbscript.regexp")
.Global = True
.ignorecase = False
.Pattern = "(\d{1,2}H)(\d{1,2}M)"
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Ti = .Replace(Cells(i, 1), "$1 + $2")
If Left(Ti, 2) = "GT" Then Ti = Mid(Ti, 3)
Ti = Replace(Replace(Ti, "H", " / 24 "), "M", " / 1440 ")
Cells(i, 6) = Format(Evaluate(Ti), "hh:mm")
Next i
End With
End Sub

AW: VBA (etwas vereinfacht)
02.02.2019 18:48:41
Rob
Besten Dank für den Ansatz. Hatte mich jetzt erstmal nur mit power query beschäftigt, aber mit vba komme ich wohl schneller ans Ziel.
AW: VBA (etwas vereinfacht)
02.02.2019 18:48:43
Rob
Besten Dank für den Ansatz. Hatte mich jetzt erstmal nur mit power query beschäftigt, aber mit vba komme ich wohl schneller ans Ziel.
Anzeige
AW: VBA (etwas vereinfacht)
02.02.2019 23:15:02
Günther
Das ist doch klar, Rob!
Mit einer (praktisch) fertig gelieferten Lösung hast du erheblich weniger Zeitaufwand als wenn du dir das selber erarbeiten musst. - Für mich ist ein Forum in erster Linie "Hilfe zur Selbsthilfe", was auf Dauer gesehen enorm hilft, dass sich Fragesteller eher und besser "abnabeln" können und auf der erarbeiteten Basis weitere Fortschritte machen werden.
Gruß
Günther
AW: Muda
03.02.2019 10:03:10
Fennek
Der Code von gestern war typisch menschlich "warum den einfach, wenn es auch noch komplizierter geht"
Dieser Code hat die Nachteile:
- leicht zu entwickeln
- leicht zu warten, auch ohne weitreichende VBA-Kenntnisse

function F_ISO(c0)
h = instr(1,c0,"H")
m = instr(1,c0, "M")
if h then
ti = val(mid(c0,3,h-3)) / 24
else
h = 2
endif
if m then	ti = ti + val(mid(c0, h+1)) / 1440
F_ISO = format(ti, "hh:mm")
end function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige