[[20100907111025]] 『入力支援』(ぎん) ページの最後に飛ぶ

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

 

『入力支援』(ぎん)

教えてください

 「SHEET1」に名前の定義でリストを作成してあります
 「SHEET2」で入力規則設定したリスト(▼)から選ぶようにしてあります

 リストの数が多いので選ぶのに面倒です
 一文字を入力したらオートコンプリートのようにリスト内の候補が出てくるようにで きるのでしょうか?
 又、他に良い方法があればよろしくおねがいします

 Excel2003 WindowsXP


ご参考

[[20021128120235]] 9387
『同じ文字の入力』(ばた)

(こだぬき)


 過去ログ探せなかったので。
 リスト範囲に下記のようにインデックスを追加。
 入力規則のセルに「え」と書き込んでから、プルダウンすれば
 「え」のあたりから表示されます。
 BJ

 あ
 青田
 明石
 い
 飯村
 飯野
 う
 植木
 上野
 え
 江成
 遠藤
 お
 大田
 岡田
 か
 菅野
 き
 木村
 く
 工藤
 国枝
 け
 見城
 こ
 小村
 小茂田

なるほど!
 やってみます
 ありがとうございました。

(ぎん)


 VBAを知っているなら、

[[20091128125254]] 

 こんな方法もあります。

 ichinose


 ichinose さま

 ご回答ありがとうございます
 VBAは全くわかりませんがやってみました
 (理想的な処理だったので)

 下記@.Aにどうすればいのかおしえていただけますか

 @・・・準備プログラムはそのままでいいのですか
   新しい標準モジュールに文字もコードも貼り付けるのでしょうか?

 A・・・ここがエラーとなります「コンパイルエラー 変数が定義されたいません」

 よろしくお願いします。

 新規ブック(Sheet1、Sheet2というシート名が存在する)にて
 標準モジュールに準備プログラム

 '======================================================================
 Sub mk_sample()
    Dim r As Range
    With Worksheets("sheet2").Range("a1:a12")
       .Value = Evaluate("{""加藤"";""川上"";""河村"";""甲斐"";" _
                                   & """麻生"";""浅田"";""上田"";""一の瀬"";" _
                                   & """内田"";""井上"";""市村"";""遠藤""}")

       .Phonetics.CharacterType = xlHiragana
       .SetPhonetic
       .Offset(0, 1).Formula = "=phonetic(a1)"
    End With
    With Worksheets("sheet1")
       Set r = .Range("a1")
       .OLEObjects.Add ClassType:="Forms.ComboBox.1", Link:=False, _
        DisplayAsIcon:=False, Left:=r.Left, Top:=r.Top, Width:=r.Width + 15, Height:=r.Height + 4.5
   End With
 End Sub

 上記のmk_sampleを実行してみてください。

 Sheet2のA1:B12に名簿リストのサンプルが作成され、

 Sheet1のセルA1付近に「コントロールツールボックス」のコンボボックスが配置されます。


ここまでは動いたのですが

ここから下の部分がわかりません

 実行した後に Sheet1のモジュールに  ・・・・・ @

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

 以上です。例えば、コンボボックスに か と入力すると
 加藤 川上 河村 甲斐 が候補として表示されます

 続いて かわ と入力すると、川上、河村が候補として表示されます

 Sheet2のB列のふり仮名部分の箇所をロ−マ字にすれば、希望の動作になると思います

 >VBAは全くわかりませんがやってみました
 全くわからないなら、実現は、現時点では大変ですよ!!

 私は、ぎんさんがなさりたいような処置を一例として、提示したに過ぎません。

 実際には、
 >一文字を入力したらオートコンプリートのようにリスト内の候補が出てくるようにで きるのでしょうか?

 という候補データがどんなデータなのかも知りませんし・・・。

 提示したコードはこの「リスト内の候補が出てくる」というデータが
 人名のようなデータだった場合、振り仮名で検索し、候補を出すような仕様になっています。

 よって、候補データの内容によっては、修正も必要になってきます。

 mk_sampleというコードは、コンボボックスの作成とリスト内の候補として使用するデータ例(適当な人名とその振り仮名)を作成しています。
 >準備プログラムはそのままでいいのですか
 準備プログラムとは、mk_sampleというプログラムのことですが、
 別にあってもかまいません。
 実際のデータは違うでしょうから

 >新しい標準モジュールに文字もコードも貼り付けるのでしょうか?
 ちょっと意味がわかりませんが、実際のデータは、
 このmk_sampleを実行した結果、作成されるSheet2のA列、B列のように
 人名と振り仮名というデータをSheet2のA列、B列に直接入力するのですよ!!
 この時、実際のデータが人名のように漢字を含まないなら、コード修正も必要になるかもしれません。

 >ここがエラーとなります「コンパイルエラー 変数が定義されたいません」

 おそらくは、
 >>実行した後に Sheet1のモジュールに

 と記述しています。貼り付けるモジュールが違うと思います。

 Option Explicit
 Dim ev As Boolean 'Changeイベントの有無フラグ True--発生不可 False---発生可能
 Private Sub ComboBox1_Change()
 ・
 ・

 上記で始まるコードは、コンボボックスが作成されたSheet1のモジュールに
 貼り付けます。

 Sheet1のシートタブを右クリックし、表示されたメニューから
 コードの表示をクリックした時に表示されるモジュールに貼り付けます。

 繰り返しますが、提示したコードは、

 >一文字を入力したらオートコンプリートのようにリスト内の候補が出てくるようにで きるのでしょうか?

 というご質問に対し、VBAを使えばできますよ という一例を示したに過ぎません。

 上記のコードを適切に貼り付ければ、VBAを使えば、それが実現できることは
 わかると思います。

 が、ぎんさんの扱いたい実際のデータでの実現は、コードを修正しなければ
 ならない場合もあります。VBAを知らなければ、ある程度の勉強は必要ですよ。

 簡易例での動作を確認して、この方法で行くか否かはご自分で判断し決めてください。

 ichinose


ichinose 様

ご回答ありがとうございます

 簡易例での動作を確認できました 

 まさにやりたいことそのものだったので挑戦しました(人名とふりがな)

 With Worksheets("sheet2")
            Set rng = .Range("b1", .Cells(.Rows.Count, "b").End(xlUp))

 実際データでのシート名とふりがなのあるセル番号に変更しましたらできました

 ありがとうございました。

 (ぎん) 


コメント返信:

[ 一覧(最新更新順) ]


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