ワークシートのイベントでVLOOKUP関数を使ってみる

Excel VBA VLookup

シートモジュールのWorksheet_Changeイベントを使うと特定のセルの値が変更されたときだけ処理を行うことができます。

下のプログラムはセルの範囲「A8:A17」の値を変更したときにVLOOKUP関数が自動で実行されて同じシート内の「商品名と単価」の表から単価を取得して「C8:C17」のセルに表示します。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo メッセージ '商品名が違うときはメッセージを表示して終了します。

If Intersect(Target, Range("A8:A17")) Is Nothing Then

MsgBox "入力するセルの範囲が「A8:A17」ではありません。"

Exit Sub

Else 'セルの範囲「A8:A17」の値を変更したら処理を実行します。

If Target.Value = "" Then '「A8:A17」のセルが空白の場合は「C8:C17」のセルも空白になります。

Application.EnableEvents = False 'イベントループしないようにイベントを無効にします。

Target.Offset(0, 2) = ""

Application.EnableEvents = True 'イベントを有効にします。

Else

Application.EnableEvents = False

Target.Offset(0, 2) = WorksheetFunction.VLookup(Target, Range("F:G"), 2, False)

Application.EnableEvents = True

End If

End If

Exit Sub

メッセージ:

MsgBox "商品名が違います。"
Application.EnableEvents = True

End Sub

VBAを使うとセルに関数式を入れずに処理を実行できるのでエクセルの作業に慣れていない方が操作しても関数式を消してしまったりするミスがなく安心して使えると思います。(^^♪

コメント