趣味でExcel VBAが使える/VLOOKUPの大文字と小文字の区別趣味でExcel VBAが使える

技術者に師事したことはないですが、ある意味プロフェシッショナルかもしれない楽々アート会(趣味で絵を描くサークル)会員の私が、ソフト制作初心者のために蘊蓄を語ります。楽々アート会のページへ(←我々の絵画作品も掲載しています)

8.Excel VBAでプログラミング(2)

[VLOOKUP関数について]

まずはVBA関係ありません。Excelの関数VLOOKUPについて説明します。
一覧表の列に記載されたデータの中に特定のデータが存在するかどうかを検証できるのがVLOOKUP関数です。
VLOOKUP
上の例で言えば、一覧表のデータ(A6:B10)の1列目(A6~A10)を検索して、指定のレベル(B1)が存在すればその2列目(例ではA6でヒットしているのでB6)を表示する…というものです。この関数では指定のレベルが存在するかどうかですので幾つあるか?とかはわかりませんが、それは置いておくとしてVLOOKUPは以下のような特性?もあります。
VLOOKUP
つまりが小文字があるかを検索しようとしても大文字と区別してくれないって訳です。僕が一昨年派遣されてた森ノ宮の某大手通信企業では、ネットにあるVlookupSpecialなるコードをVBAにコピペして使用されてました~全くのオリジナル通りではないですが以下のようなものです。
Public Function VLtest(ByVal 検査値 As String, _
ByVal 範囲 As Range, ByVal 列番号 As Integer) As String
Dim r, i As Integer
r = 範囲.Rows.Count '範囲で囲った列数が入る
i = 1
VLtest = "×"
For i = 1 To r
If 範囲.Cells(i, 1).Value = 検査値 Then
VLtest = 範囲.Cells(i, 列番号).Value
Exit Function
End If
Next
End Function

この関数の結果です。
VLOOKUP
1行目のVLtestは関数名で何でも構いません。例の(ネット上の)VlookupSpecialはVlookupSpecialという関数名です。
…その後()に囲まれた部分が引数で、検査値と範囲、列番号を要求しています。戻り値は文字列です。
つまりが範囲で囲まれたセルの1列目を1桁目、2桁目~と順に見てゆき、検査値と合致したら列番号で指定したセルの値(列番号が2なら合致したセルの隣の値)を返して関数を抜ける~最後までヒットしなければ“×”を返すというコードです。ところがこの(ネットにある)関数は僕の検索しようとしたリストでは使えませんでした。理由は範囲の列数がIntegerで宣言されているため、32,768行を超えるリストでは正しく動作しないからです。100万件はともかく、わずか33,000件でアウトになるコードって…
2行目はDim r, i As longとすべき、これで2,147,483,648件までOKってことになります…億は必要ないかもですが。

逆にVBAで関数の機能を記述したことで、この関数をチョイといじれば、ヒットした件数やら、ヒットしたのが何行目のデータか?やらを表示することも出来ます。ヒットした分の2行目をリストアップすることも出来ますね。…要は自由に関数が作れる、ってことでもあります。

[アドインを使う]

自作した関数をいちいちVisual Basic画面で呼び出すのではなくアドインに登録して使用することが出来ます。まず、記載したVLtestを記述したBookをxlam形式で保存(VLtest.xlam)します。新規のエクセルシートからファイル~オプションと選択、アドインを選択します。管理:Excel アドインとなってる隣の[設定]ボタンを押し、[参照]からVLtest.xlamを指定するとこの関数を使用できます。関数(ファイル)の置く場所は既定のディレクトリ(C:\Users\ユーザー\AppData\Roaming\Microsoft\AddIns)でも良いし、別途決めておいても良いでしょう。


■ 記事一覧

絵画の一歩絵画初心者のために蘊蓄を語るページ
1.絵を描く
音楽の一歩楽器初心者のために蘊蓄を語るページ
1.ギターを弾く
プログラミングの一歩ソフト制作初心者のために蘊蓄を語るページ
1.プログラミングとは
2.JAVAを使う
3.JAVAでプログラミング(1)
4.JAVAでプログラミング(2)
5.JAVAでプログラミング(3)
6.PHPでプログラミング(1)
7.Excel VBAでプログラミング(1)
8.Excel VBAでプログラミング(2)