2010-12-27 3 views
1

セルに「1830」を入力してExcelに自動的に変換させたい形式18:30。Excelでは、時間をhh:mmとして表示するようにセルをカスタムフォーマットする必要がありますが、0:00と返されます。

私はカスタムフォーマットと時間を使ってセルをフォーマットしようとしましたが、動作させることができませんでした。投稿する前に自分で試してみる必要があります.hh:mmと入力してください。

私が推測していることは、VBAを使用する必要があると思いますが、これはあまりよくわかっていませんが、学習したいと思います。 "Sheet1"を右クリックし、 "ソースを表示"して、 "一般"ではなく、 "ワークシート"を確認してください。誰かがコードを貼り付けることができれば、大いに感謝しています!

ありがとうございました!

答えて

1

これは非常に簡単です。セルに18:30と入力するだけでExcelが残りの部分を処理します。

+0

が、私がしなければなりません毎回手動でコロンを入れてください。私はコロンなしで1830を入力できるようにしたいと思い、コロンを自動的に追加するのに優れています。 (コンピュータのラボで、チェックインした時間を入力して30分に制限することができます) – Tom

+1

@TomそれでExcelはあなたがそれをしたいと思っています。それは実際には1日の端数としてそれを格納するので、12:00は0.5として格納され、ちょうど時間として提示されます。あなたがExcelでロールして、あなたがしたいことをすれば、人生はもっと簡単になります。 –

2

これを行うには、まず整数値を時間値に変換するためのいくつかのルールを用意する必要があります。いくつかの質問:

誰かが7を入力した場合、それを7としたいのですか、それとも00:07に変換しますか?

誰かが1861を入力した場合は、19:01に変換しますか?

誰かが1830.5を入力した場合は、18:30:30に変換しますか?

+1

+1はExcelの入力ルールを覆す落とし穴を指摘するために+1 –

2

これはA1にのみ影響しますが、rAffectedは任意の範囲に変更できます。

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim rAffected As Range 

    'You may want to limit which cells change 
    Set rAffected = Me.Range("A1") 

    If Not Intersect(Target, rAffected) Is Nothing Then 
     Application.EnableEvents = False 
      Target.Value = TimeSerial(Left$(Target.Value2, Len(Target.Value2) - 2), Right$(Target.Value2, 2), 0) 
     Application.EnableEvents = True 
    End If 

End Sub 
+0

+1私はなぜOPが ":"と入力しないことに夢中になっているのか分かりませんが、おそらく彼のキーボードにはキーがありません。彼を圧迫するために! –

+0

合意。私は私の前にあなたの答えを投票しました。私は、他の人々が奇妙だと思うだろう私は自分自身のためにコーディングしたいくつか風変わりな迷惑/ショートカットを持っていることを認めなければならない。だから私はとにかく大声で激しく裁くことはしません。 :) –

6

このカスタム書式を作成し、選択したセルに適用されます:0 \:00

+0

これは、オペルニーズのための正解です –

4

Excelで現在の時刻を望んでいた場合は、Ctrlキー + Shiftキー + を押すことができます。をセルに入れてセルに入れる時間を取得する

0

私は同様の必要性を持っていました。ユーザーがテンキーパッドを使用して24時間入力した場合、コロンの入力は尻の痛みでした。

これは過酷ですが、私の状況ではうまくいきます。あなたがする必要があるすべては、あなたが24時間形式のいずれかを使用するセル形式です:

Public Sub Handle24HourTimeEntry(ByVal Target As Range) 
    'Converts up to 4 digits to 24 hour time 
    Dim sTime24 As String 

    Const sTIME_FORMATS As String = "|h:mm;@|h:mm|hh:mm|" 
    Const sERROR_VALUE As String = "XXXX" 
    'Valid 24hr time values: 1, 59, 135, 2035, 2359 
    'Invalid values: 2400, 90, 9999, 12345 

    If Target.Cells.Count = 1 Then ' ensure that only single cell edits get processed 
     If IsNumeric(Target.Cells.Value2) Then ' skips empty cells, labels and error conditions 
      If Not Target.Cells.HasFormula Then ' skip formulas 
       If InStr(1, sTIME_FORMATS, "|" & Target.Cells.NumberFormat & "|") > 0 Then 
       If Target.Value2 >= 1 Then ' it's not a standard time value 
        sTime24 = Format$(Target.Value2, "0000") 
        If Len(sTime24) = 4 Then 
         sTime24 = Left$(sTime24, 2) & ":" & Mid$(sTime24, 3, 2) 
         If IsDate(sTime24) Then 
          Target.Value2 = CDate(sTime24) 
         Else 
          Target.Value = sERROR_VALUE 
         End If 
        Else 
         Target.Value = sERROR_VALUE 
        End If 
       End If 
       End If 
      End If 
     End If 
    End If 

    End Sub 

私は、ブックのシート変更イベントから呼び出す:右

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

    Handle24HourTimeEntry Target 

End Sub 
関連する問題