Excel VBA質問箱 IV

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

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


36652 / 76738 ←次へ | 前へ→

【45265】Re:セルへの書き込み方法
回答  Kein  - 06/12/16(土) 22:00 -

引用なし
パスワード
   えっとですね・・。まず、かみちゃんさんとしては
「ユーザー定義関数の作り方を知っているような人なら、イベントマクロ
ぐらい知っているはず」と憶測して、"なのになぜ関数にこだわるのか"を
連発したのだと思います。でもVBAの知識などは、私でも何でも知っている
わけではないので、たぶん質問者さんも「目的とする処理はイベントマクロ
で全てやってしまえる」ということを知らなかったのだと思います。
それをもう少し早く察知していれば、関数を捨ててイベントマクロの適当な
サンプルを提示し、解決へ導くことができたのではないかと思います。
そのようなわけで、遅ればせながら私がマクロを提示してみます。
以下のコードをシートモジュールに入れ、必ず"C1→D1"の順で"時刻"
(:で時間と分を区切る形)を入力してみて下さい。つまりC1には始業時刻、
D1には終業時刻を入れるのです。すると"あたかも関数で計算したかのごとく"
A1に就労時間、B1に残業時間が表示されます。もちろん、規定の就業時間は
8時間ということにしています。お試しください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Atm As Variant, Btm As Variant
  Dim Stm As Variant, Etm As Variant
  Dim Flg As Boolean
 
  With Target
   If .Address <> "$D$1" Then Exit Sub
   If .Count > 1 Then Exit Sub
   If WorksheetFunction.Count(Range("C1:D1")) < 2 Then
     MsgBox "C1:D1には時刻を入力して下さい", 48
     Flg = True: GoTo ReLine
   End If
   On Error Resume Next
   Stm = TimeValue(.Offset(, -1).Text)
   Etm = TimeValue(.Text)
  End With
  If Err.Number = 13 Then
   MsgBox "C1:D1には時刻を入力して下さい", 48
   Flg = True: GoTo ReLine
  End If
  On Error GoTo 0
  If Stm > Etm Then
   MsgBox "始業時刻が終業時刻より後になっています", 48
   Flg = True: GoTo ReLine
  End If
  Atm = Etm - Stm
  If Hour(Atm) > 8 Then
   Btm = Atm - TimeValue("08:00:00")
   Atm = TimeValue("08:00:00")
  End If
ReLine:
  Application.EnableEvents = False
  If Flg Then
   Target.Offset(, -1).Resize(, 2).Clear
  Else
   Range("A1").Value = Format(Atm, "h:mm")
   Range("B1").Value = Format(Btm, "h:mm")
  End If
  Application.EnableEvents = True
End Sub
0 hits

【45244】セルへの書き込み方法 06/12/16(土) 16:43 質問
【45245】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 16:58 発言
【45247】Re:セルへの書き込み方法 06/12/16(土) 17:13 質問
【45248】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 17:23 発言
【45249】Re:セルへの書き込み方法 06/12/16(土) 18:35 質問
【45251】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 18:42 発言
【45253】Re:セルへの書き込み方法 06/12/16(土) 19:04 質問
【45254】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 19:14 発言
【45257】Re:セルへの書き込み方法 06/12/16(土) 19:27 質問
【45260】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:02 発言
【45259】Re:セルへの書き込み方法 06/12/16(土) 19:50 発言
【45261】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:07 発言
【45265】Re:セルへの書き込み方法 Kein 06/12/16(土) 22:00 回答
【45266】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 22:08 発言
【45246】Re:セルへの書き込み方法 ichinose 06/12/16(土) 17:12 発言
【45250】Re:セルへの書き込み方法 06/12/16(土) 18:40 お礼
【45252】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 18:44 発言
【45255】Re:セルへの書き込み方法 06/12/16(土) 19:19 質問
【45256】Re:セルへの書き込み方法 ichinose 06/12/16(土) 19:25 発言
【45258】Re:セルへの書き込み方法 06/12/16(土) 19:43 質問
【45263】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:11 発言
【45267】Re:セルへの書き込み方法 ichinose 06/12/17(日) 0:16 発言
【45262】Re:セルへの書き込み方法 かみちゃん 06/12/16(土) 20:09 発言

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