• 締切済み

VBA ListBoxの操作で

ListBoxに表示された項目をクリック等で 別の場所へ内容を表示することは出来るの ですが、このListboxの項目に番号を付けて その番号が押されたら(テンキー使用)そ の番号の項目を別の場所に表示させること は出来ますか。 10002 ○商店 ○○県 ↓ 番号を付ける 1 10002 ○商店 ○○県 ↓  1をテンキーで選択 宜しくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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)
回答No.1

こんにちは。 >この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

関連するQ&A