Microsoft Access で複数の選択リスト ボックス内の選択した項目をコンマ区切り文字列として取得する方法
この記事は、Microsoft Access データベース (.mdb) ファイルまたは Microsoft Access データベース (.accdb) ファイル、および Microsoft Access プロジェクト (.adp) ファイルのいずれかに適用されます。
中程度: 基本的なマクロ、コーディング、相互運用性のスキルが必要です。
概要
この記事では、複数の選択リスト ボックスから選択した項目を取得し、選択した項目をコンマ区切りの文字列として Microsoft Access に格納する方法について説明します。
詳細情報
Microsoft Access では、フォームまたはレポートのリスト ボックスの MultiSelect プロパティの値によって、リスト ボックスが単一の選択リスト ボックスか複数選択リスト ボックスかを決定します。 複数選択リスト ボックスでは、一度に複数のリスト アイテムを選択できます。
リスト ボックスの Value プロパティを使用して、選択した項目をリスト ボックスから取得できます。 ただし、複数の選択リスト ボックスを使用し、Value プロパティを使用して選択した項目を取得しようとすると、Value プロパティは Null を返します。
選択した項目を複数の選択リスト ボックスに取得し、選択した項目をプログラムでコンマ区切りの文字列として格納できます。 これを行うには、次の手順を実行します。
Microsoft Access を起動します。
Northwind サンプル データベースを開きます。
[データベース] ウィンドウの [ オブジェクト ] セクションで、[ フォーム] をクリックします。
メモAccess 2007 で、[作成] タブの [フォーム] グループで [フォームデザイン] をクリックします。
右側のウィンドウで、[ デザイン] ビューで [フォームの作成] をダブルクリックします。
メモ Access 2007 で、この手順をスキップします。
フォームに次のコントロールを追加し、指定したコントロールのプロパティを設定します。
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"
[表示] メニューの [コード] をクリックします。
メモAccess 2007 で、[デザイン] タブの [ツール] グループで [コードの表示] をクリックします。
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
Visual Basic エディターを閉じます。
フォームを Form1 として保存します。
フォームを閉じます。
フォーム ビューで Form1 フォームを開きます。
[データベース ウィンドウ] の [オブジェクト] セクションで、[フォーム] をクリックします。
メモ Access 2007 のナビゲーション ウィンドウで、[ フォーム ] グループをクリックします。
右側のウィンドウで [ Form1] を右クリックし、[ 開く] をクリックします。
メモ Access 2007 で、 Form1 を右クリックし、[ 開く] をクリックします。
リスト ボックスで複数の項目を選択します。 これを行うには、リスト ボックス内の項目をクリックし、Ctrl キーを押しながら、リスト ボックス内のその他の項目をクリックします。
[ 選択した項目の表示] をクリックします。
複数選択リスト ボックスから選択した項目は、テキスト ボックスにコンマ区切りの文字列として表示されます。
Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示