- 締切済み
VBA ListBoxの操作で
ListBoxに表示された項目をクリック等で 別の場所へ内容を表示することは出来るの ですが、このListboxの項目に番号を付けて その番号が押されたら(テンキー使用)そ の番号の項目を別の場所に表示させること は出来ますか。 10002 ○商店 ○○県 ↓ 番号を付ける 1 10002 ○商店 ○○県 ↓ 1をテンキーで選択 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
VBAというからにはエクセルかアクセスでしょう。エクセルとして話を進めます。 なぜこんな仕組みを利用するのか、賛成できない。入力規則やVLOOKUP関数やLISTBOXでもクリックして、Activecellにセットする方法などあります。 しかし質問のアイデアを尊重してやってみました。 シートのI1:I7に 1 東京 2 神奈川 3 静岡 4 愛知 5 三重 6 奈良 7 大阪 8 兵庫 を入れておく。 リストボックスをソノシートに1つ貼り付け、Listfillrange をI1:I7として、 そのシートのイベントに Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False n = ListBox1.List(Target - 1) ActiveCell.Offset(-1, 0) = Mid(n, 3, Len(n) - 2) Application.EnableEvents = True End Sub を入れる。 これでA1をクリックして、リストボックスを見ながら、コードを読み取り、大阪なら7エンタや東京なら1エンタなどを順次入れていく。 するとA列に 大阪 東京 兵庫 神奈川 愛知 三重 のようにセットされる。 エラーを起したら Sub test02() Application.EnableEvents = True End Sub を実行して、再度次行から入力をしてください。 On Error を入れればこれは解決するかもしれない。 テンキーでやるなら、NumLockキーを押して、ランプを点灯してやるとできた。 上記はリストボックスを使わなくても、テキストボックスでも似たことはできる。 私ならこの方式は使わない。
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 >このListboxの項目に番号を 付ける必要はないのですが、1 と 10 は区別しなければいけないですよね。 なので、[Enter]キーで確定する。という案で良ければKeyUpイベントを使って Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, _ ByVal Shift As Integer) Static s As String Dim n As Long Dim i As Long If KeyCode > 95 And KeyCode < 106 Then s = s & CStr(KeyCode - 96) Else If KeyCode = 13 Then With Me.ListBox1 n = .ListCount If Len(s) And (Len(s) <= Len(CStr(n))) Then i = CLng(s) - 1 If i < n Then MsgBox .List(i, 1) End If End If End With End If s = "" End If End Sub