[[20040523162757]] 『数字を4桁入力して時間表示』(KINKIN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数字を4桁入力して時間表示』(KINKIN)

 例えば、1530と入力したら、15:30となる様にできますか?
 但し15:30は、文字列ではなく、時間の認識ができるように!


 Option Explicit

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim 左半分 As String
 Dim 右半分 As String
 If Target.Count > 1 Then Exit Sub
 If Intersect(Target, Range("A1:C4")) Is Nothing Then Exit Sub
 If Len(Target.Value) <> 4 Then Exit Sub
 Application.EnableEvents = False
 MsgBox Prompt:=Target.Value
 左半分 = Left(Target.Value, 2)
 MsgBox Prompt:=左半分 & "左"
 右半分 = Right(Target.Value, 2)
 MsgBox Prompt:=右半分 & "右"
 Target.Value = 左半分 & ":" & 右半分
 Application.EnableEvents = True
 End Sub
 あっなぜかうまくならびましぇ〜ん(泣く)なんで?(koko)


    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim 左半分 As String
    Dim 右半分 As String
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Range("A1:C4")) Is Nothing Then Exit Sub
    If Len(Target.Value) <> 4 Then Exit Sub
    Application.EnableEvents = False
    MsgBox Prompt:=Target.Value
    左半分 = Left(Target.Value, 2)
    MsgBox Prompt:=左半分 & "左"
    右半分 = Right(Target.Value, 2)
    MsgBox Prompt:=右半分 & "右"
    Target.Value = 左半分 & ":" & 右半分
    Application.EnableEvents = True
    End Sub
やったぁ〜おまったせっ〜ならびましったぁ〜

こんなんでどうでしょうか?


 パチパチパチ、よくでけました。◎ですね、えぇ。
 しかし、ちょっと待て〜よ。
 午前8時はどう入力しまひょ?

 800でっか?それとも0800?
 試してくだはい。
 そして頭捻ってくだはい。(暖かい笑)
    (弥太郎)


そんなご指摘もあろかと、、、苦肉のさくですぅ

なんの技もありませんです。ご指導よろしくお願いいたします。

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim 左半分 As String
    Dim 右半分 As String
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Range("A1:C4")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target.NumberFormatLocal = "G/標準"
    If Len(Target.Value) = 4 Then
    MsgBox Prompt:=Target.Value
    左半分 = Left(Target.Value, 2)
    MsgBox Prompt:=左半分 & "左"
    右半分 = Right(Target.Value, 2)
    MsgBox Prompt:=右半分 & "右"
    Target.Value = 左半分 & ":" & 右半分

    ElseIf Len(Target.Value) = 3 Then
    MsgBox Prompt:=Target.Value
    左半分 = Left(Target.Value, 1)
    MsgBox Prompt:=左半分 & "左"
    右半分 = Right(Target.Value, 2)
    MsgBox Prompt:=右半分 & "右"
    Target.Value = 左半分 & ":" & 右半分

    ElseIf Len(Target.Value) = 2 Then
    MsgBox Prompt:=Target.Value
    左半分 = 0
    MsgBox Prompt:=左半分 & "左"
    右半分 = Target.Value
    MsgBox Prompt:=右半分 & "右"
    Target.Value = 左半分 & ":" & 右半分

    ElseIf Len(Target.Value) = 1 Then
    MsgBox Prompt:=Target.Value
    左半分 = 0
    MsgBox Prompt:=左半分 & "左"
    右半分 = Target.Value
    MsgBox Prompt:=右半分 & "右"
    Target.Value = 左半分 & ":0" & 右半分
    End If
    Target.NumberFormatLocal = "[h]:mm"
    Application.EnableEvents = True
    End Sub

ありゃりゃ、また並びまっしぇ~ん、、はぁ(koko)


 ぜんぜん、質問とは関係なくて申し訳ないのですが、kokoさんに。
 テキスト整形のルール
通常は入力した文字がそのまま出力されますが、以下のルールに従ってテキスト整形を行うことができます。

 空行は段落の区切りとなります。 
 HTMLのタグは書けません。 
 ----のようにマイナス4つがあると、水平線になります。 
 行頭が半角スペースで始まっていると、その段落は整形済み扱われます。プログラムを 書き込むときに使うと便利です。 
 http://www.hyuki.com/ のようなURLは自動的にリンクになります。 
と有るように半角スペースを入れると良いですよ。
(ケン)


 随分難しい式が並びましたが、下の式ではダメですか? 

