Excel VBA質問箱 IV

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

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


15309 / 76738 ←次へ | 前へ→

【66908】Re:出勤簿作成でご助言お願いします
発言  かみちゃん E-MAIL  - 10/10/16(土) 14:52 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>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に値を設定するようなコードにしています。
0 hits

【66907】出勤簿作成でご助言お願いします TAC 10/10/16(土) 14:26 質問
【66908】Re:出勤簿作成でご助言お願いします かみちゃん 10/10/16(土) 14:52 発言
【66909】Re:出勤簿作成でご助言お願いします TAC 10/10/16(土) 15:13 お礼

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