|
▼よぽん さん:
事前準備の手順もすべて事細かに・・というと荷が重いですが
なんとか、できるだけわかりやすいコメントとするように努力します。
1.まず、シート上のどこかに、リストボックスに表示したい内容を、縦に入力してください。
これは別シートでも構いません。
2.で、操作するシート上で。
1)開発タブをクリックしてください。
2)開発タブにある挿入を選んでください。
3)でてきたダイアログ、下半分のActiveXコントロールからリストボックスを選んでください。
(左から4番目だと思います)
4)それを、シート上の適当な場所に貼り付けます。大きさは適当に。
5)そのリストボックスを右クリック、プロパティを選んでください。
6)プロパティウィンドウの中の ListFIllRange に 1.でセットした領域をいれてください。
A1:A10 とか Sheet2!A1:A10 とか。
7)MultiSelect を 2 fmMultiSelectExtended か 1 fmMultiSelectMulti にしてください。
(これによって複数選択時の操作が異なります。詳しくは以下を参照してください)
ht p://officetanaka.net/excel/vba/tips/tips144.htm
8)Visible を False にしてください。
9)プロパティウィンドウを左上のXボタンで閉じてください。
3.開発タブ上のデザインモードが強調表示になっていますので、これをクリックしてデザインモードを終了。
リストボックスが消えましたね。
4.シートタブを右クリックしてコードの表示を選んでください。
でてきたところ(VBE画面、シートモジュール)に下にアップするコードを貼り付け、VBE画面の
左上のXボタンでVBE画面を閉じてください。
これで、任意のセルでダブルクリックすると、その右側にリストボックスが表示され、そこで選択したものが
ダブルクリックしたセル以降に転記されます。
他のセルをクリックするとリストボックスが消えます。
Option Explicit
Dim stp As Boolean
Private Sub ListBox1_Change()
Dim i As Long
Dim x As Long
Dim W As Variant
If stp Then Exit Sub
ReDim W(1 To ListBox1.ListCount)
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
x = x + 1
W(x) = .List(i)
End If
Next
If x = 0 Then Exit Sub
ReDim Preserve W(1 To x)
.TopLeftCell.Offset(, -1).Resize(x).Value = WorksheetFunction.Transpose(W)
End With
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim i As Long
Cancel = True
stp = True
With ListBox1
.Top = Target.Top
.Left = Target.Left + Target.Width
For i = 0 To .ListCount - 1
.Selected(i) = False
Next
.Visible = True
End With
stp = False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ListBox1.Visible = False
End Sub
|
|