トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 揺るぎない力編: 第15話「一括チェック機能も追加しよう!」3/4 :一括チェックのコード

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第15話 「一括チェック機能も追加しよう!」

一括チェックのコード

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"で、セルの背景色を黄色にする」

一覧にもどる