[[20110118111926]] 『ユーザーフォームのコンボボックスrの設定』(犬) ページの最後に飛ぶ

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

 

『ユーザーフォームのコンボボックスrの設定』(犬)
 はじめまして、よろしくお願いします。
 現在ユーザーフォームでコンボボックスのリストに50個ほどあります。
 それを毎回探すのが面倒です。 

 VBAを記述するときに「Selection」と入力したいときに自動にリストがでて
 「S」と入力すると「S」ではじまる単語が一番上にきます。
 インターネットエクスプローラーでも文字を入力するときにでるやつです。
 あれを、ユーザーフォームのコンボボックスに使うことはできませんか?
 50個ほどあるリストを自動で入れたい単語がくるようにできないでしょうか?
 どうかよろしくお願いします。

 ComboBoxのMatchEntryプロパティを調べてみてください。
 (momo)

 新規ブックにて試してみてください。

 準備
 ユーザフォームを一つ作成してください(UserForm1)。
 このUserForm1にコンボボックスを一つ作成してください(ComboBox1)。

 では、コードです。

 UserForm1のモジュールに

 '=======================================================================
 Option Explicit
 Dim rng As Range 'リストデータのセル範囲
 Dim ev As Boolean 'Changeイベントの有無フラグ True--発生可能 False---発生不可
 '========================================================
 Private Sub UserForm_Initialize()
   Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
   With ComboBox1
      .Style = fmStyleDropDownCombo '←これは事前設定でよいです
      .MatchEntry = fmMatchEntryNone
      ev = False
      .List = rng.Value
      ev = True
   End With
 End Sub
 '===============================================================
 Private Sub ComboBox1_Change()
   Dim myvalue As Variant
   Dim svtext As String 'コンボボックスのTextの内容の一時保存
   If ev = False Then Exit Sub
   With ComboBox1  '←適当な名前に変更すること
      svtext = .Text
      If .Text <> "" Then
         If rng.Count = 1 Then
            If rng.Value = "" Then
               .Clear
               Exit Sub
               End If
            End If
         myvalue = Evaluate("transpose(if(mid(" & rng.Address & ",1," & Len(.Text) & ")=""" _
                             & .Text & """," & rng.Address & ",""" & Chr(&HFF) & """))")
         If UCase(TypeName(myvalue)) <> UCase("variant()") Then
            myvalue = Array(myvalue)
            End If
         myvalue = Filter(myvalue, Chr(&HFF), False)
         '↑あり得ない文字を使用してフィルタをおこなう
         ev = False
         .Clear
         .List() = myvalue
         .Text = svtext
         ev = True
         If UBound(myvalue) >= 0 Then
            .DropDown
            End If
      Else
         .Clear
         .Visible = False
         .Visible = True
         UserForm_Initialize
         .SetFocus '↑ここは、こうしないと残像が残るので(Excel2000)
         End If
      End With
 End Sub

 次に標準モジュールに

 '===================================================================
 Sub test1()
    With Worksheets("sheet1")
       .Select
       .Cells.Clear
    End With
    Call mk_sample
    MsgBox "表示しているA列がユーザーフォームのコンボボックスのメンバーです"
    UserForm1.Show
 End Sub
 Sub mk_sample()
    With ActiveSheet
       .Range("a1:a20").Value = _
          Evaluate("{""哀川翔"";""相田翔子"";""哀川哲司"";""相川正子"";""井上門多"";""井上順"";""伊藤博文"";""伊東吉事"";" & _
          """内田裕也"";""内田有紀"";""遠藤幸吉"";""遠藤八十吉"";""小野寺誠"";""加藤清正"";""加藤剛"";""木村拓也"";" & _
          """木下藤吉郎"";""熊田曜子"";""小林一茶"";""小林麻美""}")
    End With
 End Sub

 以上です。

 test1を実行してください。コンボボックスのメンバ表示のメッセージの後、
 UserForm1が表示されます。

 例
 コンボボックスに 井上 と入力し、確定してください。
 選択リストとして、井上門多、井上順 が表示されます。

 コンボボックスに 小林 と入力し、確定してください。
 選択リストとして、小林一茶、小林麻美 が表示されます。

 このようなことですか?

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


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