病院で処方された薬や病気についてわかりやすく解説します

VBA講座3-4 医薬品名で検索するコードを書く

ノートパソコンとハーブ

今回は医薬品名で検索するコードを書いていきます。医薬品新規登録画面で、医薬品名の重複チェックを行うコードを書きました。そこで使用したAutoFilterメソッドの応用になります。それではいきましょう。

スポンサーリンク

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

 

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

 

Dim Kensaku As String
Kensaku = txDSearch.Value(Text)

「変数Kensakuを文字列と宣言する」
「変数KensakuにはtxDSearchの値を入れる」
何度もやっていますので、これはもう大丈夫ですね。

 

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文字から検索可能に設定します。「塩酸」でも「バンコ」でも「マイシン」でも「マイラン」でも「バ」でも検索可能にします。

 

では翻訳すると…

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

 

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

 

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

 

部分一致の時は「Criteria1:=”=*” & Kensaku & “*”」このように書く必要があります。部分一致検索するときは「*」で囲む。これは理屈抜きに覚えちゃいましょう。時間の無駄です。

 

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

これはもう既にやりましたね。
「もしワークシート医薬品検索結果のA2セルが空欄ならば、その医薬品の採用はありませんとメッセージボックスに表示する。txDSearchにカーソルを合わせる。」ですね。フィルターをかけてA2セルが空欄ならば採用がない事を意味します。

 

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

スポンサーリンク

こちらの記事もおすすめです

関連記事

サイト内検索