• ベストアンサー

エクセルで入力途中でも抽出できますか

シート1に名簿(A:氏名、B:ふりがな、C:性別、…)を入力しておき、シート2でふりがなを入力すると、該当する行が抽出できるようにしたいのですが…。 たとえば… シート1で「日本太郎(にほんたろう)」という人が入力されている名簿があるとして、シート2で検索する際、「に」の段階でふりがなの頭に「に」がついている人が表示(リストボックスのように)され、その中ですぐに発見できれば該当項目をマウス等で選択して抽出。数が多く、すぐに発見できないようであれば、続けて「ほ」と入力(表示上は「にほ」)して、同じように頭に「にほ」がついている人を表示(リストボックスのように)、その中ですぐに発見できれば該当項目をマウス等で選択し抽出。といったように、どんどん該当するものを絞っていき、抽出する方法です。中には、同じ名前の方もいるので、最後まで入力した後、氏名の漢字等で選択するようになりますが、こんなことはできますか。 ちなみにエクセルは2002です。わかりにくい説明で申し訳ありませんが、よろしくお願いいたします。

質問者が選んだベストアンサー

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

(1)私の場合Sheet6にテキストボックス1つを貼りつけ、あとリストボックスを1つ貼りつけました。(メニューの余白を右クリックして、出てくるツールバーの「コントロールツールボックス」からテキストボックスリストボックスを直接ワークシートに貼りつけました。) (2)サンプルデータ A1:B13に 近藤 こんどう 今野 こんの 岡嶋 おかしま 岡野 おかの 金沢 かなざわ 金井 かない 熊野 くまの 熊谷 くまがい 来栖 くるす 来島 くるしま 国元 くにもと 小杉 こすぎ 小杉谷 こすぎや を入れました。順序はどうでも良いです。 ------ (3)ALTキーを押しながらF11キーを押す。 するとVBE画面になります。 左のフレームのVBAProjectのSheet6をクリックする。 右のフレームの「(General)」をクリックして TextBox1をクリックする。 次に(Declarations)をクリックして、Changeをクリック。 Private Sub TextBox1_Change() v = TextBox1.Text Worksheets("sheet6").ListBox1.Clear For i = 1 To 14 c = Worksheets("sheet6").Cells(i, "B") If v = Left(c, Len(v)) Then Worksheets("sheet6").ListBox1.AddItem Cells(i, "A") End If Next i End Sub の最初と最後のが出ますので、上記コードの中間部分(本体)行をコピペする。 右のフレームの「(General)」をクリックして Listbox1をクリック、(Declarations)を クリックして、Clickをクリック。 Private Sub ListBox1_Click() ActiveCell = ListBox1.List(ListBox1.ListIndex) End Sub の最初と最後行が出ますので、中間行をコピペする。 ----- (操作) 実行モードにして、テキストボックスに「こ」と入れると、 近藤 今野 小杉 小杉谷 がでます。 「こす」になると 小杉 小杉谷に減ります。どこかの適当な段階で、 セットしたいセルをクリックし、リストボックスの中の名前をクリックして選択してください。 クリックした「セル」に、漢字名がセット出来ます。 #2のご回答とCangeイベントを使う骨子は同じですが、実例の説明とリストボックスの説明を加え、Findメソッドを使わず、ForNextで全行毎回総なめして聞いています。初歩的ですが、判りやすくまた、1000行ぐらいなら、レスポンスが遅くて、いやになると言うこともないでしょう。

jun11jun
質問者

お礼

ありがとうございます。早速、やってみたいと思います。

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

