今回は医薬品名で検索するコードを書いていきます。

 

医薬品新規登録画面で、医薬品名の重複チェックを行うコードを書きましたね。

 

そこで使用したAutoFilterメソッドの応用になります。それではいきましょう。

スポンサーリンク

AutoFilterメソッドの応用~部分一致検索

vba3-4-1これが完成形です。順番に解説していきましょう。

 

Dim Kensaku As String
Kensaku = txDSearch.Value

「変数Kensakuを文字列と宣言する」
「変数KensakuにはtxDSearchの値を入れる」

※Valueの代わりにTextでも可

何度もやっていますので、これはもう大丈夫ですね。

 

Worksheets(“医薬品検索結果”).Activate
ActiveSheet.Range(“A1”).CurrentRegion.Clear

これはフィルターを掛ける前の処理。医薬品新規登録画面でやりましたね。

「ワークシート医薬品検索結果をアクティブにする≒選択する(タブをクリックする)」
「アクティブシートのA1セルを起点として隣接する入力された範囲をクリアする。」

 

With Worksheets(“医薬品マスタ”)
.Range(“A2″).AutoFilter field:=1, Criteria1:=”=*” & Kensaku & “*”
.Range(“A1”).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets(“医薬品検索結果”).Range(“A1”)
End With

今回はここがキモです。ちょっと検索方法について考えましょう。

スポンサーリンク

検索方法を設定する

例えば処方オーダリングシステムであれば誤入力防止のために、先頭一致かつ3文字以上入力してヒットするように設定されているケースが多いと思います。

 

ただ先頭一致だと結構面倒くさいんですよね。例えば塩酸バンコマイシン散0.5g「マイラン」

 

これ「バンコ」とかで検索したくないですか?

 

識別記号にしてもアルファベットを入れず、数字だけで検索したい時もあるかと思います。

 

例えばキネダックの識別記号は「ONO 601」。これを「601」で検索したい場合もあるでしょう。

 

今回は処方オーダリングシステムではなく、持参薬鑑別ソフトなので、部分一致で検索できるようにしましょう。時間短縮にもつながります。

 

そして1文字から検索可能に設定します。

 

塩酸バンコマイシン散0.5g「マイラン」であれば、「塩酸」でも「バンコ」でも「マイシン」でも「マイラン」でも「バ」でも検索可能にするということです。

 

With Worksheets(“医薬品マスタ”)
.Range(“A2″).AutoFilter field:=1, Criteria1:=”=*” & Kensaku & “*”
.Range(“A1”).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets(“医薬品検索結果”).Range(“A1”)
End With

では先程のコードを翻訳すると…

「変数Kensakuに入っている文字列(txDSearchに入っている文字列)でワークシート医薬品マスタの1行目にフィルターをかけ、部分一致するものを抽出する」という意味です。

 

完全一致の場合は「Criteria1:=Kensaku」でいいんです。ですがそうなると、先ほどの塩酸バンコマイシン散0.5g「マイラン」の場合、先頭の「塩」から入力しないとヒットしません。

 

そんな面倒臭いことやってられませんよね。持参薬鑑別ってただでさえ結構時間がかかりますから。

 

部分一致の時は「Criteria1:=”=*” & Kensaku & “*”」このように書く必要があります。

 

部分一致検索するときは「*(アスタリスク)」で囲む。これは理屈抜きに覚えちゃいましょう。時間の無駄ですから。

 

If Worksheets(“医薬品検索結果”).Range(“A2”) = Empty Then
MsgBox “その医薬品の採用はありません。”, vbExclamation, “確認”
txDSearch.SetFocus
Exit Sub

これはもう既にやりましたね。

 

「もしワークシート医薬品検索結果のA2セルが空欄ならば、その医薬品の採用はありません、とメッセージボックスに表示する。そしてtxDSearchにカーソルを合わせる。」となります。

 

フィルターをかけてA2セルが空欄ならば、採用がない事を意味します。

 

それでは今回はこれで終了です。お疲れ様でした。

>>Excel VBA講座 目次へ