1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VLOOKUP関数を関数知識がなくても入力できるようになるツール

Posted at

Excelを教えていますと、Excelを扱う人がすべて関数が扱えるわけではなく、中にはどうしても理解できない人もいます。
知識としてはわかるけど、実践となると急にできなくなることもあります。
そういう方のほうが、実はやりたいことは明確なことも多く、ジレンマに陥ります。
そのようなストレスがあることは避けたいと思いまして、関数知識がなくても関数を扱えるようになるツールがあるといいかなと思い、VBA識者の方への提案となります。

VLOOKUP関数を関数理解なしで作成するツール

今回は、VLOOKUP関数での例を提示します。
せっかくなので、VLOOKUP関数だけだともったいないので(関数ウィザードと変わらない)、VLOOKUP関数と同時に設定されるものを考えてみます。

  • VLOOKUP関数
  • IFERROR関数
  • 一覧からリスト入力の入力規則
  • 選択値と一致した一覧表の箇所を色を付ける条件付き書式
  • などなど

作成手法

今回は、コード作成時間の短縮のために、これらを一旦マクロの記録で記録し、VBAコードを作成しました。
それからフォームを作成し、そのフォームに貼り付けて必要な箇所をフォームから入力できるようにしました。
工夫したのは、範囲選択された中で、始まりと終わりのセル位置の列のアルファベットと行の数値に分離するところです。

実際に作成したもの

実際に作成したものは次の通りです。

フォーム

image.png
ボックスの一覧は次の通りです。

  • 項目名:一覧表範囲:RefEditで作成、Nameは「一覧範囲」
  • 項目名:元の値のセル:RefEditで作成、Nameは「元の値」
  • 項目名:出力セル:RefEditで作成、Nameは「出力」
  • 項目名:一覧の何列目?:テキストボックスで作成、Nameは「列」
    RefEditの使い方はこちら

フォームに対するVBA

Private Sub CommandButton1_Click()

Dim str As String
Dim 一覧範囲lt As String
Dim 一覧範囲rt As String
Dim 一覧範囲ld As String
Dim 一覧範囲rd As String
Dim リスト範囲 As String

str = Mid(一覧範囲, InStr(1, 一覧範囲, "$") + 1, 500)
一覧範囲lt = Mid(str, 1, InStr(1, str, "$") - 1)
str = Mid(str, InStr(1, str, "$") + 1, 500)
一覧範囲rt = Mid(str, 1, InStr(1, str, ":") - 1)
str = Mid(str, InStr(1, str, "$") + 1, 500)
一覧範囲ld = Mid(str, 1, InStr(1, str, "$") - 1)
str = Mid(str, InStr(1, str, "$") + 1, 500)
一覧範囲rd = str

リスト範囲 = "=$" & 一覧範囲lt & "$" & 一覧範囲rt & ":$" & 一覧範囲lt & "$" & 一覧範囲rd

    Range(元の値).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=リスト範囲
        .IgnoreBlank = True
        .InCellDropdown = True
        .IMEMode = xlIMEModeNoControl
        .ShowInput = True
        .ShowError = True
    End With
    Range(出力).Formula = "=IFERROR(VLOOKUP(" & 元の値 & "," & 一覧範囲 & "," & 列 & ",FALSE),"""")"
    Range("C2:D8").Select
    Application.CutCopyMode = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=" & 元の値 & "=$" & 一覧範囲lt & 一覧範囲rt
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.8
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

実働するもの

data5125.gif

まとめ

このようなツールをどう運用すべきか、リボンに入れればいいのか、ショートカットキーで呼び出すのか、またはもっと他の方法があるのか、まだまだ検討の余地があります。
もっと入力しやすいような、フォーム自体がチュートリアルのようになっている必要もあるかもしれません。
機能についてももっと違ったアプローチがあるかもしれません。
VBAに関してももっと良いコードになる可能性も十分あるでしょう。
パソコンは何でもそうだと思うのですが、一定数の努力しても苦手な人がいます。それがたとえとてもマイノリティな数でも、このようなツールで支援し、デキル人と変わらないパソコン操作ができればいいなと思っています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?