VLOOKUP関数を使ってセルの値を取得する|Excel VBA |
VLOOKUP関数を使用してワークシートからデータを取得し、ユーザーフォーム上のテキストボックスに表示します。
サンプルでは、対応データの左端の列で特定の値を検索し、範囲内の対応するセルの値を取得します。テキストボックス1に1〜4の値(1〜4月)を指定すると、テキストボックス2に陰暦、テキストボックス3に祝日を表示します。
対応データは以下のとおりです。セル範囲A1:C4に「data」という名前をつけています。
また、ユーザーフォームにはテキストボックスを3個(TextBox1〜3)配置しています。
A列 | B列 | C列 |
---|---|---|
1 | 睦月 | 成人の日 |
2 | 如月 | 建国記念の日 |
3 | 弥生 | 春分の日 |
4 | 卯月 | 昭和の日 |
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim x As Long
'テキストボックス1の値を取得
x = TextBox1.Value
On Error GoTo ErrHdl
With ActiveSheet
'B列(2列目)の陰暦を表示
TextBox2.Value = _
Application.WorksheetFunction.VLookup(x, Range("data"), 2, False)
'C列(3列目)の祝日を表示
TextBox3.Value = _
Application.WorksheetFunction.VLookup(x, Range("data"), 3, False)
End With
Exit Sub
ErrHdl:
TextBox2.Value = "範囲外です"
TextBox3.Value = ""
End Sub
VLOOKUP関数の書式は、次のとおりです。
VLOOKUP(検索値, 範囲, 列番号, 検索の型)
「検索の型」は、検索値と完全に一致する値だけか、近似値を含めて検索するかを指定します。
Trueを指定するか、または省略すると、検索値が見つからない場合に検索値未満で最も大きい値を返します。
Falseを指定すると、検索値と完全に一致する値だけが検索されます。
検索値が見つからない場合はエラーが発生するので、エラー処理を行います。
セルに入力された値で検索するとき、検索値の指定はRangeオブジェクトのプロパティを省略して次のように記述します。
MsgBox WorksheetFunction.VLookup(Range("C1"), Range("A:B"), 2, False)
または、次のようにValue2プロパティを指定します。
MsgBox WorksheetFunction.VLookup(Range("C1").Value2, Range("A:B"), 2, False)
このとき、「Range("C1").Value」のようにすると、日付や通貨型の値で検索する場合に正しく検索されないことがあるので注意してください。
また、範囲の左端の列にあるデータが日付や数値の場合は、データが文字列として保存されていないことを確認してください。