Microsoft Access で複数の選択リスト ボックス内の選択した項目をコンマ区切り文字列として取得する方法

この記事は、Microsoft Access データベース (.mdb) ファイルまたは Microsoft Access データベース (.accdb) ファイル、および Microsoft Access プロジェクト (.adp) ファイルのいずれかに適用されます。

中程度: 基本的なマクロ、コーディング、相互運用性のスキルが必要です。

概要

この記事では、複数の選択リスト ボックスから選択した項目を取得し、選択した項目をコンマ区切りの文字列として Microsoft Access に格納する方法について説明します。

詳細情報

Microsoft Access では、フォームまたはレポートのリスト ボックスの MultiSelect プロパティの値によって、リスト ボックスが単一の選択リスト ボックスか複数選択リスト ボックスかを決定します。 複数選択リスト ボックスでは、一度に複数のリスト アイテムを選択できます。

リスト ボックスの Value プロパティを使用して、選択した項目をリスト ボックスから取得できます。 ただし、複数の選択リスト ボックスを使用し、Value プロパティを使用して選択した項目を取得しようとすると、Value プロパティは Null を返します。

選択した項目を複数の選択リスト ボックスに取得し、選択した項目をプログラムでコンマ区切りの文字列として格納できます。 これを行うには、次の手順を実行します。

  1. Microsoft Access を起動します。

  2. Northwind サンプル データベースを開きます。

  3. [データベース] ウィンドウの [ オブジェクト ] セクションで、[ フォーム] をクリックします。

    メモAccess 2007 で、[作成] タブの [フォーム] グループで [フォームデザイン] をクリックします。

  4. 右側のウィンドウで、[ デザイン] ビューで [フォームの作成] をダブルクリックします。

    メモ Access 2007 で、この手順をスキップします。

  5. フォームに次のコントロールを追加し、指定したコントロールのプロパティを設定します。

    List Box
    ----------------------------------------------------
    Name : NamesList
    Row Source Type : Table/Query
    Row Source : SELECT First Name FROM Employees
    Multi Select : Extended
    Width : 3.5"
    Height : 0.75"
    
    Text Box
    -----------------------
    Name : mySelections
    Width : 3.5"
    Height : 0.25"
    
    Command Button
    ----------------------------------
    Name : testmultiselect
    Caption : Display Selected Items
    Width : 1.375"
    Height : 0.3"
    
    Command Button
    ----------------------
    Name : ClrList
    Caption : Clear List
    Width : 1.375"
    Height : 0.3"
    
  6. [表示] メニューの [コード] をクリックします。

    メモAccess 2007 で、[デザイン] タブの [ツール] グループで [コードの表示] をクリックします。

  7. Visual Basic エディターに次のコードを貼り付けます。

Option Compare Database
Option Explicit

Private Sub Form_Current()
    Dim oItem As Variant
    Dim bFound As Boolean
    Dim sTemp As String
    Dim sValue As String
    Dim sChar As String
    Dim iCount As Integer
    Dim iListItemsCount As Integer

sTemp = Nz(Me!mySelections.Value, " ")
    iListItemsCount = 0
    bFound = False
    iCount = 0

Call clearListBox

For iCount = 1 To Len(sTemp) + 1
    sChar = Mid(sTemp, iCount, 1)
        If StrComp(sChar, ",") = 0 Or iCount = Len(sTemp) + 1 Then
            bFound = False
            Do
                If StrComp(Trim(Me!NamesList.ItemData(iListItemsCount)), Trim(sValue)) = 0 Then
                    Me!NamesList.Selected(iListItemsCount) = True
                    bFound = True
                End If
                iListItemsCount = iListItemsCount + 1
            Loop Until bFound = True Or iListItemsCount = Me!NamesList.ListCount
            sValue = ""
        Else
            sValue = sValue & sChar
        End If
    Next iCount
End Sub

Private Sub clearListBox()
    Dim iCount As Integer

For iCount = 0 To Me!NamesList.ListCount
        Me!NamesList.Selected(iCount) = False
    Next iCount
End Sub

Private Sub testmultiselect_Click()
    Dim oItem As Variant
    Dim sTemp As String
    Dim iCount As Integer

iCount = 0

If Me!NamesList.ItemsSelected.Count <> 0 Then
        For Each oItem In Me!NamesList.ItemsSelected
            If iCount = 0 Then
                sTemp = sTemp & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            Else
                sTemp = sTemp & "," & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            End If
        Next oItem
    Else
        MsgBox "Nothing was selected from the list", vbInformation
        Exit Sub  'Nothing was selected
    End If

Me!mySelections.Value = sTemp
End Sub

Private Sub clrList_Click()
    Call clearListBox
    Me!mySelections.Value = Null
End Sub

  1. Visual Basic エディターを閉じます。

  2. フォームを Form1 として保存します。

  3. フォームを閉じます。

  4. フォーム ビューで Form1 フォームを開きます。

    1. [データベース ウィンドウ] の [オブジェクト] セクションで、[フォーム] をクリックします。

      メモ Access 2007 のナビゲーション ウィンドウで、[ フォーム ] グループをクリックします。

    2. 右側のウィンドウで [ Form1] を右クリックし、[ 開く] をクリックします。

      メモ Access 2007 で、 Form1 を右クリックし、[ 開く] をクリックします。

  5. リスト ボックスで複数の項目を選択します。 これを行うには、リスト ボックス内の項目をクリックし、Ctrl キーを押しながら、リスト ボックス内のその他の項目をクリックします。

  6. [ 選択した項目の表示] をクリックします

複数選択リスト ボックスから選択した項目は、テキスト ボックスにコンマ区切りの文字列として表示されます。

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。