How to quickly move items between two list boxes in Excel?
Have you ever tried to move the items from one list box to another one list boxes as you need as below screenshot shown? Here I will talk about this operation in Excel.
There is no built-in function can help you finish the job, but I have a VBA code can do a favor.
1. Firstly, you need to create a list of data which will be shown as the items in list boxes in a new sheet which called Admin_Lists.
2. Then select these data and go to the Name box to give them a name ItemList. See screenshot:
3. Then in a sheet which will contains the two list boxes, click Developer > Insert > List Box(Active X Control), and draw two list boxes. See screenshot:
If the Developer tab is hidden your ribbon, How to show/display developer tab in Excel 2007/2010/2013 Ribbon? this article will tell you how to show it.
4. Then click Developer > Insert > Command Button(Active X Control), and draw four buttons between two list boxes. See screenshot:
Now to rename the four command buttons with new names.
5. Select first command button, click Properties, and in the Properties pane, give a name BTN_moveAllRight to it, and type >> into the textbox beside Caption. See screenshot:
6. Repeat step 5 to rename last three command button with below names, and also type the different arrow into the captions. See screenshot:
7. Right click at the sheet name which contains the list boxes and command buttons, and select View Code from the context menu. See screenshot:
8. Copy and paste below macro code to the Module script then save the code and close the Microsoft Visual Basic for Applications window. See screenshot
VBA: Move items between two list boxes
Private Sub Worksheet_Activate() 'UpdatebyExtendoffice20171117 Dim xCell As Range Dim xRg As Range Set xRg = Sheets("Admin_Lists").Range("ItemList") Me.ListBox1.Clear Me.ListBox2.Clear With Me.ListBox1 .LinkedCell = "" .ListFillRange = "" For Each xCell In xRg If xCell <> "" Then .AddItem xCell.Value End If Next xCell End With Me.ListBox1.MultiSelect = fmMultiSelectMulti Me.ListBox2.MultiSelect = fmMultiSelectMulti End Sub Private Sub BTN_MoveSelectedLeft_Click() Call moveSigle(Me.ListBox2, Me.ListBox1) End Sub Private Sub BTN_MoveSelectedRight_Click() Call moveSigle(Me.ListBox1, Me.ListBox2) End Sub Private Sub BTN_moveAllLeft_Click() Call moveAll(Me.ListBox2, Me.ListBox1) End Sub Private Sub BTN_moveAllRight_Click() Call moveAll(Me.ListBox1, Me.ListBox2) End Sub Sub moveAll(xListBox1 As Object, xListBox2 As Object) Dim I As Long For I = 0 To xListBox1.ListCount - 1 xListBox2.AddItem xListBox1.List(I) Next I xListBox1.Clear End Sub Sub moveSigle(xListBox1 As Object, xListBox2 As Object) Dim I As Long For I = 0 To xListBox1.ListCount - 1 If I = xListBox1.ListCount Then Exit Sub If xListBox1.Selected(I) = True Then xListBox2.AddItem xListBox1.List(I) xListBox1.RemoveItem I I = I - 1 End If Next End Sub
9. Then go to another sheet then go back to the sheet contains the list boxes, now you can see the list data has been list in first one list box. And click at the command buttons to move the items between two list boxes.