| 
    
     |  | こんにちは。かみちゃん です。 
 >1. 関数で作成した時のようにセルに値が入る(変更される)と
 >  瞬時に自動計算なされ表示したいのですが、
 >  「SheetChange」イベントを利用してどこのセルの内容が変更
 >  されてもそのタイミングで「1日」〜「31日」分の残業時間を
 >  再計算させようと思ってます。
 >  この考え方で正しい(効率が悪くない?)でしょうか?
 
 効率がよい、もしくは、正しいかどうかはわかりませんが、
 以下のような感じの処理になるかと思います。
 
 Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If IsEmpty(Target.Value) Then Exit Sub
 If Intersect(Target, Range("A1:B2")) Is Nothing Then Exit Sub
 
 MsgBox "処理します"
 End Sub
 
 このコードは、シートモジュールに記述して、
 A1:B2のいずれかひとつのセルに、値を入力すると動きます。
 複数のセルを一括して入力したり、値を消去したりした場合は、動かないようにしています。
 
 >2. 年月入力欄を作成し、その値より自動的に「日」列には「1日」〜
 >  「○○日」、「曜日」列にはそれぞれの曜日が入るような設定は
 >  できますでしょうか?
 
 Sub Sample()
 Dim dt As Date, dtStart As Date, dtEnd As Date
 Dim v(1 To 31, 1 To 2)
 Dim i As Long
 
 dtStart = CDate(Format(Range("A1").Value, "yyyy/m/1"))
 For dt = dtStart To DateAdd("m", 1, dtStart) - 1
 i = i + 1
 v(i, 1) = Day(dt)
 v(i, 2) = Format(dt, "aaa")
 Next
 
 Range("A2:B32") = v
 End Sub
 
 このコードは、標準モジュールに記述してもいいのですが、
 アクティブシートのA1セルに 2010/10/1 という形式で入力して、
 A2:B32に値を設定するようなコードにしています。
 
 |  |