- 締切済み
ListBoxを数字Keyで選択したい
お世話になります。 OSはWin XP Home、Excel2002を使用しています。 EXCELのsheet1にCommandButton1とListBox1を貼り付けて以下のようにコーディングしています。 'Listbox1表示 Private Sub CommandButton1_Click() ListBox1.Visible = True End Sub '使用者はリストボックスのダブルクリックでリストボックスの入力ができる。 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ListBoxDataSet End Sub '使用者はリストボックスでマウスで選択後EnterKeyで入力ができる。 Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Then ListBoxDataSet KeyAscii = 0 '←これがないとなぜかEXCELが異常終了するので注意! End If End Sub 'リストボックスで選択したリストを、シートの選択セル(単一)に転記し、 'その後でリストボックスを非表示 Sub ListBoxDataSet() ActiveCell.Value = ListBox1.Text ListBox1.Visible = False End Sub さらにListBox1のプロパティのListFillRangeはA1:B100としており、A列は1から100の連番、B列は上から順に「中山」、「常盤」、「高島」・・・98番目には「吉岡」という名前があります。 現在A列の数字は表示以外の機能は持っておらず、ダブルクリックか、マウスで1クリックで項目選択をした後にEnterKeyで名前だけがActivecellに転記されるようになっています。 100件もの項目をひとつのリストボックスには表示しきれず、スクロールバーで探すのも大変なので、例えば数字Keyで1と打てばすぐに「中山」が選択され、さらにEnterKeyで転送される、98と打てば「吉岡」が選択され・・・という風に機能追加したいのです。 いろいろ調べましたが、方法が分かりませんでした。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17070)
質問の延長線上の答えでなくて済みません。 質問もコードの仕組みも長く複雑なのですが、短くならないか考えました。その代わり幼稚です。社内のユーザー限定とか気の置けない範囲の使用なら良いのではと、ヒントとして出します。 ・シートにボタンを1つ貼りつける。 ・データをセットしたいセルをアクチブにしておく。 ・表をエクセルのシートSheet2のA列に持つ。 (名前50順や頻出順にソートしておくのが良いかと思う)。 Private Sub CommandButton1_Click() Dim sa(100) Dim sh2 As Worksheet Set sh2 = Worksheets("sheet2") For i = 1 To 100 sa(i) = sh2.Cells(i, "A") s = s & " " & Format(i, "000") & sh2.Cells(i, "A") If i Mod 10 = 0 Then s = s & Chr(10) End If Next i x = InputBox(s) ActiveCell = sa(x) End Sub Inputboxのメッセージは1024文字までらしい。 メッセージ文は見やすくはないがスペースで調節して配置を工夫をすれば改善の余地はある。 毎回配列に読みこむ無駄をしてますが、100件程度なら応答スピードはOLDパソコンでも大丈夫です。 これもOPEN時に上記文字列sをStatic変数でセットしたりすれば、改善できそうに思ったが、複雑になるので。 Formの上にキーボード配列のように名前を載せればカッコ良いと思いましたが、またクリックで値を取れれば良いと思いましたが、とりあえず。
お礼
imogasiさん、 ご回答ありがとうございます。早速教えていただいたコードを試させていただきました。このような方法もあるのですね。参考にさせていただきます。 でも、できれば質問の内容を実現したいと思っております。自分でもいろいろ調べていますが、いまのところ苦戦しています。