シート2の「セル」に抽出する先頭部分の文字列を入れるとすぐ抽出するように することは出来ないと思います。 入力したら、コマンドボタンを押すなど、イベントにより処理する必要があります。 そのことから、ユーザーフォームに配置したテキストボックスのChangeイベントを 使用すれば、1文字入力する毎にそれだけで絞り込んで抽出していくことができます。 (Changeイベントは、1字毎に発生します。) 要望通りのことを実現するためには、VBAが必須です。 参考までに主要部分だけですが、コードを書いてみましたので、宜しかったらテスト してみてください。 フォームに「TextBox1」と「ListBox1」が配置されているとして、「TextBox1」の Changeイベントに下記のコードを記述します。 これでTextBox1に文字を入れる毎に絞られて、リストボックスにSheet1のB列から 該当する氏名(ふりがな)が、リストアップされます。 (このあと、どうしたいのか解りませんので、そこまでの部分のコードです。 最初、「シート1」にフィルタを次々掛けるのかな? と思ったのですが、シート2で条件入力 していますので、そうでもなさそうです。 フィルタの方が、簡単なんですが・・・) Private Sub TextBox1_Change() Dim Rng As Range Dim First As String ListBox1.Clear If Len(Trim(Me.TextBox1.Text)) = 0 Then Exit Sub With Worksheets("Sheet1") ' <--- 住所録のシート名 B列が「ふりがな」   Set Rng = .Range("B:B").Find(Me.TextBox1.Text, lookat:=xlPart)   If Not Rng Is Nothing Then     First = Rng.Address     Do       If Left(Rng.Value, Len(Me.TextBox1.Text)) = _           Me.TextBox1.Text Then         ListBox1.AddItem Rng.Value       End If       Set Rng = .Range("B:B").FindNext(Rng)     Loop Until Rng Is Nothing Or Rng.Address = First   End If End With End Sub

jun11jun
質問者

お礼

ご回答ありがとうございます。 VBAは超初心者で、解読には時間がかかりそうですが、お教えいただいたことでやってみたいと思います。 やっぱり、関数では無理ですよね…(汗)

  • tatata716
  • ベストアンサー率18% (63/344)
回答No.1

「日本太郎」と入力してその人のデータ(性別等)を 抽出するのか可能かと思います。 そのリストボックスというかプルダウンメニューというか・・ アクセスで作った方が簡単かな、と思います。 できるかできないか判断できない私がすいません。 回答になってなくてすいません。

