Excel VBA質問箱 IV

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

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


5060 / 13646 ツリー ←次へ | 前へ→

【52829】WorksheetChangeイベント KOOL 07/12/5(水) 13:43 質問[未読]
【52832】Re:WorksheetChangeイベント りん 07/12/5(水) 14:34 回答[未読]
【52834】Re:WorksheetChangeイベント KOOL 07/12/5(水) 15:12 お礼[未読]

【52829】WorksheetChangeイベント
質問  KOOL  - 07/12/5(水) 13:43 -

引用なし
パスワード
   お世話になります。

現在、VBAを使って出勤簿を作成しています。

単純に計算式をセルに入力すればできるのですが、
計算式がかなり複雑なため、VBAを使いセルに値が入力されたら
時間の計算を行うようにしたいと思っています。

A1  B1    C1    D1
日  出社時間 退社時間 稼働時間
1  9:00   12:00   3:00



31

この場合ですと「出社時間と」「退社時間」が入力された時点で
「稼働時間」の計算をし、「3:00」の数字を出したいと思います。

一つのセルに値が入ったときに計算を実行するやり方はわかるのですが、
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address <> "$B$1" Then Exit Sub
  【計算式】
End Sub

2箇所が入力された場合のやり方がわかりません。
そして、それを1か月分記述するにはどうしたらよいでしょうか。

XPのExcel2003を使用しています。

どなたかご存知の方いましたら、教えてもらえないでしょうか。
宜しくお願いいたします。

【52832】Re:WorksheetChangeイベント
回答  りん E-MAIL  - 07/12/5(水) 14:34 -

引用なし
パスワード
   KOOL さん、こんにちわ。

>この場合ですと「出社時間と」「退社時間」が入力された時点で
>「稼働時間」の計算をし、「3:00」の数字を出したいと思います。

>2箇所が入力された場合のやり方がわかりません。
>そして、それを1か月分記述するにはどうしたらよいでしょうか。

入力されたセルの行と列をチェックして、さらに二つのセルの値が入っていることを確認できたら実行するようにしました。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim RR As Long, CC As Long
  RR = Target.Row: CC = Target.Column
  '
  If CC = 2 Or CC = 3 Then
   Select Case RR
     Case 2 To 32 'データが2行目から始まっているとして
      If Cells(RR, 2).Value <> 0 And Cells(RR, 3).Value <> 0 Then
        Application.EnableEvents = False 'イベント停止
        'ここで計算結果をD列に入れる
        Cells(RR, 4).Value = Cells(RR, 3).Value - Cells(RR, 2).Value
        Application.EnableEvents = True 'イベント再開
      End If
   End Select
  End If
End Sub

こんな感じです。

【52834】Re:WorksheetChangeイベント
お礼  KOOL  - 07/12/5(水) 15:12 -

引用なし
パスワード
   ▼りん さん:
りんさん、こんにちは。

回答ありがとうございます。

教えていただいたもので試してみたいと思います。

>KOOL さん、こんにちわ。
>
>>この場合ですと「出社時間と」「退社時間」が入力された時点で
>>「稼働時間」の計算をし、「3:00」の数字を出したいと思います。
>
>>2箇所が入力された場合のやり方がわかりません。
>>そして、それを1か月分記述するにはどうしたらよいでしょうか。
>
>入力されたセルの行と列をチェックして、さらに二つのセルの値が入っていることを確認できたら実行するようにしました。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim RR As Long, CC As Long
>  RR = Target.Row: CC = Target.Column
>  '
>  If CC = 2 Or CC = 3 Then
>   Select Case RR
>     Case 2 To 32 'データが2行目から始まっているとして
>      If Cells(RR, 2).Value <> 0 And Cells(RR, 3).Value <> 0 Then
>        Application.EnableEvents = False 'イベント停止
>        'ここで計算結果をD列に入れる
>        Cells(RR, 4).Value = Cells(RR, 3).Value - Cells(RR, 2).Value
>        Application.EnableEvents = True 'イベント再開
>      End If
>   End Select
>  End If
>End Sub
>
>こんな感じです。

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