' [403.xls] ' [Module1] のコード '★★☆ 二つのリストボックス間でデータを移動する ☆★★ Option Explicit Sub start() UserForm1.Show End Sub ' [UserForm1] のコード Option Explicit Private Sub CommandButton1_Click() With ListBox1 '現在選択されている行を調べるためにフォーカスを与える .SetFocus '選択行のデータを相方のリストボックスの選択行の直前にコピー ListBox2.AddItem .Value, ListBox2.ListIndex '選択行のデータを削除 .RemoveItem (.ListIndex) '相方のリストボックスにデータがひとつの場合 If ListBox2.ListCount = 1 Then '相方のリストボックスの1行目のデータを選択状態にする ListBox2.Selected(0) = True Else '相方のリストボックスの今コピーしたデータを選択状態にする ListBox2.Selected(ListBox2.ListIndex - 1) = True End If '相方のリストボックスにデータがあるのが確定するので 'そのリストボックスを操作するボタンを使用可能にする CommandButton2.Enabled = True '自分側のリストボックスのデータが無いときは自分自身を使用不可にする If .ListCount = 0 Then CommandButton1.Enabled = False End With 'ユーザーフォームのリフレッシュ DoEvents End Sub '上と同じ事を逆にしている Private Sub CommandButton2_Click() With ListBox2 .SetFocus ListBox1.AddItem .Value, ListBox1.ListIndex .RemoveItem (.ListIndex) If ListBox1.ListCount = 1 Then ListBox1.Selected(0) = True Else ListBox1.Selected(ListBox1.ListIndex - 1) = True End If CommandButton1.Enabled = True If .ListCount = 0 Then CommandButton2.Enabled = False End With DoEvents End Sub Private Sub UserForm_Initialize() 'コントロールの初期設定 With ListBox1 'リストボックスないにスクロールバーが出ないように幅を指定する .ColumnWidths = "2cm" 'データを格納 .AddItem "AAAA" .AddItem "BBBB" .AddItem "CCCC" .AddItem "DDDD" .AddItem "EEEE" .AddItem "FFFF" .AddItem "GGGG" .AddItem "HHHH" '1番目のデータを選択 .Selected(0) = True End With '最初は片方のリストボックスにはデータが無いのでひとつのボタンを使用不可にする CommandButton2.Enabled = False ListBox2.ColumnWidths = "2cm" Me.Caption = "リストボックス間でデータ移動" End Sub