一括チェックのコード
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim i As Long
Dim j As Long
Dim r As Long
Dim c As Long
Dim flg As Boolean
If Target.Row = 3 And Target.Value = "規格" Then
Cancel = True
For j = Target.Row + 1 To Cells(Rows.Count, Target.Column).End(xlUp).Row
For i = 1 To Columns.Count
If Worksheets("規格一覧").Cells(1, i).Value = _
Cells(j, Target.Column - 1).Value Then
c = i
Exit For
End If
Next i
If c = 0 Then
Cells(j, Target.Column).Interior.ColorIndex = 3
Else
r = 2
Do Until Worksheets("規格一覧").Cells(r, c).Value = ""
If Worksheets("規格一覧").Cells(r, c).Value = _
Cells(j, Target.Column).Value Then
flg = True
Exit Do
End If
r = r + 1
Loop
If flg Then
flg = False
Else
Cells(j, Target.Column).Interior.ColorIndex = 6
End If
c = 0
End If
Next j
End If
End Sub
※規格入力フォームのUserForm_Initializeプロシージャを流用したコードです。
赤字の部分が、追加・変更されたコードです。
「…うん!よさそうだぞ。
最初に、Target.Row = 3 And Target.Value = "規格" と、3行目(見出し行)かつ、
規格の列がダブルクリックされたかどうか判定するんだ。
それ以外がダブルクリックされたときは、チェック処理は行わない」
星くんがフンフンと、鼻を鳴らします。
「変数jを追加して、For…Nextステートメントで、
材料費明細リストに規格が入力されている分だけ、繰り返し処理をする。
規格一覧表で探す材質は、今回は"Cells(j, Target.Column - 1).Value"と、
ループ中の規格の左隣りにある材質だ。
見つからなかったときは、"Cells(j, Target.Column).Interior.ColorIndex = 3"で、
規格のセルの背景色を赤にする。
あとは、"オーダー表 追加アイテム確認システム"と同じことをするだけだ。
規格一覧表の中に規格が見つかったときは、変数flgに"True"の値が入力される。
このときは、何もすることがないから、"flg = False"で、変数flgを初期値に戻す。
変数flgに"True"の値が入力されていないときは、規格一覧表に規格が見つからなかったとき、
すなわち"誤った規格が入力されている"ケースだから、
"Cells(j, Target.Column).Interior.ColorIndex = 6"で、セルの背景色を黄色にする」