Excelを教えていますと、Excelを扱う人がすべて関数が扱えるわけではなく、中にはどうしても理解できない人もいます。
知識としてはわかるけど、実践となると急にできなくなることもあります。
そういう方のほうが、実はやりたいことは明確なことも多く、ジレンマに陥ります。
そのようなストレスがあることは避けたいと思いまして、関数知識がなくても関数を扱えるようになるツールがあるといいかなと思い、VBA識者の方への提案となります。
VLOOKUP関数を関数理解なしで作成するツール
今回は、VLOOKUP関数での例を提示します。
せっかくなので、VLOOKUP関数だけだともったいないので(関数ウィザードと変わらない)、VLOOKUP関数と同時に設定されるものを考えてみます。
- VLOOKUP関数
- IFERROR関数
- 一覧からリスト入力の入力規則
- 選択値と一致した一覧表の箇所を色を付ける条件付き書式
- などなど
作成手法
今回は、コード作成時間の短縮のために、これらを一旦マクロの記録で記録し、VBAコードを作成しました。
それからフォームを作成し、そのフォームに貼り付けて必要な箇所をフォームから入力できるようにしました。
工夫したのは、範囲選択された中で、始まりと終わりのセル位置の列のアルファベットと行の数値に分離するところです。
実際に作成したもの
実際に作成したものは次の通りです。
フォーム
- 項目名:一覧表範囲: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
実働するもの
まとめ
このようなツールをどう運用すべきか、リボンに入れればいいのか、ショートカットキーで呼び出すのか、またはもっと他の方法があるのか、まだまだ検討の余地があります。
もっと入力しやすいような、フォーム自体がチュートリアルのようになっている必要もあるかもしれません。
機能についてももっと違ったアプローチがあるかもしれません。
VBAに関してももっと良いコードになる可能性も十分あるでしょう。
パソコンは何でもそうだと思うのですが、一定数の努力しても苦手な人がいます。それがたとえとてもマイノリティな数でも、このようなツールで支援し、デキル人と変わらないパソコン操作ができればいいなと思っています。