Hallo, ich versuche mir gerade ein Trainingstagebuch auf Excel basis anzulegen. Ich Importiere mir xlsx Dateien, deren Werte ich mir in meine passene Tabelle reinkopiere.
Klappt alles wunderbar, bis auf das der Wert Dauer in der Orginal Datei in Sekunden reinkommt und die Länge in Meter.
Jetzt möchte ich, das die Dauer in "[hh:mm:ss]" angezeigt wird und die Länge in km.
Ich mach das händisch mit Zelle/86400 und das Format stelle ich dann auf Uhrzeit [37:30:55], bei den Metern Zelle /1000.
Kann man auf die Spalte mit einer Formel belegen, die das automatisch umwandelt?
Hallöchen,
eine Zelle mit einer Formel belegen, sodass bei Eingabe gleich dividiert wird, geht wohl nur mit einem Makro, dass auf die Eingabe reagiert.
Du kannst aber auch in irgendeine Zelle den Divisor schreiben. Dann tust Du diese Zelle kopieren, alle Zellen mit den umzuwandelnden Zahlen markieren und über "Inhalte einfügen" mit der Option "Dividieren" die Umwandlung ausführen.
Werde ich wohl über Makro machen müssen.
Wenn es geht melde ich mich
(07.07.2015, 20:29)derrichy schrieb: [ -> ]Werde ich wohl über Makro machen müssen.
Wenn es geht melde ich mich
Habe das ganze über VBA hinbekommen (zusammen gegooglet)
Hier mein code - geht bestimmt einfacher, aber funzt
Code:
Sub Import_Run()
Dim V As String
With Application.FileDialog(msoFileDialogFilePicker)
.Show
V = .SelectedItems(1)
End With
Application.Workbooks.OpenText Filename:=V, DataType:=xlDelimited, _
Semicolon:=True, Local:=True
ActiveSheet.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Sheets(Sheets.Count).Name = "Import"
'Zelle umrechnen von sekunden zu hh:mm:ss
Sheets("Import").Range("C3").Select
Selection.Copy
Sheets("Import").Range("C4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Import").Range("C3").ClearContents
Sheets("Import").Range("C3").FormulaLocal = "=C4/86400"
'Zelle umrechnen von meter in km
Sheets("Import").Range("E3").Select
Selection.Copy
Sheets("Import").Range("E4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Import").Range("E3").ClearContents
Sheets("Import").Range("E3").FormulaLocal = "=E4/1000"
'Bereich kopieren
Sheets("Import").Range("A3:U3").Copy
'einfügen in erste freie Zeile in ausgabe
Sheets("Run").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Sheets("Import").Select
Application.CutCopyMode = False
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
ActiveWorkbook.Save
End Sub
Der Tip mit dem Makro war es :)
Hallöchen,
ich habe Dein Makro mal etwas optimiert:
Code:
Sub Import_Run()
Dim V As String
With Application.FileDialog(msoFileDialogFilePicker)
.Show
V = .SelectedItems(1)
End With
Application.Workbooks.OpenText Filename:=V, DataType:=xlDelimited, _
Semicolon:=True, Local:=True
ActiveSheet.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
ActiveSheet.Name = "Import"
'Zelle umrechnen von sekunden zu hh:mm:ss
Range("C3").Copy
Range("C4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C3").FormulaLocal = "=C4/86400"
'Zelle umrechnen von meter in km
Range("E3").Copy
Range("E4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E3").FormulaLocal = "=E4/1000"
'Bereich kopieren
Range("A3:U3").Copy
'einfügen in erste freie Zeile in ausgabe
Sheets("Run").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
ActiveWorkbook.Save
End Sub
Im Prinzip habe ich einige Selects entsorgt, nach dem Kopieren ist das neue Blatt das aktive, da können also einige Blattnamen weg und ClearContents ist auch nicht nötig, wenn Du die Zelle mit den Formeln neu befüllst.
So, und jetzt noch ein Hinweis. Du kannst auch direkt im VBA rechnen und den Zellinhalt austauschen. Das wäre dann so:
Range("C3").Value = Range("C3").Value / 86400
Range("E3").Value = Range("E3").Value / 1000
Bevor Dir noch jemand rät, .Value auch noch einzusparen, weil das Standard ist - ja, das geht. Ich machs aber aus Prinzip meistens nicht. So weiß ich gleich, dass es um den Zellwert geht und außerdem gibt es ein paar Fälle, wo das nicht geht