[[20091128125254]] 『入力規則のような・・・』(田中) ページの最後に飛ぶ

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

 

『入力規則のような・・・』(田中)

セルに頭文字を入れると入れるとリストから候補があがるように

できるでしょうか?

例えばsheet2に名簿があってsheet1のセルに"k"と入力すると

加藤
川上
河村
甲斐

などのように候補があがるようなかんじですが・・・

宜しくお願いします。ちなみにXPです。


 Sheet2へ下記のリストを作成します。
    A      B       C
1   a      k       s
2  阿部   加藤    佐藤
3  安西   川上    斎藤
4  安藤   川村    佐川

 A1:C4を選択して、挿入→名前→作成
 [名前作成BOX]の上端行にチェックをいれて[OK]
 以上で、a,k,s の名前が定義されます。

 Sheet1のB1に、入力規則→リスト
 元の値→ =INDIRECT(A1)

 A1にa,k,s のいずれかを入力しますと、B1のリストに対応した名前が表示されます。(gon-2)


さっそくの御返事ありがとうございました。

やってっみます。


 ちょっとご要望とは違いますが・・・、VBAを使うと以前
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=25488;id=excel
 こんな投稿をしたことがありました。これをちょっと修正してみると・・・、

 新規ブック(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  '←作成したコンボボックスの名前に変更すること
      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の経験があるなら、試してみてください。

 ichinose


ichinoseさん 有難うございます。

さっそく使用させていただいたのですが、

名前を挿入するシートが50行くらいあって

そのシートの数が12シートくらいあるので少したいへんです。

もし上記のようなものでユーザーホームを作成して候補で決定したものを

選んだセルに転記できればよいのですが

お忙しいところすみません。


 >名前を挿入するシートが50行くらいあって 
 >そのシートの数が12シートくらいあるので少したいへんです
 これだけの記述では、私には仕様がはっきりわかりません。

 >もし上記のようなものでユーザーホームを作成して候補で決定したものを  

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=25488;id=excel

 前回投稿でも提示しましたが、↑これがユーザーフォームの場合です。
 もちろん、質問内容が違いますから、まるっきり同じではないですが・・・。

 いずれにせよ、前回私が投稿したコードである程度動作の確認はできたのですよね?
 正常に動作の確認ができないのなら、その旨を記述してください。
 正常に動作することが確認できたなら、これを参考にご自分でコードを考え、
 投稿してください。
 その上で今度は、もう少しピンポイントの質問をしてください。

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


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