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

注意

Office 365 用リソース は、 エンタープライズ向け Microsoft 365 アプリに名前変更されています。 この変更の詳細については、 このブログの投稿を参照してください。

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

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

概要

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

詳細情報

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

リスト ボックスの 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. 右側のウィンドウで、[ フォーム 1] を右クリックし、[開く] を クリックします

      メモ Access 2007 で[ フォーム 1] を右クリックし、[開く] を クリックします

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

  6. [選択 したアイテムの表示] をクリックします

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

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