=VALUE(LEFT(TEXT(1530,"0000"),2)&":"&RIGHT(TEXT(1530,"0000"),2)) 

 (桜吹雪)


 ありゃりゃ、上手いこと並んでもた〜っ。(笑)
 どんなデータが並びまへんのん?
 これでええように思いまんねんけど...な、ケンさん。
 明日早いからもう寝なアカン。
     (弥太郎)


 早よ、寝た方が良いですよ。
 でも、たまには、遊んで下さいね。お休みなさい。(ケン) 


 弥太郎さんおやすみなさいです。zzzzz

 ケンさんありがとうございます。もう少しうまくカキコ出来るようにします。

 おやすみなさい。では、またお願いします。


 TO 桜吹雪さん
TEXT関数で時間の文字列を作ったほうがネスト少なくすみますね。
=TIMEVALUE(TEXT(A1,"00"":""00"))
として表示形式は時間に設定。
結果は同じですが。
 
TO KINKINさん
入力で手数を少なくしようと思うと、
バックグラウンドで何かしなきゃいけません。
いろいろみんながんばってくれてますが、
入力した数値を時間に書き換える=マクロ
もしくは
入力したセルと別のセルへ時間を返す=関数
ということです。
(KAMIYA)


 KINKINさん、横から失礼します。
 A1に1530とあって、B1に下記の式を入れました。
 KAMIYAさんの式の応用で、=VALUE(TEXT(A1,"00""時""00""分"""))
 と作ってみましたが、最後の「""」を入れないとエラーが出ます。
 どうしてなのでしょうか?関連なので記入させていただきました。(masabou5)


 通常TEXT関数の表示形式の指定には表示形式の設定で使用する書式記号を
「"」で囲みます。日付の「yyyy/m/d」なら、「"yyyy/m/d"」の様に書きます。
今回masabou5さんのご提示の表示形式をセルで設定すると「00"時"00"分"」ですが、
これをTEXT関数で指定しようと思うとそのままでは「"」の終わりの部分が数式側で
解からなくなります。そこで、本来の「"」は「""」とふたつ連続させる事で
TEXT関数の引数としての「"」と、書式記号の本来の「"」とを区別しています。
 
 
    ↓   ↓   ↓   ↓ 書式記号の本来の「"」
" 00 "" 時 "" 00 "" 分 "" "
↑                 ↑TEXT関数の書式指定のための「"」
 
もし、「"」の数がわからなくなってきたら、&で文字列をくっつけていくほうが
安心です。
=VALUE(TEXT(A1,"00"&"時"&"00"&"分"))
 
 
ただし、masabou5さんの式に関しては下記の様にしても動作します。
TEXT関数側で時、分の漢字を文字列として認識してくれます。
 
=VALUE(TEXT(A1,"00時00分"))
 
セルの側で直接「00時00分」を表示形式で指定しても「00"時"00"分"」
と「"」を補うのが解かります。
  
ところが、
=TIMEVALUE(TEXT(A1,"00"":""00"))
これを
 
=TIMEVALUE(TEXT(A1,"00:00"))
 
この様にすると#VALUE!エラーになります。
表示形式で「00:00」という表示形式が造れないからです。
「00":"00」という表示形式ならつくれます。
これは「:」が時間の表示形式に絡む働きを持っているからであると想像します。
想像しているだけで調べてないのですが「00:00」という表示形式は
「まちがってるよん」とエクセルに叱られるので。
(KAMIYA)


 KAMIYAさん、詳細な解説、ありがとうございました。
 こういうことはHelpにも本にも出ていない、貴重な解説です。
 ただどういう訳か、2400 と入れると #VALUE!エラー が出てしまいました。
 いずれにしても大変勉強になりました。御礼申し上げます。(masabou5)


 2400を24:00とするのは、数式を=--TEXT(A1,"0!:00")、セルの書式設定、表示形式、
 ユーザー定義で、[h]:mmとしますと、そのように表示できます。     (LOOKUP)


 LOOKUPさん、ありがとうございました。(masabou5)


 LOOKUPさん、フォローありがとうございます。
24時間以上はLOOKUPさんの「--」が確実。
(KAMIYA)


(KINKIN)さんへ

ハズしていたら、スミマセン。
いろいろ難しいレス(解説)が付きましたが、もしも、わたしの以前の悩みと同じなら、

[[20040406182148]] 『時刻を簡単に入力するには』(みど)

を参照してみてください。(みど)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.