エクセルバージョン
マイクロソフト365
本日はエクセルのVLOOKUP関数の取得と一緒の処理をVBAで実現させていきたいと思います。
そんなに難しくはないので是非ためしてみてください(*゚▽゚)ノ
それではいってみましょう!
Menu
今回使用するサンプル
VLOOKUP関数が赤枠のE2セルとF2セルに入力されており、E5セルは検査値を入力するセルです。
今回はこのような形式と同じになるようにVBAで実行できるようにします。
作成手順
・ChangeイベントでE5セルの値が変わったら処理をする(シートモジュール)
・データの最終行を取得(標準モジュール)
・for文とif文で繰り返し処理をしながら条件指定でセルを1つずつ検索(標準モジュール)
大まかにこんな感じでVBAでE5セルの値が変更されると、E2セルとF2セルに寿司と値段が取得表示できます。
VLOOKUP関数のような検索をVBAで実行
下記のE5セル(検査値)の値が変更されたらVBAを実行させます。
Changeイベント作成(シートモジュール)
まずはE5セル(検査値)の値が変わった時のみ、VBAを実行させるという事をします。
シートモジュールを開き下記を選択します。
シートモジュールの開き方が分からない方は → シートモジュール
・Worksheetを選択します。
・Changeを選択します。
下記のコードをシートモジュールにコピペします。
1 2 3 4 5 6 7 8 9 10 11 | Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E5")) Is Nothing Then Exit Sub '① Else Call サンプル1 '② End If End Sub |
【解説】
➀E5セル以外の値が変更された場合は処理を終了(Exit Sub)させます。
➁E5セルの値が変更されたら処理を実行します。(サンプル1をCallして実行)
これでシートのE5セルの値が変更された場合のみ、VBAで処理を実行させることが可能になります(*^^)v
標準モジュールに処理内容を記述
次に標準モジュールに処理の内容を記述していきたいと思います。
標準モジュールの開き方が分からない方は → 標準モジュール
下記のコードを標準モジュールにコピペします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Option Explicit '定数 Const SUSHI As Integer = 2 '寿司の列番号 Const PRICE As Integer = 3 '値段の列番号 Sub サンプル1() Dim lastRow, numRow As Integer '① lastRow = Cells(Rows.Count, 1).End(xlUp).Row '② For numRow = 1 To lastRow '③ If Cells(numRow, 1) = Range("E5") Then '④ '⑤ Range("E2") = Cells(numRow, SUSHI) Range("F2") = Cells(numRow, PRICE) Exit For'⑥ Else '➆ Range("E2") = "" '➇ Range("F2") = "" End If Next End Sub |
【解説】
➀変数を宣言します。
➁データの最終行番号を取得します(For文のカウンタの終了値に使用するため)
➂繰り返し処理For文を使用してデータの行数分1つずつ検索をしていきます。
(検索内容は➃)
➃IF文でA列の変数numRowの行の値と、E5セルの値が同じだったら処理を実行できるようにします。
➄IF条件が合致(true)したら、E2セルとF2セルに変数numRowの行の寿司と値段を表示させます。
➅IF条件が合致の場合は、繰り返し処理を抜けます(Exit For)。この処理を実施しないと次の繰り返し処理が行われてしまい、E2,F2セルの値が消去されてしまいます。
➆A列の変数numRowの行の値と、E5セルの値が違う場合の処理をさせます。
➇IF条件が合致せずその他(false)の場合は、E2セルとF2セルを空白処理を実施し値を消去します。
※一番上の定数Constで寿司(SUSHI)と値段(PRICE)の列番号を変更できます。
【結果】
E5(検査値)セルの値を変更すると、自動でE2(寿司)とF2(値段)セルの値が自動で瞬時に取得できます\(^^)/
まとめ
VBAでもVLOOKUP関数のような処理は簡単に実現できるのでこの機会に試してみてくださいネ(★‿★)
以上です。