2017-06-28 5 views
1

Ich habe eine Spalte mit Datum Uhrzeit. Ich muss den Datumsteil entfernen. Ich möchte einfach ein Makro ausführen, das das tun wird. Wenn ich ein Makro aufnehme, führe das Löschen aus und stoppe dann, führe es dann in der nächsten Zeile aus, es gibt den Wert unten an. Wie wird man globalisieren, damit ich diese Aufgabe in allen Zeilen ausführen kann?Wie konvertiert man Datum zu Zeit?

2017-06-26 14:41:00 

das Makro ist dies:

Sub Macro9() 
' 
' Macro9 Macro 
' 

' 
    ActiveCell.FormulaR1C1 = "2:41:00 PM" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
End Sub 
+0

Warum nicht nur die Zelle formatieren, um nur die Zeit anzuzeigen? Benutzerdefiniertes Format 'h: mm: ss AM/PM' – tigeravatar

+0

Es funktionierte nicht, wenn ich nur die Zeit hereinbrachte (die AMPM tat nicht) –

+0

Sie können immer nur die richtige Funktion verwenden. Zum Beispiel = rechts (a1,8). Dies setzt voraus, dass nach der Zeit keine Leerzeichen mehr vorhanden sind und die Zeit immer 8 Zeichen umfasst. Wenn diese Annahmen nicht erfüllt werden, können Sie immer noch bekommen, was Sie wollen, es ist nur ein wenig mehr integer. Möchten Sie es von der Militärzeit in AM/PM umwandeln? Wenn ja, müssen Sie einen anderen Ansatz wählen. – Jarom

Antwort

1

Hier ist ein einfaches Makro ist zu erreichen, was Sie zu tun suchen. Ich nahm an, dass Sie von militärischer Zeit zu AM/PM konvertieren wollten. Sie müssen die Speicherorte der Zellen an Ihre Tabelle anpassen. Dies wird nur durch alle Werte in Spalte A gehen und sie in nur AM/PM-Zeit umwandeln und sie in Coulmn B ausspucken. Anstatt alle Zeilen zu durchlaufen, könnten Sie auch Ihre eigene einzelne Eingabefunktion mit derselben Logik definieren .

Sub test() 

Dim dt As String 
Dim tm As String 
Dim hr As String 
Dim row_ct As Integer 

row_ct = Range("A1").End(xlDown).Row 


For i = 1 To row_ct 
    dt = Cells(i, 1) 
    tm = Right(Cells(i, 1), 8) 
    hr = Left(tm, 2) 

    If hr < 12 Then 
     tm = tm & " AM" 
    ElseIf hr = 12 Then tm = tm & " PM" 
    ElseIf hr > 12 and hr - 12 < 10 then tm = 0 & (Left(tm, 2) - 12) & Right(tm, 6) & " PM" 
    Else: tm = left(tm, 2) - 12 & right(tm, 6) & " PM" 
    End If 

    Cells(i, 2) = tm 
Next i 


End Sub 

Hier ist, wie Sie eine benutzerdefinierte Funktion vornehmen können, die diese Griffe:

Function tm(date_time) 

If Left(Right(date_time, 8), 2) < 12 Then 
    tm = Right(date_time, 8) & " AM" 
ElseIf Left(Right(date_time, 8), 2) = 12 Then tm = Right(date_time, 8) & " PM" 
ElseIf Left(Right(date_time, 8), 2) > 12 Then tm = Left(Right(date_time, 8), 2)- 12 & Right(date_time, 6) & " PM"` 
End If 

End Function 

Abhängig von der Anwendung, wird man wahrscheinlich besser funktionieren als die andere.

+0

Danke. Jede Idee, warum die hr <12 bei Typ Mismatch fehlschlägt –

+0

Ich habe einen Fehler im Code gefunden und bearbeitet es jetzt erneut versuchen. – Jarom

Verwandte Themen