関連するQ&A

  • エクセル:リストを使っての入力で・・・

    氏名(漢字)を別シートの名簿(A列氏名・B列フリガナ)から拾ってリスト入力するとき・・・ (例) (1) まず、カ行を選ぶ (2) 次に、そのカ行の方の名前だけがリストに出てくる。 (3) その中から選んで入力をする。 というようなことは、できるのでしょうか? 教えてください。

  • エクセルですが、シート1で、A氏またはB氏の氏名を入力した時、、

    エクセルですが、シート1で、A氏またはB氏の氏名を入力した時、もし、シートBにあらかじめ用意した名簿の中で該当がある場合に、シート1のどこかのセルに、該当あり、というテキスト表示をしたいのですが、可能でしょうか?

  • 二つのエクセル名簿を比較し、抽出したい

    エクセルでできた名簿が2つあります。 どちらも 列EがID、 列Fが氏名 列Gがフリガナ という構成は同じです。 両方の名簿で同じ人は、同じIDです。 ただ、上記記載以外の列、備考や更新日などは同じ人でも異なったデータが入っています。 二つの名簿ファイルを借りに名簿A、名簿Bとすると 名簿Aにのみ掲載されてる人のレコードのみ抽出したいのです。 両方の名簿から、ABともに掲載されてる人、Bのみに掲載されてる人を除き、Aのみに掲載されてる人だけのリストを作りたい。 理想は、名簿Aのリストはそのままにして、 まったく別の列(例えば列Z)に抽出した人だけ 1を入力するなどが理想です。 1行ずつ目で見て比較していくのは、時間のむだでとてもできません。

  • オートフィルタを使わず条件抽出

    オートフィルタを使わず条件抽出をしたいのですが数式がわかりません。(Accessを使えばよいのですが会社からNGがでたため) 具体的には、Sheet1に参加日、参加時間、受付整理番号、氏名、フリガナ、そのほか住所などの申し込みデータがあります。 そこから、毎日、その日、その時間分の参加者データを綺麗なリストとして印刷したいため、1つの参加日・参加時間の氏名・フリガナだけを抽出した別シートSheet2で作成したいのです。 別シートに、A1に参加日、B1に参加時間を入力すると(実際は入力規制のリストから選ぶ)、 整理番号1番から縦に30番まであるセルC列の右D列に、氏名を表示させるようにしたいのです 以下、Sheet2の項目です A1    B1   C     D  F 参加日 参加時間 整理番号 氏名 フリガナ           1   数式 数式           2   数式 数式           3   数式 数式 A1でかつ、B2でかつ、C2に絞った結果をSheet1から抽出することは可能でしょうか

  • Access:タブキーでのフォーカス移動の際、自動でふりがなが入力されません

    Access2003で質問です。 現在、仕事で社員名簿をAccessで作成しています。 フォーム内でテーブル内容を閲覧・編集はできるようになったのですが、 ふりがなの表示がどうも上手くいきません。 マウスでテキストボックス1(氏名)をクリックしてフォーカスを移動させるとテキストボックス2(ふりがな)にはちゃんとふりがなが表示されるのですが、 タブキーでテキストボックス1にフォーカス移動させて入力しても、 テキストボックス2には表示されない状況です。 解決策をご存知の方、ご教授お願いします。

  • エクセルでこんな抽出は可能ですか?

    関数を使用して抽出したいと思います。 まずシート1とシート2を使います。 シート2には住所録などの内容が5000件くらいあるものとします。 その住所録には「〒」「住所」「電話番号」「氏名」などのフィールドを作っておきます。 そして、シート1には 例えば「氏名」という欄をA1に書き、B1の空白のセルに「山田」と入力をすると、「山田」が含まれるものをすべて表示したいと思います。 このすべて表示とういうのは「山田」を含む「氏名」だけ表示されるのではなく、「〒」「住所」「電話番号」「氏名」を表示したいのです。 オートフィルタやフィルタオプションは極力使用したくないので、関数で出来ないものかと考え中です。 また、抽出結果を表示する欄はシート1のA3あたりからお願いします。 こんな文書で意味が分かった方、よろしくお願いします

  • エクセルの入力規則リストについての質問です。

    エクセルの入力規則のリストですが、リストの範囲を別シートの氏名一覧に指定したいのですが上手くいきません。 また、リストの中に選択したい氏名が無い場合は直接入力できるようにしたいのですがかのうでしょうか?

  • EXCELで他のシートのデーターを反映させるには

    office2000のEXCELです。 仮に「シート1」と「シート3」があります、「シート1」にはA列(氏名)B列(年齢)とします、 「シート3」は会員名簿で氏名(C列)と年齢(D列)が書かれています(60件位)。  「シート1」のA列(氏名)をクリックすると「シート3}の名簿が表示されて氏名(c列)をクリックする事により「シート1」のA列(氏名)B列(年齢)が入力できるような仕組みは可能でしょうか。   リスト入力・コンボボックス等チャレンジしてみましたが何れもうまくいきませんでした。 初心者にはむりでしょうか? 宜しくお願いいたします。

  • エクセル マウスだけで データを入力

    エクセル2003です。 エクセル初心者です。 シート2に社員名簿(約30名)が入力されています。 シート1のA3に、キーボードからではなく、マウスで、ある社員の名前を入力したいのです。 たとえば、▼マークをシート1につくっておき、A3をポイントしておいて、この▼マークをクリックすると社員名簿が表示されて、該当の社員名をクリックすると、A3に、その社員名が入力できるというものです。 ▼マークについては、■でも△でもかまいません。 意図がわかりにくいかもしれませんが、なにとぞ、ご教示お願いいたします。

  • 入力規則のリストボックス

    エクセルの入力規則でリストボックスを使って選択したいのですが その時に、数字のみを抽出する方法はないですか? 例えば 1:りんご 2:みかん 3:バナナ をリストから選択する時、番号のみが表示されるように したいのです。 リストにはその番号がどれに該当するかわかるように りんご、みかん、バナナという内容も表示させたいのです。 よろしくお願いします。

専門家に質問してみよう