コンボボックスの何行目が選択されているかを取得する

f:id:accs2014:20161218225233p:plain:right:w400

 ListIndexプロパティにより、コンボボックス(及びリストボックス)の何行目が選択されたのかを知ることができます。
 例として「駅コードcmb」という名前のコンボボックスとともにテキストボックスを置き、そのコントロールソースを以下のようにします。

=[駅コードcmb].[ListIndex]


f:id:accs2014:20161218224457p:plain:right:w400

 フォームビューです。コンボボックスで何も選択されていない状態での値は-1となります。


f:id:accs2014:20161218224456p:plain:right:w400

 コンボボックスで8行目を選択してみると…


f:id:accs2014:20161218224455p:plain:right:w400

 値は7となります。
 このように、ListIndexの値は実際に選択された行の順番から1を引いた値となります(行番号が0から始まるといった方がわかりやすいかもしれません)。


f:id:accs2014:20161218224454p:plain:right:w400

 ちょっとした応用です。
 コンボボックスで選択された行の2列目の値を表示するテキストボックス(コントロースソースは「=[駅コードcmb].[Column](1)」です。列番号も0から始まりますので、2列目を指定する場合は列の番号を「1」とします)とともに、次のようなコントロールソースを持つテキストボックスを設けます。

=IIf([駅コードcmb].[ListIndex]=-1,"",[駅コードcmb].[Column](([駅コードcmb].[ListIndex])+1,1))

 このテキストボックスは、コンボボックスで選択された行の「次の行」の2列目の値を表示します。
 ちょっと複雑ですがIIf関数はコンボボックスが空白のときに備えたものであり、重要なのはこのうちColumnプロパティを用いた以下の部分です。

[駅コードcmb].[Column](([駅コードcmb].[ListIndex])+1,1)

 これによりコンボボックスにより選択された行の次の行の2列目の値を取得できます。
 Column(m,n)はコンボボックスのm行n列目の値を表し(くどいですが番号はいずれも0からはじまります)、行を指定する部分にListIndexプロパティを用いています。
 また、内側のカッコが余計に見えますが省略するとうまくいきません。


f:id:accs2014:20161218224513p:plain:right:w400

 改めてコンボボックスの10行目を選択してみます。


f:id:accs2014:20161218224512p:plain:right:w400

 上のテキストボックスでは10行目の2列目の値が、そして下の方のコンボボックスでは11行目の2列目の値が表示されているのがわかります。