• 締切済み

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と打てば「吉岡」が選択され・・・という風に機能追加したいのです。 いろいろ調べましたが、方法が分かりませんでした。 よろしくお願いします。

みんなの回答

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

質問の延長線上の答えでなくて済みません。 質問もコードの仕組みも長く複雑なのですが、短くならないか考えました。その代わり幼稚です。社内のユーザー限定とか気の置けない範囲の使用なら良いのではと、ヒントとして出します。 ・シートにボタンを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の上にキーボード配列のように名前を載せればカッコ良いと思いましたが、またクリックで値を取れれば良いと思いましたが、とりあえず。

min128mini
質問者

お礼

imogasiさん、 ご回答ありがとうございます。早速教えていただいたコードを試させていただきました。このような方法もあるのですね。参考にさせていただきます。 でも、できれば質問の内容を実現したいと思っております。自分でもいろいろ調べていますが、いまのところ苦戦しています。

関連するQ&A

  • TextをEnterKeyで選んだ後にLISTBOXを非表示

    OSはWin XP home EXCEL2002を使用しています。 ActivecellにリストボックスのデータをEnterKeyで入れた後にリストボックスの表示をFalseにしたいと思っています。以下のようにすると必ずEXCELが落ちてしまいます。 Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Then ActiveCell.Value = ListBox1.Text ListBox1.Visible = False End If End Sub 何がいけないのかよく分かりません。悪い部分の解説もできればお願いしたいと思います。よろしくお願いします。

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

  • ListBoxに値を追加していくには。

    Private Sub CommandButton31_Click() ListBox12.ColumnCount = 5 ListBox12.ColumnWidths = "4.0cm;4.0cm;2.0cm;3.0cm;2.0cm" End Sub Private Sub TextBox175_Change() SetList End Sub Private Sub TextBox176_Change() SetList End Sub Private Sub TextBox177_Change() SetList End Sub Private Sub TextBox178_Change() SetList End Sub Private Sub TextBox179_Change() SetList End Sub Private Sub SetList() ListBox12.Clear ListBox12.AddItem TextBox175.Text ListBox12.List(0, 1) = TextBox176.Text ListBox12.List(0, 2) = TextBox177.Text ListBox12.List(0, 3) = TextBox178.Text ListBox12.List(0, 4) = TextBox179.Text End Sub ここで、TextBox175~179の値をコマンドボタン1を押す度、 ListBox12の最終行の直下に挿入されていくようにしたいです。 列はそのままです。 1行目 (0,1),(0,2),(0,3),(0,4) 2行目 (1,1),(1,2),(1,3),(1,4) 3行目 (2,1),(2,2),(2,3),(2,4) どのようにやればいいでしょうか。

  • リストボックス

    すいません以下の処理に困っております。 リストボックスで値を取得して他のリストボックスにその値を 出力したいのですがまったくできません。 <例> リストボックス1 a b c リストボックス2(上で選択した値を出力) a ちなみに構文は、 ------------------------------------------------------------ Private Sub btn選択_Click() ListBox2.Text = ListBox1.Text 'ListBox1.ListIndex + 1 & ": " & ListBox1.Text End Sub Private Sub CommandButton1_Click() End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "スケジューラ" .AddItem "データ変換" .AddItem "DWH Server" .AddItem "PPP Server" .AddItem "ファイヤーウォール" .AddItem "暗号オプション" End With End Sub ---------------------------------------------------- 初心者でまったくできません。 御教授をお願いします。

  • リストボックスで選択した一行を一度にセルに入力したい

    Xcel2003でマクロ作成中です。以下のコードで、リストボックスで一行を選択しました。この選択した一行のデータのうち2個のデータをC列とD列に入力することができました。が、E列にもデータを入力したいのです。が色いろやってみましたができません。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.list(ListBox2.ListIndex, 1) End If End With Unload UserForm3 End Sub 上のコードにどう追加記入したらよろしいでしょうか?

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • ListBoxで表示されたデータの取得方法は

    お世話になります。 標準フォーム から以下のリストボックスを表示して、無事シートの一覧が表示されています。 Private Sub UserForm_Initialize() Dim lastRow As Long Dim myData Worksheets("Sheet1").Range("a1:C35").Value = "" With Worksheets(Sheet) myData = .Range(.Cells(1, 1), .Cells(Rows.Count, 3).End(xlUp)).Value End With With ListBox1 .ColumnCount = 3 .ColumnWidths = "20;70;100" .List = myData End With End Sub このリストボックスにはボタンが二つありボタン1を押したときに標準フォームへ[hinban] という変数にリストボックスでフォーカスしているデータを取り込みたいのですが以下の方法でうまくいきません。 Private Sub CommandButton1_Click() Dim lastRow As Long Dim i As Integer hinban = ListBox1.Column(pvargColumn:=1) End Sub もう一つのボタンは何もせずにリストボックスを閉じたいのですがこれで問題ないですか。 Private Sub CommandButton2_Click() Unload Me End Sub プログラム初心者でインターネットから寄せ集めのプログラムです。 どなたかお力をお貸しください。

  • ListBoxのBackColor変更

    EXCEL2007のVBAにて質問です。 ユーザーフォームにリストボックスを配置して、選んだ物によって リストボックスの背景色を変更しようとしているのですが、うまくいきません。 例えばlistbox1を以下の様にセットし、 Private Sub UserForm_Initialize() UserForm1.ListBox1.AddItem ("ピンク") UserForm1.ListBox1.AddItem ("白") End Sub 下記の通り選んだ項目で背景色を変えたいのですが、 Private Sub ListBox1_Click() '選んだ項目で色変え If UserForm1.ListBox1.ListIndex = 0 Then UserForm1.ListBox1.BackColor = RGB(255, 128, 128) 'ピンクなら背景をピンクに Else UserForm1.ListBox1.BackColor = RGB(255, 255, 255) '白なら背景を白に End If End Sub クリックして項目を選択しても背景の色が変わりません。 何か見落としている事があるでしょうか? 又はやり方が悪いのでしょうか? お教え頂けると助かります。 以上、宜しくお願い申し上げます。

  • Excel マクロ リストボックス複数選択

    いろいろ拝見させていただいているのですが 理解が低いのが原因で困っています。 データのシートがあります。 ・B列には、起点となる人の名前が記載(300名ほど) ・データの入っている列は、A:CE データシートでB列にてオートフィルタをかけ 抽出シートに転記したい。 抽出シートでは、ユーザーフォームを組みました。 オプションボタン1 単一選択 オプションボタン2 複数選択 オプションボタン3 拡張選択 リストボックス(2・3に対して) コマンドボタン   終了 とした場合、単一選択はできたのですが 複数選択の場合 該当数が「0」の表記となってしまい、うまくいきません。 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。 Private Sub UserForm_Initialize() ListBox1.ColumnCount = 1 'リストボックスの列は1 ListBox1.BoundColumn = 0 'ListIndexの値(行数)を使用する ListBox1.MultiSelect = 0 '最初は単一選択状態にする ListBox1.RowSource = 'リストのソース ListBox1.ColumnHeads = True '列見出し表示 OptionButton1.Value = -1 'オプションボタン1を選択状態にする End Sub Private Sub OptionButton1_Click() ListBox1.MultiSelect = fmMultiSelectSingle '単一選択状態にする End Sub Private Sub OptionButton2_Click() ListBox1.MultiSelect = fmMultiSelectMulti '複数選択状態にする End Sub Private Sub OptionButton3_Click() ListBox1.MultiSelect = fmMultiSelectExtended '拡張(連続)選択状態にする End Sub Private Sub ListBox1_Click() 'リストボックスがクリックされたとき(単一選択) Dim 条件 As String 条件 = UserForm1.ListBox1.Text '氏名 With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End Sub Private Sub CommandButton1_Click() '選択終了ボタンがクリックされたとき(複数・拡張選択) Dim 条件 As String Dim lastRow As Long With ListBox1 If .ListIndex = -1 Then Exit Sub '何も選択されていない For 条件 = 0 To .ListCount - 1 If .Selected(条件) Then '行選択あり With Worksheets("データ") .Range("A1").AutoFilter _ field:=2, Criteria1:=条件 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("抽出").Range("A1") .Range("A1").AutoFilter End With End If Next End With End Sub Private Sub UserForm_Deactivate() Unload UserForm1 '×ボタンを押したら、ユーザーフォームのunloadをする End Sub

  • オプションボタンとリストボックスの連動

    下記コードを作りましたが、全く反応がありません。 どこが悪いのか、指摘いただけませんでしょうか? よろしくお願いします。 ・オプションボタン1を選択=リストシートのB列をリストボックスへ表示 ・オプションボタン2を選択=リストシートのC列をリストボックスへ表示 ・リストボックスから一項目を選択、値を入力シートへ入力 Private Sub UserForm2_Initialize() If OptionButton1.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!B3:B" & lastRow End With End If If OptionButton2.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!C3:C" & lastRow End With End If End Sub Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Worksheets("入力!").ActiveCell.Value = ListBox1.Value End Sub 以上

専門家に質問してみよう