今回は医薬品名で検索するコードを書いていきます。
医薬品新規登録画面で、医薬品名の重複チェックを行うコードを書きましたね。
そこで使用したAutoFilterメソッドの応用になります。それではいきましょう。
スポンサーリンク
AutoFilterメソッドの応用~部分一致検索
Kensaku = txDSearch.ValueWorksheets(“医薬品検索結果”).Activate
ActiveSheet.Range(“A1”).CurrentRegion.ClearWith Worksheets(“医薬品マスタ”)
.Range(“A2″).AutoFilter field:=1, Criteria1:=”=*” & Kensaku & “*”
.Range(“A1”).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets(“医薬品検索結果”).Range(“A1”)
End WithIf Worksheets(“医薬品検索結果”).Range(“A2”) = Empty Then
MsgBox “その医薬品の採用はありません。”, vbExclamation, “確認”
txDSearch.SetFocus
Exit Sub
End If
これが完成形です。それでは順番に解説していきましょう。
Kensaku = txDSearch.Value
「変数Kensakuを文字列と宣言する」
「変数KensakuにはtxDSearchの値を入れる」
※Valueの代わりにTextでも可
変数の宣言は何度もやっていますので、これはもう大丈夫ですね。
ActiveSheet.Range(“A1”).CurrentRegion.Clear
これはフィルターを掛ける前の処理。医薬品新規登録画面でやりましたね。
「ワークシート医薬品検索結果をアクティブにする≒選択する(タブをクリックする)」
「アクティブシートのA1セルを起点として隣接する入力された範囲をクリア(値を削除)する。」
.Range(“A2″).AutoFilter field:=1, Criteria1:=”=*” & Kensaku & “*”
.Range(“A1”).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets(“医薬品検索結果”).Range(“A1”)
End With
今回の講座はここがキモです。ちょっと検索方法について考えてみましょう。
スポンサーリンク
検索方法を設定する
処方オーダリングシステムであれば誤入力防止のために、先頭一致かつ3文字以上入力してヒットするように設定されているケースが多いと思います。
例えば抗菌薬(抗生物質)の塩酸バンコマイシン散0.5g「マイラン」があるのですが、これを検索する場合、基本的に「エンサ」「塩酸バ」等で入力する必要があります。
これって結構面倒くさいんですよね。これ「バンコ」とかで検索したくないですか?
薬品名だけでなく、識別記号にしてもアルファベットを入れず、数字だけで検索したい時もあるかと思います。
例えば糖尿病治療薬のキネダック錠50mgの識別記号は「ONO 601」。これを「601」で検索したい場合もあるでしょう。
今回は処方オーダリングシステムではなく、持参薬鑑別システムということで利便性を優先したいと思います。
つまり先頭一致ではなく、部分一致で検索できるようにしましょう。更に1文字から検索可能に設定します。これで大幅な時間短縮にもつながります。
具体的には、塩酸バンコマイシン散0.5g「マイラン」の場合、「塩酸」でも「バンコ」でも「マイシン」でも「マイラン」でも「バ」でも検索可能にするということです。
それでは先ほどのコードに戻りますね。以下を翻訳すると…
.Range(“A2″).AutoFilter field:=1, Criteria1:=”=*” & Kensaku & “*”
.Range(“A1”).CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets(“医薬品検索結果”).Range(“A1”)
End With
「変数Kensakuに入っている文字列(txDSearchで入力した文字列)でワークシート医薬品マスタの1行目にフィルターをかけ、部分一致するものを抽出し、ワークシート医薬品検索結果のA1セルに貼り付ける」という意味になります。
完全一致の場合は「Criteria1:=Kensaku」でいいんです。ですがそうなると、先ほどの塩酸バンコマイシン散0.5g「マイラン」の場合、先頭の「塩」から入力しないとヒットしません。
そんな面倒臭いことやってられませんよね。持参薬鑑別ってただでさえ結構時間がかかりますから。
ちなみに部分一致の時は「Criteria1:=”=*” & Kensaku & “*”」このように書く必要があります。
部分一致検索するときは「*(アスタリスク)」で囲む。これは理屈抜きに覚えちゃいましょう。
MsgBox “その医薬品の採用はありません。”, vbExclamation, “確認”
txDSearch.SetFocus
Exit Sub
これはもう既にやりましたね。
「もしワークシート医薬品検索結果のA2セルが空欄ならば、その医薬品の採用はありません、とメッセージボックスに表示する(枠に確認と表示)。そしてtxDSearchにカーソルを合わせる。」となります。
フィルターをかけてA2セルが空欄ならば、採用がない事を意味します。
その場合は入力し直すわけですから、txDSearchにカーソルを合わせてあげるとシステム利用者が助かる、ということですね。
何度も言いますが、システムを作る時は常に使う人のことを考えて。思いやりが大切です。
それでは今回はこれで終わりにしましょう。お疲れ様でした。
次回は検索結果をリストボックスに表示するコードについて解説します。