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

 

それでは早速いきます。

スポンサーリンク

リストボックスの検索結果詳細~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を足す必要があるのでしょうか?それは次のコードを見ればわかります。

スポンサーリンク

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.Text = .Range(“A” & TargetRow).Value

=の左側は「テキストボックス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」を書いておいて下さい。

 

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

 

次回は一般名で検索するコードについてお話しします。

>>Excel VBA講座 目次へ