[[20150501043707]] 『テキストボックス入力中にリアルタイムで候補リス』(うみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『テキストボックス入力中にリアルタイムで候補リストを表示し選択したい』(うみ)

いつも勉強させていただいております。
フォームコントロールの範囲になると思うのですが、さっぱり分かりませんのでご教授下さい。

「データ」というシートがあり、そのA列にリストがずらっと並んでいます。

(イメージ)
  A
1 ポテト
2 トマト
3 ピーマン
4 ナス
5 ポトフ
・・・

「検索」という別シート内で
検索用テキストボックスと検索結果用リストボックスを配置し

検索用テキストボックスに「ポ」と入力するとリアルタイムで
検索結果用リストボックスに前方一致で
ポテト
ポトフ
と表示され、ポトフを選択すると「検索」シートのセルA1にポトフが入力される。

というイメージなのですが・・・

よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:WindowsVista >


 これ、ActiveXControlを使う方向で検討してください。

 テキストボックス と リストボックス この機能を兼ね備えたものが コンボボックスです。

 フォームコントロールにもありますが、機能が豊富ですし、なにより記述された仕様には、
 ActiveXコントロールでなければならないでしょう。

 新規ブックにて(Sheet1、Sgeet2 というシートがあるブック)

 標準モジュールに

 Option Explicit
 Sub 準備()
    Dim rng As Range
    With Worksheets("sheet2")
       Set rng = .Range("a1:a5")
    End With
    rng.Value = [{"ポテト";"トマト";"ピーマン";"ナス";"ポトフ"}]
    With Worksheets("sheet1") '
       .OLEObjects.Delete
       With .OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
        DisplayAsIcon:=False, Left:=214.5, Top:=54.75, Width:=164.25, Height _
        :=24)
          .Object.Style = 0
          .Object.List() = rng.Value
       End With

    End With
 End Sub

 上記の準備を実行してみてください

 Sheet1に ActiveXControl のCobobox(ComboBox1) Sheet2のA列に候補データが作成されています。

 次にSheet1のシートモジュールに

 Option Explicit
 Private Sub ComboBox1_Change()
    ComboBox1.DropDown
 End Sub

 以上です。

 Sheet1のコンボボックスに何か入力してください

 リストは表示されます。今は、何を入力してもすべてのメンバが表示されますよね?

 Private Sub ComboBox1_Change()

   'ここにコードを追加し、入力された文字によってリストを変えるコードを入力してください

    ComboBox1.DropDown
 End Sub

 どうしてもリストボックスが良い場合も考え方はおなじです。

(ichinose) 2015/05/01(金) 06:37


 質問のように、リストボックスとテキストボックスを組み合わせた処理も、もちろんできますが
 コンボボックスを使うと、これだけで、似たようなことができます。

 シートに、ActiveXのコンボボックスを挿入してください。
 プロパティで、ListFillRange に データ!A1:A● 、ShowDropButtonWhen に 0 fmShowDropButtonWhenNever、LinkedCell に A1 。

 で、このままでもいいのですが、コンボボックス(見かけはテキストボックス)をマウスで選択すると
 リスト全体が開かれるように、シートモジュール(シートタブを右クリック、コードの表示を選ぶ)に以下を貼り付け。

 Private Sub ComboBox1_GotFocus()
    ComboBox1.DropDown
 End Sub

 ポ といれると、リスト内で、ポで始まる最初のもの(ポテト)が自動選択選択されます。続けて ト と打ち込むと
 リスト内で、ポト で始まる最初のもの(ポトフ)が自動選択されます。

 選択されたものは、自動的に A1 に入ります。

(β) 2015/05/01(金) 06:47


素早いご回答に感謝いたします。

かなりイメージに近いものが出来ました。

あと1点分からないのが、
「ポ」と入力中、リストにはポから始まるワードのみ表示させたいのですが、可能でしょうか?
例で言うと「ポ」を入力中リストには「ポテト」と「ポトフ」が候補として表示されており、
次に「ト」を入力するとリストには「ポトフ」のみが表示される。
という感じですが・・・

(うみ) 2015/05/01(金) 12:59


 ですから、「コンボボックスを使うと、これだけで、似たようなことができます」とコメントしました。
 「似たような」ですから、「要望を100%満たす」ものではありません。

 これで、実際の運用ができれば、簡単な設定とコードで、実現できるわけです。
 いや、どうしても、100%要望通りにしたいということであれば、これもコメントしましたが
 「もちろんできます」

(β) 2015/05/01(金) 13:04


 それでは、シートに ActiveXコントールのTextBox と ListBox を配置してください。
 ListBox のプロパティで LinkedCell に A1 をセット。

 一応、名前が TextBox1 と KistBox1 だとして、シートモジュールに

 Private Sub TextBox1_Change()
    Dim c As Range

    ListBox1.Clear

    For Each c In Sheets("データ").Range("A1", Sheets("データ").Range("A" & Rows.Count).End(xlUp))
        If c.Value Like TextBox1.Value & "*" Then ListBox1.AddItem c.Value
    Next

 End Sub

(β) 2015/05/01(金) 13:15


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.