[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ドロップダウンリストのあいまい検索について』(とも)
現在、会社名の検索をリストから選択でドロップダウンを使用しています。
しかしながら、会社名が多いので、検索するのに結局時間がかかってしまいます。
そこで、検索セルでドロップする前のセルにリスト内で共通する文字を手打ちして、
あいまい検索の結果で候補を絞り込むといった方法を教えていただけないでしょうか。
いろいろネット検索をしてみたのですが、マクロを実行しなければならないですか?
私はマクロがまったくの素人なので、コード解読が出来ず・・・ここで質問させていただきました。
『工事完了報告書』というシートのC4セルにドロップダウンを設定しています。
『会社リスト』というシートのB列に会社名リストがあります。
ちなみにC列はフリガナ記載しています。
以上です。
何卒よろしくお願いします。
< 使用 Excel:Excel2007、使用 OS:unknown >
ドロップダウン ⇒ オートフィルタでOK?
A B C D E 1 検索 *(株) 2 3 ▼ 4 (株)AAA 5 (有)BBB 6 CCC株式会社 7 D(株) D(株) 8 E(有) 9 FF有限会社 10 G Co.LTD
B1に検索文字
C4 =IF(COUNTIF(D4,$B$1),D4,"") 下へコピー。
C列でフィルタ。 (GobGob) 2015/01/23(金) 16:26
コメントありがとうございます。
せっかくアドバイスいただいたのですが、別のセルで検索するのですはなく、
出来ればC列、具体的にはC4セルでドロップダウン検索がしたいと思っております。
C4セルに、会社名の一部を入力し、▼ボタンを押すと、該当の会社名候補が表示されるように
したいのです。
関数では無理なのでしょうか??
(とも) 2015/01/23(金) 17:17
(ペリカン)さん紹介のスレは、あらかじめ企業名にグループコードを割り当ててグルーピングしておくものなので あいまい検索には、ちょっとあわないかなと思います。
それより、C4のドロップリストにこだわっておられますが、ふつうのオートフィルターにしておいて ○○を含むもの という抽出を行えばいいんじゃないかと思うんですが?
C4のドロップダウンにこだわるなら、どこか別のセルに検索ワードをいれ、ドロップダウンリストが相手にしている 領域に上詰めで、該当のものを顧客リストからセットする、そこを関数で処理しておけばと、思いつきというか 私には無理ですが、そういったことは、関数専門家の皆さんなら、さらっと、できるのでは?
(β) 2015/01/25(日) 21:01
コメントありがとうございます。
>それより、C4のドロップリストにこだわっておられますが、ふつうのオートフィルターにしておいて
>○○を含むもの という抽出を行えばいいんじゃないかと思うんですが?
私1人が使う資料ではなく、社員全員が使う資料を作成中です。
出来るだけ入力箇所を少なくする工夫と、簡単に検索出来ることを目標にしています。
オートフィルタではなく、あいまい検索にこだわりたいのです・・・。
すいません。
過去ログを拝見したのですが、結局はマクロじゃないと対応できないのでしょうか。
マクロのコードを解読できなかったので、私の求めるコードか分かりませんでした(T_T)
どなたか、ド素人で大変恐縮なのですが、教えてもらえないでしょうか?
(とも) 2015/01/28(水) 15:56
「オートフィルタではなく、あいまい検索にこだわりたいのです・・・。 」
オートフィルターで【あいまい検索】をやればどうだろうと申し上げているんですが・・ まぁ、諸般の事情でオートフィルターは避けたいということなんでしょうね。
ところで、C4のドロップダウンリスト、ずっと、入力規則をイメージしていましたけど、 それでいいんですか? それとも、フォームツールのドロップダウンやActiveXのコンボボックスがC4に配置されているのでしょうか?
いずれにしても、少し矛盾がないでしょうか? C4に AAA といれると、AAAを含むリストが(どこかのマスタから抽出されて)表示されたとしましょう。 で、その中から 株式会社AAA商事 というのを選んだとしましょう。 選んだということは C4に入るということですよね。 そうすると、C4に入った値、つまり株式会社AAA商事で、あいまい検索をしてしまいますね。 で、マスタの中には、株式会社AAA商事1つしかないはずですから、そこでできあがるリストは 株式会社AAA商事だけのリストですね。
ここで、操作者が、あっ!しまった! 有限会社AAA商会だったということで、▼をおして選びなおそうとしても そこには 株式会社AAA商事 しかでていないですよね。 しょうがないから、もう一度、AAA といれて、リストを復元? なんてことを操作者はやりませんよね。
ですから、入力規則であれ、フォームツールのドロップダウンであれ ActiveXのコンボボックスであれ あいまい検索用にいれる値は、C4【以外】のところにいれなきゃいけませんよね?
この点、いかがですか?
(β) 2015/01/28(水) 20:01
とりあえず、入力規則だということで。
前述の通り、C4 にあいまい検索文字をいれることはできませんので B4 にいれてください。 会社リストのB列の先頭(B1)にはタイトルが入っているという前提です。 また、会社リストの W〜Z列を作業列に使います。
C4に入力規則を設定するシートのシートタブを右クリックして、コードの表示を選んでください。 そこであらわれたところに(シートモジュール)以下のコードをコピペで貼り付け、右上のXボタンをおして シートに戻ってください。
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim a As String Dim x As Long
Set c = Target(1) If Intersect(c, Range("B4")) Is Nothing Then Exit Sub If c.Value = Empty Then Exit Sub 'c.value でフィルターオプション With Sheets("会社リスト") 'W〜Z を作業域に使用 .Columns("W:Z").Clear .Range("X1").Value = .Range("B1").Value '会社名タイトル .Range("X2").Value = "*" & c.Value & "*" 'あいまい検索文字列 .Range("Z1").Value = .Range("B1").Value '抽出領域タイトル .Columns("B").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=.Range("X1").CurrentRegion, CopyToRange:=.Range("Z1"), Unique:=False With .Range("Z1").CurrentRegion If .Rows.Count = 1 Then x = 1 a = .Cells.Offset(1).Resize(.Rows.Count - 1 + x).Address(External:=True) End With End With
Application.EnableEvents = False
'C4の入力規則の再設定 With Range("C4").Validation On Error Resume Next .Delete On Error GoTo 0 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=" & a .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With
Application.EnableEvents = True
Range("C4").Activate
End Sub
(β) 2015/01/28(水) 20:52
単純に…^^;
リストに あ・か・さ・た・な… と追加して並べ替え。 ドロップダウンが設定されているところに、例えば、 「か」を入力してドロップダウンのボタンを押すと、 「か」からのリスト表示になりますが、どうでしょう? 入力した文字によりリストが絞られていくということは 出来ませんし、いろいろと大変な面もありますが、 そんなにエクセルの知識を持っていなくても出来るので 自分だったらこの方法をとると思います^^;
(とっても初心者) 2015/01/28(水) 21:05
とっても初心者さんの意見が正しいと思いますねぇ。 その考え方を拡張して、リストに手を加えてこんな感じでいかがでしょう?
サンプルデータに使った企業名は、以下から引用しました。 http://www.yurai.jp/archives/company_name/
工事完了報告書シート [B] [C] [D] [1] アグレックス 1 アグレックス [2] ジューテック アイエヌジー [3] 鈴木金属工業 アイエー [4] 東計電算 アイ・オー・ [5] JALUX アイコム [6] JSAT アイシン精機 [7] シチエ [8] 名機製作所 [9] アイエヌジー 9 [10] アイエー 10 [11] あいおい損害 [12] アイ・オー・ 12 [13] 愛光電気 [14] アイコム 14 [15] 愛三工業 [16] アイシン精機 16
C1=IF(ISERROR(FIND(工事完了報告書!$C$4,B1)),"",ROW()) D1=IFERROR(INDEX($B:$B,SMALL($C:$C,ROW(A1))),"")
C列を選択し、数式→名前の管理で「カウント」という名前を付ける D列を選択し、数式→名前の管理で「抽出リスト」という名前を付ける
工事完了報告書シート [C] [4] ア
C4の入力規則、リストに以下の式を入れる =OFFSET(抽出リスト,,,COUNT(カウント)) エラーメッセージタブの「無効な〜〜」のチェックを外す
これで「ア」を入力すれば「ア」を「含む」企業名がリストに出るはず。
もし「ア」から始まる等検索したければ、GobGobさんのCountifを使った式を使ったほうがいいかも。 ワイルドカード使えるし。 ただし、ワイルドカードの使い方を「みんな」が知っているとは限らないので、これで十分だとは思う。
(稲葉) 2015/01/29(木) 09:11
下記のいずれかの箇所を変更すべきなのかと想像していますか、ご教示頂けないでしょうか。
よろしくお願いします。
If Intersect(c, Range("B4")) Is Nothing Then Exit Sub
If c.Value = Empty Then Exit Sub
Range("X2").Value = "*" & c.Value & "*"
(nob) 2015/10/13(火) 16:33
別トピを立てられたほうがいいとおもいますけど、とりあえず。
B4を先頭にB列に値が入れば、その行のC列に、あいまい検索をした結果の入力規則を設定します。 要件誤解していれば指摘願います。
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim a As String Dim x As Long Dim r As Range
Set r = Intersect(Target, Range("B4", Range("B" & Rows.Count))) If r Is Nothing Then Exit Sub
For Each c In r
If Not IsEmpty(c) Then 'c.value でフィルターオプション With Sheets("会社リスト") 'W〜Z を作業域に使用 .Columns("W:Z").Clear .Range("X1").Value = .Range("B1").Value '会社名タイトル .Range("X2").Value = "*" & c.Value & "*" 'あいまい検索文字列 .Range("Z1").Value = .Range("B1").Value '抽出領域タイトル .Columns("B").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=.Range("X1").CurrentRegion, CopyToRange:=.Range("Z1"), Unique:=False With .Range("Z1").CurrentRegion If .Rows.Count = 1 Then x = 1 a = .Cells.Offset(1).Resize(.Rows.Count - 1 + x).Address(External:=True) End With End With
Application.EnableEvents = False
'C列の入力規則の再設定 With c.Offset(, 1).Validation On Error Resume Next .Delete On Error GoTo 0 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=" & a .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With End If Next
Application.EnableEvents = True
r.Cells(1).Offset(, 1).Activate
End Sub
(β) 2015/10/13(火) 20:00
リストが表示されるC4セルに移動した際に表示を自動化させたく、SendKeys "%{Down}" を追加してみたのですが、どの箇所へ挿入してもエラーになってしまいました。
この点のみ追加でご教示頂けませんでしょうか。
(nob) 2015/10/14(水) 10:37
こちらでは、最後の r.Cells(1).Offset(, 1).Activate の下に SendKeys "%{Down}" を記述することで 自動的にリスト表示になりますが?
(β) 2015/10/14(水) 12:03
(nob) 2015/10/14(水) 14:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.