2017-06-28 13 views
1

私は日付の列を持っています。私は日付部分を削除する必要があります。私は単純にそれを行うマクロを実行したい。マクロを記録するときは、削除してから停止し、次の行でそれを実行すると、以下の値が得られます。どのようにグローバル化するので、私はこの作業をすべての行で実行できますか?日付を時間だけに変換する方法?

2017-06-26 14:41:00 

マクロはこれである:ここでは

Sub Macro9() 
' 
' Macro9 Macro 
' 

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

時間だけを表示するようにセルをフォーマットするのはなぜですか?カスタムフォーマット 'h:mm:ss AM/PM' – tigeravatar

+0

私は時間だけ持ってきたときに機能しませんでした。(AMPMはやっていませんでした) –

+0

いつも正しい機能を使うことができます。たとえば、= right(a1,8)です。これは、時間の後に空白がないと仮定し、時間は常に8文字を要します。これらの前提が満たされない場合でも、あなたが望むものを手に入れることができます。軍事的な時間からAM/PMに変換しますか?もしそうなら、別のアプローチをとる必要があります。 – Jarom

答えて

1

は、あなたがする探しているものを達成するための簡単なマクロです。私はあなたが軍事的な時間から午前/午後に変換したいと思っていました。スプレッドシートに合わせてセルの位置を調整する必要があります。これは、列Aのすべての値を丁度午前/午後の時間に変えて、列挙した列でそれらを吐き出すだけです。すべての行をループするのではなく、同じロジックで独自の単一入力関数を定義することもできます。 、1は、おそらく他のより良い動作します

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 

アプリケーションに応じて:ここで

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 

は、あなたがこれを処理するカスタム関数を作ることができる方法です。

+0

ありがとうございます。何故、hr <12が型の不一致に失敗するのか –

+0

コードにエラーがあり、編集し直しました。 – Jarom

関連する問題