#703 コンボボックスで何番目の項目が選択されたかを取得するには? フォーム、VBA

フォームに配置されたコンボボックスコントロールにおいて、ある項目が選択されたとき、その内容が何かは「Value」プロパティ(実際には省略可)を調べることで取得することができます。

次のプログラム例では、商品コードと商品名をドロップダウンリストに表示する、「cbo商品選択」という名前のコンボボックスで項目が選択されたとき(=更新後処理イベント発生時)、その選択値を「txt選択結果」というテキストボックスに代入しています。

Private Sub cbo商品選択_AfterUpdate()
'商品選択コンボボックスの更新後処理

  Me!txt選択結果 = Me!cbo商品選択

End Sub

実行例:



  • 上記の代入式は「Me!txt選択結果商品コード = Me!cbo商品選択.Value」と同義です。「.Value」という記述は省略しています。
  • 代入式では、正確にはコンボボックスの「連結列」プロパティに指定されている列番号のデータ値が取得されます。ここではそれを「1」としていますので、「商品コード」がテキストボックスに代入されることになります。

一方、選択された項目のデータそのものではなく、”ドロップダウンリストの何番目の項目が選択されたか”を取得したい場合には、「ListIndex」プロパティの値を調べます。

このプロパティの値は、先頭項目を「0」として数えます。もし1番目の項目が選択されれば「0」、5番目の項目が選択されれば「4」の値が返されます。

次のプログラム例では、「cbo商品選択」で項目が選択されたとき、その「ListIndex」プロパティ値(=選択項目の番号 - 1)を「txt選択リスト番号」というテキストボックスに代入しています。

Private Sub cbo商品選択_AfterUpdate()
'商品選択コンボボックスの更新後処理

  Me!txt選択結果 = Me!cbo商品選択
  Me!txt選択リスト番号 = Me!cbo商品選択.ListIndex

End Sub

実行例:
  • ドロップダウンリストの先頭項目を選択したとき



  • ドロップダウンリストの5番目の項目を選択したとき




なお、「ListIndex」プロパティ値が「0」であれば「先頭の項目が選択された」とすぐに判別できますが、もし『最後の項目が選択されたかどうか』を調べたいときには、「ListIndex」プロパティと「ListCount」プロパティを併用します。
「ListCount」プロパティにはドロップダウンリストの”全項目数”(70項目あれば”70”)が格納されていますので、もし「ListIndexの値 = ListCountの値 - 1」であれば最後の項目が選択されたと判断できます。

Private Sub cbo商品選択_AfterUpdate()
'商品選択コンボボックスの更新後処理

  With Me!cbo商品選択
    Me!txt選択結果 = .Value
    Me!txt選択リスト番号 = .ListIndex
    If .ListIndex = .ListCount - 1 Then
      MsgBox "最後の項目が選択されました!"
    End If
  End With

End Sub

    ※ここでは「Me!cbo商品選択」という語句が何度も出てくるので、「With」ステートメントで記述を簡略化しています。

実行例:





【ヒント】
上記で説明したすべてのプロパティやプログラムは、「リストボックス」コントロールでもそのまま使うことができます。

| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved