Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2028 / 13645 ツリー ←次へ | 前へ→

【70388】時刻を簡単に入力したい 森本家 11/11/12(土) 13:32 質問[未読]
【70389】Re:時刻を簡単に入力したい UO3 11/11/12(土) 16:37 回答[未読]
【70392】Re:時刻を簡単に入力したい 森本家 11/11/12(土) 17:53 お礼[未読]
【70394】Re:時刻を簡単に入力したい kanabun 11/11/12(土) 19:06 発言[未読]
【70395】Re:時刻を簡単に入力したい UO3 11/11/12(土) 19:43 発言[未読]
【70402】Re:時刻を簡単に入力したい 森本家 11/11/13(日) 8:22 お礼[未読]
【70397】Re:時刻を簡単に入力したい 森本家 11/11/12(土) 20:29 お礼[未読]
【70421】Re:時刻を簡単に入力したい 森本家 11/11/15(火) 15:18 質問[未読]

【70388】時刻を簡単に入力したい
質問  森本家  - 11/11/12(土) 13:32 -

引用なし
パスワード
   森本家のワークシートについて

日経パソコンOnline  ●2011年10月24日号 時刻を簡単に入力したい
//npc.nikkeibp.co.jp/npc/data/data_morimoto_mm/20111024morimoto-ke.xls

これに手を加えて
時分秒をコロンで区切らずに入力できるようにしたいのですが、
やり方がわかりません。

例 「130306」と入力すると「13:03:06」とセルに入力できる
ようにしたいのです。

それから「時 = 入力値 \ 100」の中にある「\」はどのような
関数なのでしょうか。

よろしくお願いいたします。


Private Sub Worksheet_Change(ByVal Target As Range)

'時刻の入力領域を指定する
If Intersect(Target, Range("B3:C14")) Is Nothing Then Exit Sub

  '複数のセルが変更された場合は終了
  If Target.Count > 1 Then Exit Sub
  
  '入力した値を「入力値」という変数に代入
  入力値 = Target.Value
    
  '1未満の数値を入れた場合は終了
  If 入力値 < 1 Then Exit Sub
  
  '入力値を「時」「分」に分割
  時 = 入力値 \ 100
  分 = 入力値 Mod 100

  '「分」が60以上なら終了
  If 分 >= 60 Then Exit Sub

  'セルを書き換えてもイベントを発生させない
  Application.EnableEvents = False

  '「時:分」形式に変換
  Target.Value = TimeSerial(時, 分, 0)

  'セルを書き換えたときにイベントを発生させる
  Application.EnableEvents = True

End Sub

【70389】Re:時刻を簡単に入力したい
回答  UO3  - 11/11/12(土) 16:37 -

引用なし
パスワード
   ▼森本家 さん:

この種の変換が操作者にとって便利かどうか疑問なところもありますが。

>それから「時 = 入力値 \ 100」の中にある「\」はどのような
>関数なのでしょうか。

関数ではなく演算子です。VBAへるぷを参照いただきたいのですが
割り算のあまりを取得します。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim 入力値 As Long
  Dim 時 As Long
  Dim 分 As Long
  Dim 秒 As Long
  Dim 時間未満の分
  
  '時刻の入力領域を指定する
  If Intersect(Target, Range("B3:C14")) Is Nothing Then Exit Sub

  '複数のセルが変更された場合は終了
  If Target.Count > 1 Then Exit Sub
 
  '入力した値を「入力値」という変数に代入
  入力値 = Val(Target.Value)
  
  '1未満の数値を入れた場合または6桁でない場合は終了
  If 入力値 < 1 Or Len(CStr(入力値)) <> 6 Then Exit Sub
  
  '入力値を「時」「分」に分割
  時 = 入力値 \ 10000
  時間未満の分 = 入力値 Mod 10000
  分 = 時間未満の分 \ 100
  秒 = 時間未満の分 Mod 100
  '「分」「秒」が60以上なら終了
  If 分 >= 60 Or 秒 >= 60 Then Exit Sub

  'セルを書き換えてもイベントを発生させない
  Application.EnableEvents = False

  '「時:分」形式に変換
  Target.Value = TimeSerial(時, 分, 秒)

  'セルを書き換えたときにイベントを発生させる
  Application.EnableEvents = True

End Sub

【70392】Re:時刻を簡単に入力したい
お礼  森本家  - 11/11/12(土) 17:53 -

引用なし
パスワード
   ▼UO3 さん:

ありがとうございます。
解決しました。

>  '1未満の数値を入れた場合または6桁でない場合は終了
>  If 入力値 < 1 Or Len(CStr(入力値)) <> 6 Then Exit Sub

この部分は、
  If 入力値 < 1 Then Exit Sub
                   とさせていただきました。
6桁以下の時刻「8:12:34」を「081234」、「81234」と入力しても
「00:00:00」となるのを防ぐためです。

【70394】Re:時刻を簡単に入力したい
発言  kanabun  - 11/11/12(土) 19:06 -

引用なし
パスワード
   ▼UO3 さん:

ちゃちゃですが m(_ _)m

>関数ではなく演算子です。VBAへるぷを参照いただきたいのですが
>割り算のあまりを取得します。

「あまり」はMod 演算子ですよね

ヘルプより
●\ 演算子
   
2 つの数値の商を計算し、結果を整数で返します。


▼森本家 さん:

セル入力した6桁(または5桁)の数値を「時分秒」に自動で変換したい
のなら、こんな風に考えてもいいかと思います。
(\ 演算子、 Mod演算子 などを使わず時分秒に直しています。)

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("B3:C14")) Is Nothing Then Exit Sub
 
 Dim ss As String
 ss = Target.Value
 If ss Like "#####*" Then
   Application.EnableEvents = False
   With Target
     .Value = CDate(Format$(ss, "00:00:00"))
     .NumberFormatLocal = "hh:mm:ss"
   End With
   Application.EnableEvents = True
 End If
End Sub

解決後ですが... 参考まで。

【70395】Re:時刻を簡単に入力したい
発言  UO3  - 11/11/12(土) 19:43 -

引用なし
パスワード
   ▼kanabun さん:

そうでした。
スレ主さん、ごめんなさ〜い。

【70397】Re:時刻を簡単に入力したい
お礼  森本家  - 11/11/12(土) 20:29 -

引用なし
パスワード
   ▼kanabun さん:

ありがとうございます。

【70402】Re:時刻を簡単に入力したい
お礼  森本家  - 11/11/13(日) 8:22 -

引用なし
パスワード
   ▼UO3 さん:

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

【70421】Re:時刻を簡単に入力したい
質問  森本家  - 11/11/15(火) 15:18 -

引用なし
パスワード
   > If Intersect(Target, Range("B3:C14")) Is Nothing Then Exit Sub

行を増やしたとき、対象のセルが自動的に増えるように、
INDEXとCOUNTを使って式を作りましたが、エラーになります。

行は挿入と前の行をコピーして貼り付けたときの
どちらにも対応できるようにしたいのです。

申し訳ありませんが、初心者のため解決できません。

よろしくお願いいたします。

2028 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free