今回は医薬品名で検索するコードを書いていきます。
医薬品新規登録画面で、医薬品名の重複チェックを行うコードを書きましたね。
そこで使用したAutoFilterメソッドの応用になります。それではいきましょう。
スポンサーリンク
AutoFilterメソッドの応用~部分一致検索
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「マイラン」。
これ「バンコ」とかで検索したくないですか?
識別記号にしてもアルファベットを入れず、数字だけで検索したい時もあるかと思います。
例えばキネダックの識別記号は「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行目にフィルターをかけ、部分一致するものを抽出する」という意味です。
完全一致の場合は「Criteria1:=Kensaku」でいいんです。ですがそうなると、先ほどの塩酸バンコマイシン散0.5g「マイラン」の場合、先頭の「塩」から入力しないとヒットしません。
そんな面倒臭いことやってられませんよね。持参薬鑑別ってただでさえ結構時間がかかりますから。
部分一致の時は「Criteria1:=”=*” & Kensaku & “*”」このように書く必要があります。
部分一致検索するときは「*(アスタリスク)」で囲む。これは理屈抜きに覚えちゃいましょう。時間の無駄ですから。
MsgBox “その医薬品の採用はありません。”, vbExclamation, “確認”
txDSearch.SetFocus
Exit Sub
これはもう既にやりましたね。
「もしワークシート医薬品検索結果のA2セルが空欄ならば、その医薬品の採用はありません、とメッセージボックスに表示する。そしてtxDSearchにカーソルを合わせる。」となります。
フィルターをかけてA2セルが空欄ならば、採用がない事を意味します。
それでは今回はこれで終了です。お疲れ様でした。