|
▼nonoka さん:
こんにちは
そういうことでしたら
・まずブックを開いたときに処理する。
(一度処理すれば、その日のうちは2度目に開いたときの処理は不要ですが、まぁ、そこは横着に)
・で、万が一、K3の値をマニュアルで入力する場合があったときも考え、K3 と K10以降のK列の値が
変更になれば処理。
ちょっと難点がなきにしもあらず。
夜中に作業をしていて、日付がかわったあと、シートに何かの変化があれば、K3の値がかわりますが
その時には、イベントをキャッチできませんので、処理は行われません。
ThisWorkbookモジュールに。(対象のシート名は、とりあえず"Sheet1"としていますが
実際のものに直してください。
(★コードを書いただけで動かして確認してません。不備あれば指摘願います)
Option Explicit
Const shName As String = "Sheet1" '実際のものに
Private Sub Workbook_Open()
Call Sample(Columns("K"))
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim r As Range
If Not Sh Is Sheets(shName) Then Exit Sub
Set r = Intersect(Target, Sh.Columns("K"))
If r Is Nothing Then Exit Sub
Call Sample(r)
End Sub
Sub Sample(Target As Range)
Dim c As Range
Dim a As Variant
Dim r As Range
Dim bDt As Double
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheets(shName)
bDt = .Range("K3").Value2
For Each c In Target.Cells
If c.Row = 3 Or c.Row >= 10 Then
With c.EntireRow
.Range("L1").ClearContents
If IsDate(c.Value) Then
Set r = .Range("N1:AA1")
a = Application.Match(bDt, r, 0)
If IsNumeric(a) Then
.Range("L1").Value = Target.Parent.Cells(9, a + 13).Value
Else
a = Application.Match(.Range("K1").Value2, r, 0)
If IsNumeric(a) Then
.Range("L1").Value = Target.Parent.Cells(9, a + 13).Value
Else
If .Range("K1").Value2 < bDt Then
.Range("L1").Value = "未投入"
Else
If .Range("M1").Value2 < bDt Then .Range("L1").Value = "完了"
End If
End If
End If
End If
End With
End If
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
|
|