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

VBA講座3-6 検索結果の詳細を表示するコードを書く

ノートパソコンとハーブ

今回はリストボックス内の検索結果を選択(クリックした時に、選択した医薬品情報の詳細を黒線の下のコントロールに表示させるコードを書きましょう。それでは早速いきます。

スポンサーリンク

リストボックスの検索結果詳細(ListIndexプロパティ)

 

vba3-5-1まずはlstKouhoをダブルクリックします。またはlstKouhoを「右クリック→コードの表示」でもOKです。

 

vba3-5-2上のコードが表示されましたね。意味は「lstKouhoをクリックした時に以下の動作を行う」ですね。

 

ここには「リストボックスに表示された医薬品名をクリックすると、クリックした薬品の詳細が下のテキストボックス、コンボボックスに表示される」というコードを書いてきます。下の画像を見て下さい。

 

vba3-5-3これが完成形です。それでは1行ずつ解説していきましょう。

 

Dim TargetRow As Integer

「変数TargetRowを数字と宣言する。」

 

TargetRow = lstKouho.ListIndex + 2

「変数TargetRowはリストボックスlstKouhoのリストインデックス+2の値である。」ちょっとよくわかりませんね。

 

ListIndexについて説明しましょう。ListIndexは「リストボックスに表示された候補の何行目を選択しているか」を教えてくれます。

 

コンボボックスでも説明しましたが、ExcelVBAの1行目は「0」とカウントするのでしたね。

 

つまり…
1行目をクリックしたら「ListIndex=0」
2行目をクリックしたら「ListIndex=1」
3行目をクリックしたら「ListIndex=2」
となります。

 

今回は使用しませんが、クリックされていない状態(検索直後)は「ListIndex=-1」となることも覚えておいて下さい。

 

TargetRow = lstKouho.ListIndex + 2

もう一度このコードに戻ります。このコードでは、リストボックスlstKouhoの1行目をクリックしたらTargetRowは2となりますね。

ではなぜここで2を足す必要があるのでしょうか?それは次のコードを見ればわかります。

 

With Worksheets(“医薬品検索結果”)

txtDname.Text = .Range(“A” & TargetRow).Value
txtGname.Text = .Range(“B” & TargetRow).Value
txtKigou.Text = .Range(“C” & TargetRow).Value
txtEffect.Text = .Range(“D” & TargetRow).Value
cboKubun.Value = .Range(“E” & TargetRow).Value
cboTani.Value = .Range(“F” & TargetRow).Value
txtSei1.Text = .Range(“G” & TargetRow).Value
txtSei2.Text = .Range(“H” & TargetRow).Value
txtSei3.Text = .Range(“I” & TargetRow).Value
txtSei4.Text = .Range(“J” & TargetRow).Value
txtKou1.Text = .Range(“K” & TargetRow).Value
txtKou2.Text = .Range(“L” & TargetRow).Value
txtKou3.Text = .Range(“M” & TargetRow).Value
txtKou4.Text = .Range(“N” & TargetRow).Value

End With

2行目を見てください。
=の左側は「テキストボックスtxtDnameのテキストは」ですね。
=の右側は「ワークシート医薬品検索結果のA列変数TargetRow行の値」

 

先ほど説明したようにリストボックスの1行目を選択したらListIndexは0、そしてTargetRowは2となります。

 

つまりリストボックスの1行目を選択した場合、txtDnameにA2セルの値を入れるという意味になります。

 

vba3-5-4ワークシート医薬品検索結果の1行目は見出しになっています。リストボックスの1行目の医薬品情報はワークシート医薬品検索結果の2行目に表示されていますね。だからListIndex(=0)に2を足してあげればいいことになります。

 

同じようにリストボックスの2行目(ListIndex=1)の医薬品情報はワークシート医薬品検索結果の3行目(ListIndex=1+2)に表示されていますね。リストボックスとワークシート医薬品検索結果をリンクさせるため2を足したというわけです。

 

次の行

txtGname.Text = .Range(“B” & TargetRow).Value

txtGname(一般名)はB列に載っていますね。だからAをBに変えるだけです。簡単ですね。同じようにtxtKou4までコードを書きましょう。

 

vba3-5-5最後に後1行だけコードを書いて終わりにしましょう。ボタンbtnCloseをダブルクリックします。

 

vba3-5-6閉じるボタンを押すと、ユーザーフォームが閉じるように「Unload Me」を書いておいて下さい。

 

それでは今回はここで終了です。お疲れ様でした。次回は一般名で検索するコードについてお話しします。
次の講座

スポンサーリンク

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

関連記事

管理人も使用!パソコン作業が捗ります!

サイト内検索