Microsoft ExcelでVBAを使用して、リストボックスから複数の値を選択する
この記事では、複数の名前を選択してメインデータから必要なデータを取得できるリストボックスを作成する方法を学習します。
簡単な演習で理解しましょう:-すべての従業員のメールIDの詳細が記載されたデータを取得しました。
以下の手順に従って、VBAコードを使用して複数の選択肢を選択するオプションを提供するリストボックスを作成します。-
リストボックスの挿入
Excelシートにリストボックスを挿入するには、[開発者]タブに移動し、[挿入]をクリックしてから、ActiveXコントロールの下の[リストボックス]ボタンをクリックします
[開発者]タブで、デザインをアクティブ化するための[デザインモード]をクリックし、[開発者]タブの[プロパティ]をクリックすると、[プロパティ]ダイアログボックスが表示されます。
[リスト]ボックスを選択し、[プロパティ]ダイアログボックスに移動します。 [分類]タブをクリックします。 [その他]見出しの下で、[ListFillRange]プロパティに移動し、リストボックスの値を含む範囲を割り当てます。
Behaviorの見出しの下で、Multiselectプロパティを1-fmMultiSelectMultiに変更します
次に、Excelシートに2つのコマンドボタンを挿入します。[開発者]タブに移動し、[挿入]をクリックしてから、[フォームコントロール]の下の[ボタン]アイコンをクリックします
ボタンを右クリックして[テキストの編集]プロパティを選択し、2つのボタンの名前を「名前の選択解除」と「送信」に変更します。
Alt + F11キーを押して、Visual Basic Editorを開きます。新しいモジュールを追加し、以下のコードをモジュールに挿入します。
「上記のコードのコーディングには、GettingSelectedItemsとUnselectedItemsの2つのプロシージャが含まれています。プロシージャGettingSelectedItemsをSubmitボタンに割り当て、プロシージャUnselectedItemsをUnselectNamesボタンに割り当てます。
手順を割り当てたら、[開発者]タブの[デザインモード]ボタンをクリックして、デザインモードを無効にします。
ロジックの説明
この例では、ユーザーがリストボックスからL列に選択した名前の電子メールIDを取得することを目標としています。
ユーザーはリストボックスで複数の名前を選択できます。名前を選択した後、ユーザーは送信ボタンを押すと、リストボックスで選択した名前に対応する電子メールIDがExcelシートのL列に表示されます。
ユーザーがリストボックスで選択したすべての名前の選択を解除したい場合、ユーザーは「名前の選択解除」ボタンをクリックできます。
上記の目標を達成するために、Excelの公式と手順を使用しました。
手順GettingSelectedItemsは、リストボックスからK10からK23の範囲で選択された名前を取得するために記述されています。
選択した名前の電子メールIDを取得するために、次のExcel式を使用しました:-= IFERROR(VLOOKUP(K10、$ A $ 10:$ B $ 23,2,0)、 “”)
上記の数式をセルL10に挿入し、この数式をコピーしてL10からL23の範囲に貼り付けます。
この式は、A10からB23の範囲で選択された名前を検索することにより、電子メールIDを提供します。
セルのフォントと背景に同じ色を使用して、K10からK23の範囲の値を非表示にしました。
コードについては以下に従ってください
Option Explicit Sub GettingSelectedItems() 'Getting selected items in ListBox1 Application.ScreenUpdating = False 'Declaring varialbes Dim ValueSelected As String, i, r As Integer 'deleting selected values Range("K10:K23").Select Selection.ClearContents 'Defining listbox1 of sheet TestDialog With Sheets("TestDialog").ListBox1 r = 0 'Using For loop for looping through all the items in List Box For i = 0 To .ListCount - 1 'Using .selected for selecting only those value which is selected by user in listbox If .Selected(i) Then 'Assigning selected value of List Box to Column K on the sheet Cells(r + 10, 11).Value = .List(i) r = r + 1 End If Next i End With Range("L10").Select End Sub Sub UnselectedItems() 'Unselecting all the items in the list box Application.ScreenUpdating = False 'Declaring varialbes Dim ValueSelected As String, i As Integer 'Defining listbox1 of sheet TestDialog With Sheets("TestDialog").ListBox1 'Using For loop for looping through all the items in List Box For i = 0 To .ListCount - 1 'Unselecting all the items in the list .Selected(i) = False Next i End With 'Deleting data from range K10 to K23 Range("K10:K23").Select Selection.ClearContents Range("L10").Select End Sub
このブログが気に入ったら、FacebookやFacebookで友達と共有してください。
皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください