|
こんにちは。かみちゃん です。
>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に値を設定するようなコードにしています。
|
|