• ベストアンサー

絞込み検索について教えてください!

学校名   科    入学式  キャンプ     卒業式 ○◎学校  普通科 4月1日 6月中       3月3日 ××学校  夜間科 4月3日 8月10~14日   3月15日 △△学校  普通科 4月7日 9月15日      3月21日 ◎●学校  普通科 4月1日 7月24日・25日  3月 ◎●学校  外語科 9月1日 4月24日・25日  8月  ・  ・ こんな感じで学校の日程表があるとします。 エクセルなどで簡単に絞込み検索を掛けられる方法を探しています。 例えばどこかのセルなどに『9月』と入力すると9月のデータがある △△学校と◎●学校の外語科の行(横一行全て)が出て来るようにしたいのです。 今は、エクセルのオートフィルターを使ってますが、データが大きくて各列で9月の日程が あるものを探さなくてはいけなくて手間がかかっています。 でも、各学校の年間予定を見るなどの場合もあり、オートフィルターも崩したくないのです。 何か良い方法はあるでしょうか? ご伝授下さい!よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。 >すごーい、すごーい。ビックリしました。 もう、2年近く前から、この方法を宣伝していたのに、そうやって認めてくださったのは初めてです。(感謝!)私も、最初に使ったときに、Excelがデータベースになってしまうし、思った以上に検索スピードも速いので、自分が考えている以上に、すごいなって驚きました。 >●月◎日など、日にちの指定までして検索する場合は、どう書き換えればいいのかをご教授いただければありがたいのですが。 直してみました。しばらく、使ってみてください。おかしなところがあったら、ここのスレッドにつけてください。早急に直すようにいたします。 改良点: 自動で検索モードを替えること、マニュアル検索モードを設定しました。 ○使用説明 (使い方に慣れるまでには、少し時間が掛かるかもしれません) 設定: ここでは、[J1] を、検索モードの起動キーにしています。(変更できます) データベースの範囲も変更できます。 コードの中のユーザー設定の部分を書き換えれば可能です。 使い方: [J1] に、「0」を入れれば、全画面表示(デフォルトモード) *日付検索:「4/1」をそのまま入力(ゼロを抜く書き方-注:「04/01」ではありません)また、「5/4/1」 でも、データの元が日付のシリアル値になっているなら可能です。特に、年をまたいでいるときの検索の場合、有効です。 うまく検索できなかった場合は、一旦、「0」で、全画面表示をしてください。 (うまく検索できない理由は、以下で述べられているテキストモードを残していることがあるからです。) *月の検索: そのまま、数字を入れてください。  [J1] に数字を入れるだけです。 テキストモードの使い方: [J1] に、「-1」を入れれば、全画面表示(テキスト検索モード) 「4月1日」の検索は、そのまま、「4/1」と入れればよいです。特殊な検索としては、日付のシリアル値の4月を検索したい時に、「4/」とすれば、4月の部分を検索します。 マニュアルモード: 最初に、「-1」でテキストモードにしてください。 「科」の「普通科」だけを選びたい場合は、 [J2] の  補助列 となっている部分を、「科」と書き換えて、その下に「普通科」を入れ、 「科」 「普通科」 と書き換え、 [J1] に、「-2」と入れると、そのまま検索を始めます。 「学校名」「○」とか、マニュアルに近い検索が可能です。 (ワイルドカードは、Excel 2002のみ、「○*(アスタリスク)」が必要です) その絞りこみ検索状態のまま、もう一度、「-2」と入れると、その設定のまま全画面表示になりますので、「普通科」の部分を「夜間科」と書き換えるだけで、「-2」を入れれば、その設定で検索します。 通常モードに戻すには、「0」で全画面表示してください。そのままですと、検索しそこなうことがあります。 (注1:標準モードからいきなり「-2」を入れても、テキストモード検索はしません。) (注2:標準モードに戻しても、数字の位置が文字列のように左側に行っている場合がありますが、月数検索には影響はありません。) '--------------------------------------------------------------- ワークシート側の変更: [補助列]を増やします。 ワークシートには、以下のようにお願いします。 H1:補助列1 H2~ (区切り文字を入れることにしました) =TEXT(C2,"yy/m/d")&","&TEXT(D2,"yy/m/d") &","& TEXT(E2,"yy/m/d") データのある分を下に、フィルコピーしてください。 なお、補助列が汚くなりますので、非表示にしてください。非表示にしても機能は変わりません。場所を移動する時は、マクロコードのほうのユーザー設定の部分も変更をしてください。ただし、データベースの範囲範囲内に、キーやCriteria(検索条件)は置けません。 前回のものをそっくり上書きしてください。 '--------------------------------------------------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'Wendy02 05/07/02 17:30 q=1484524  Dim myCriteria As Range, DateChecker As Variant  '  '=======ユーザー設定==============================  ':データベースの範囲(補助列全部を含めること)  Const myDataBase As String = "A1:H6"  ':検索条件を入れるキーのセル番地  Const BaseRng As String = "J1"  '================================================  '  If Target.Address(0, 0) <> BaseRng Then Exit Sub  'Criteriaは、その下に置く--Criteriaの範囲は条件によって変わる  '複数条件可能  Set myCriteria = Range(BaseRng).CurrentRegion.Offset(1)    With Range(BaseRng)  Application.ScreenUpdating = False  If ActiveSheet.FilterMode = True Then   ActiveSheet.ShowAllData   If .Value = -2 Then Exit Sub  End If  Application.EnableEvents = False   '設定の変更   If .Value = 0 Or .Value = -1 Then GoTo EndLine   On Error Resume Next   DateChecker = VarType(DateValue(Range(BaseRng).Text))   If VarType(Range(BaseRng)) = vbString And _    Not IsNumeric(.Value) Then 'テキストモードで、入力値が数字でない時    .Offset(2).FormulaLocal = "=""*""& " & BaseRng & "&""*"""   ElseIf Err() = 0 Then '日付のチェック    DateChecker = Empty    .Offset(1).Value = "補助列1"    .Offset(2).FormulaLocal = "=""*""&TEXT(" & BaseRng & ",""m/d"")&""*"""   ElseIf .Value > 0 Then '標準-月検索    .NumberFormat = "General"    .Offset(1).Value = "補助列"    .Offset(2).FormulaLocal = "=""*""&" & BaseRng & "&""月*"""   End If   On Error GoTo 0  End With  Range(myDataBase).AdvancedFilter _    Action:=xlFilterInPlace, _    CriteriaRange:=myCriteria.Resize(myCriteria.Rows.Count - 1), _    Unique:=False EndLine:  With Range(BaseRng)   .Select   If .Value = 0 Then '0を選ぶと標準モード    .NumberFormat = "General"    .Offset(1).Value = "補助列"    .Offset(2).FormulaLocal = "=""*""&" & BaseRng & "&""月*"""   ElseIf Range(BaseRng).Value = -1 Then '-1を選ぶとテキストモード    .NumberFormat = "@"   .Offset(1).Value = "補助列1"   .Offset(2).FormulaLocal = "=""*""& " & BaseRng & "&""*"""   End If  End With  Application.EnableEvents = True  Application.ScreenUpdating = True End Sub

gogodharma
質問者

お礼

やーっと、やーっと動きました! ああ、もう本当にすごいですっ。希望通りの動きです!! こんなに素晴らしい構文を、惜しみなく書いて下さったという事が信じられません!!本当にありがとうございました。 マクロのすごさを思い知りました。 1ヵ月近く、色々な媒体で調べたり検索したりしていましたが、こちらで質問して良かったです。 ご回答下さった皆様、ありがとうございました。フィルタオプションの設定やリストについても知ることができたので、これから使っていこうと思います。 まだまだどんどん勉強していかなければ、と思いました。これからもどうぞよろしくお願いします♪

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • kaz001
  • ベストアンサー率17% (4/23)
回答No.5

Excel2003をお使いでしたらマクロをつかわなくてもリストでできるかと思います。 データが入っている範囲を指定して ツール→リスト→リストの作成 でできます。 第一行を見出しにする をチェックしておけば一番上の行が乱しになりその右の「↓」で絞込みが出来ます。 さらに月と日にちを入力する列を分けておけば月ごとでの検索も可能になります。 またマクロは自分で記入しなくても ツール→マクロ→新しいマクロを記録する とすれば記録終了するまでの動作を自動的にマクロに記入してくれるため、プログラミングの知識がなくてもある程度のマクロなら自分で使えたりします。 いろいろ試してみるのも面白いですよ。ご参考までに。。

gogodharma
質問者

お礼

リ・リスト??? 知らない事だらけですね~。 確認してみたら2003でした。でも、どのように使えばいいのか良く分からなかったです。 まだまだ修行中ですので、すみません。これからどんどん勉強していきたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 少し試してみましたが、これは、#1 のmshr1962さんなどのフィルタ・オプションの場合は、Criteria ではできるのですが、複雑になりすぎますね。 データが、一見、テキストに見えますが、日付のシリアル値などが混在していますから、簡単には、それが出せないことに気が付きました。もちろん、これは、オート・フィルタ自身でも同じことですが、KenKen_SP さんがされたような、すべてをテキスト化して、まとめ、そこで、フィルタ・オプションや、オートフィルタで検索をすればよいと思います。 そこで、こちらは、フィルタ・オプションに、簡易マクロを使って行ってみることにしました。 最初を一行目にしていますが、データ側の行にあわせてください。 G1:補助列 G2:~ 下へフィルハンドル・コピー =TEXT(C2,"m月")&TEXT(D2,"m月")&TEXT(E2,"m月") J1:5 '←検索条件(Criteria) J2: = G1 (数式: [文字列と表示される]) J3: ="*"&J1&"月*" (数式:[この場合は5月と表示される]) ワークシートの下方の[シートタブ]を右クリックで、[コードの表示] "A1:G6"の部分は、最初の列から、「補助列」までの、実際のデータの広さにあわせてください。動かし方は、J1 に数字を入れるだけで、自動的に検索ができるようになっています。検索条件に、「0」を入れると、全てが表示されます。 '<シートモジュール> '------------------------------------------------------ Private Sub Worksheet_Change(ByVal Target As Range) Dim myCriteria As Range '============= 設定======================= ':データベースの範囲  Const myDataBase As String = "A1:G6" '←実際の場所を入れてください ':検索条件を入れる場所、ここではJ1  Const BaseRng As String = "J1" '←実際の場所を入れてください '=========================================== If Target.Address(0, 0) <> BaseRng Then Exit Sub 'Criteriaは、その下に置く--Criteriaの範囲は条件によって変わる Set myCriteria = Range(BaseRng).CurrentRegion.Offset(1) Application.ScreenUpdating = False If ActiveSheet.FilterMode = True Then  ActiveSheet.ShowAllData  If Range(BaseRng).Value = 0 Then GoTo EndLine End If Range(myDataBase).AdvancedFilter _        Action:=xlFilterInPlace, _        CriteriaRange:=myCriteria.Resize(myCriteria.Rows.Count - 1), _        Unique:=False EndLine: Range(BaseRng).Select '式を戻しておく Range(BaseRng).Offset(2).FormulaLocal = "=""*""&J1&""月*""" Application.ScreenUpdating = True End Sub

gogodharma
質問者

お礼

実は私はマクロを知らないのです! しかし折角の機会ですのでチャレンジしてみました。 モジュールをコピーするだけなのに四苦八苦してしまいましたが、やっと動いてきました~。 すごーい、すごーい。ビックリしました。 そこで厚かましいお願いなのですが、できれば●月◎日など、日にちの指定までして検索する場合は、どう書き換えればいいのかをご教授いただければありがたいのですが。 どうぞどうぞ、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 作業列を挿入して、行事の日付が入ったセルを全て連結し、その作業列で オートフィルターをかけて、「9月」を含む、というオプションで抽出すれ ば良いかと、、 例えば、 C列:入学式 D列:キャンプ E列:卒業式 F列:作業列 とするなら、 F1に次の式を入力し、データの終わりまでオートフィルでコピーします。 = TEXT(C2,"m月") & TEXT(D2,"m月") & TEXT(E2,"m月") F列にはご提示いただいたサンプルデータの場合、 4月6月中3月 4月8月10~14日3月 4月9月3月 4月7月24日・25日3月 9月4月24日・25日8月 こんな風に表示されます。そうしたら、この列にオートフィルターをかけ、 (オプション)で抽出条件を 9月 を含む に設定します。

gogodharma
質問者

お礼

なるほど~。 色々とアイディアがありますね~。皆様の知識と創造力に驚きました。マクロを知らない私にも、充分理解できました。 これからも、どうぞよろしくお願いします。 本当にありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。
  • sakeman
  • ベストアンサー率43% (67/153)
回答No.2

1.表の上に空白行を5行挿入(検索条件を設定するため) 2.例えばセルA1に「入学式」,セルB1に「キャンプ」,セルC1に「卒業式」、セルA2に検索する文字列「9月」,B3とC4にも「9月」と入力します。この場合、条件がANDの場合は同じ行に、ORの場合は今回のように行を変えて入力します。 3.データの表内のどこかのセルを選択し、[データ]→[フィルタ]→[フィルタオプションの設定]→[リスト範囲]を確認(自動的に入力されている筈)→[検索条件範囲]をドラッグして入力(この場合は「$A$1:$C$4」になります。→[OK] 4.これで「入学式」,「キャンプ」,「卒業式」に「9月」が含まれる行が検索されます。 ・日付のデータの書式は文字列などに統一してください。 ・検索条件を入力する行と表との間は1行以上の空白行を作ってください。(検索条件の表とデータの表を区別するため) ・元に戻す場合は、[データ]→[フィルタ]→[すべて表示] ・これを利用するとかなり複雑な検索も可能です。 お試し下さい。

gogodharma
質問者

お礼

早速教えていただいた通りにやってみました。フィルタオプションで絞込みできました! ただ、実際のデータでは、項目が20個もあって見た目の点でちょっと・・・。 ですが、教えていただいたフィルタオプションは色々と使えそうなのでこれからも活用してみます!! ありがとうございました♪

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

「データ」「フィルタ」「フィルタオプションの設定」を利用してみては? 空いている列に 検索月 入学式   キャンプ 卒業式 9月   =$AA$2&"*"           =$AA$2&"*"                =$AA$2&"*" ※9月のセルがAA2としています。 「データ」「フィルタ」「フィルタオプションの設定」で 抽出条件範囲をAB1:AD4として実行 詳細はヘルプを確認してください。

gogodharma
質問者

お礼

フィルタオプションを初めて理解しました。ここに質問してよかったです。 ありがとうございました☆

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelでの行数での絞り込み

    A列に日付が入っています。 オートフィルタで「○月○日~○月○日まで」の絞り込みはわかるのですが、 「○月○日以降30行分」 といった絞り込みは可能でしょうか?

  • データベースの絞り込み検索について

    現在、sqlサーバーにてフォーム上にデータセットして、データを検索するシステムを作成中です。 データの更新や読込、変更等については、うまく動作しているのですが、検索・抽出についてうまくできません。 例えば、コンボボックスを2個配置して、絞り込み検索をかけようとするのですが、1個目でデータバインドされた項目を選択し、2個目では1個目に該当するデータのみを抽出させたいのです。 うまく伝えられないのですが、エクセルの機能でいえばオートフィルタのような動作です。 どのようにすれば良いのでしょうか?

  • エクセルで曖昧検索および絞込みをしたい

    エクセルでなんですが、あいまい検索・かつ絞込みを行いたく。。 ここでは品番検索の簡易システムとして使いたく、 例えば   A   B    C   D (1) メーカー  車種   品番  単価 (2) トヨタ マジェスタ   ABC  10,000 (3) トヨタ ソアラ   BBO  5,000 (4) トヨタ セルシオ  MFR  1,000 (5) 日産  セフィーロ   MMFR  1,500 (6) トヨタ センチュリー   JUGY  9,000 上記のようなデータがSheet1にあり、 Sheet2の特定項目に、例えば「トヨタ」の「ト」をいれたら 同じSheet2の特定項目の下にトの分が一覧で表示される。 (ここで言えば見出しの(1)と、(2)(3)(4)(6)の行) また、車種の項目に車種を、これも同じように「セ」と入れると、 先ほどの一覧中、セで始まる分だけがさらに絞り込まれ、 同じく一覧で表示される。(ここで言えば(1)と、(4)(6)の行) オートフィルタを使えば?と言われそうですが、 リストから該当するものを選ぶのでなく(選択する種類が 多すぎるため)、入力をさせたいのです。 色々調べてみたのですが見当がつかず。。 分かりそうでしたら教えていただけると助かります。 どうかよろしくお願いします。

  • 例えば、8月1日~8月31日の“~”中にある日(8月15日など)を抽出したいです!

    エクセル2003を使っています。 一つのセルに、『8月1日~8月31日』などと入力しています。 オートフィルターを設定しておいて、オプションの中で、例えば“8月15日/を含む”にした場合に、 先程の『8月1日~8月31日』の行が表示されるようにしたいです。 オートフィルターでできますか?オートフィルターでできないなら、どのようにすればできるでしょうか? どうぞよろしくお願いします。

  • エクセル オートフィルタで絞り込みをしたデータの色つけ

    エクセル2007を使用しています。 オートフィルタで絞り込みをしたデータの数列をまとめて色つけしたいのですが、 できる時とできない時があり、なぜできる時とできない時があるのかその違いも判りません。 数件でしたら諦めて一つ一つセルを選択して色をつけるのですが、 100件近くなるとこの作業がむなしくなってきてしまいます。 どなたかご教授下さい。よろしくお願いいたします。

  • オートフィルタ絞込みの後、データ数のカウント方法

    オートフィルタで絞込みをした後、データ数のカウントをする方法を教えてください。 例) エステ店の来客状況をエクセルに入力しています。 A列 日付 B列 曜日 C列 氏名 D列 性別 E列 身長 F列 体重 こんな感じで日々の来客数とそのデータを入力しているとします。 ある程度データが蓄積したところでオートフィルタでデータ分析したいと思います。 たとえば曜日別の来客数を調べたい時、オートフィルタで曜日を選択して、絞り込んだ結果のデータ数を数えればいいと思います。 =SUBTOTAL(2,B10:E999) とやれば「第10行から第999行の間で、絞り込んだ結果、現在表示されている行の数」を表示してくれます。 ここで一歩踏み込んで、 「曜日別に絞り込んだ後、トータル来客数ではなく、各日付ごとの来客数をカウントする方法」を知りたいです。 たとえば先月でしたら 2010/10の毎週月曜日の来客数は 10/4(月) ●人 10/11(月) ●人 10/18(月) ●人 10/25(月) ●人 という内訳がわかるようにしたいのです。 やり方を教えてください。 できれば、 1 出来合いの機能での方法 2 関数を組む方法 3 それでだめならマクロ の優先順位でおねがいします。

  • エクセルのオートフィルタで、あるデータにオートフィルタをかけたあとに他

    エクセルのオートフィルタで、あるデータにオートフィルタをかけたあとに他のエクセルデータから データを貼り付けようとするとうまくいきません。 たとえば、オートフィルタをして30行あったものが10行に選択されたとき、その10行に他のエクセルデータから10行のデータを貼り付けたら4行くらいしか貼り付け出来ませんでした。 これはどうしてですか?わかる方がいれば教えてください。

  • エクセルで絞込み検索をしたいのですが。

    エクセルで絞込み検索ができないものかと頑張っているのですが知識が足りずできません。 具体的にどういった動作をさせたいかというと、画像を参照していただき、、 ”お客様登録シート”側にそれぞれ情報を登録して、そのデータを”入力シート”側の赤く塗りつぶしたセルそれぞれに検索結果を表示させたいのです。 黄色く塗りつぶしたセルに検索ワードを入力して検索。 登録年月日、又はフレームNo、もしくはその両方に該当する行の情報を出したい、ということです。 そのような、絞込み検索かつ指定した複数のセルにそれぞれの結果を表示させることは可能なのでしょうか? できれば関数でしたいのですが、マクロでないとできないということであればその方法を教えていただきたいです。 関数は少々かじっている程度。 マクロについてはほぼ初心者です。 文才もなく伝わりにくい説明かと思いますが、わかりやすいご回答をよろしくお願いします。

  • オートフィルタで絞り込んだ後の行の数え方

    初歩的な質問ですみません。 エクセルのオートフィルタ機能を使って 重要度の「高」「低」に分けて絞り込みをしました。 「高」が何行あって「低」が何行あるかを 数える方法がわかりません。 「高」に絞込んだ後 普通に右下に「+」が出てドラッグして数える方法が 効かないんですよね。 そんなことで悩んでおります。 よろしくお願いいたします。

  • Accessで絞り込み検索

    ものすごくフィールドの多い取引先管理台帳のExcelファイルをAccessへのデータベース の移行作業をしています。主キーは取引先コードです。Excelファイルのブックを縦に切 り分けして20個程度のAccessテーブルにしてあります。特定のレコードの全情報を見るこ とができる詳細情報画面は作成しました。 Excelのオートフィルタのように段階的な絞り込みの機能を実現する必要があります。 (1)最初のクエリを実行した結果に次のクエリを実行するにはどのような操作が必要でし ょうか。 (2)クエリの実行結果を眺めて任意の一レコードを選択し、詳細情報画面を表示させるに はどのような操作が必要でしょうか。 私はExcelのVBAのプログラム経験があります。「操作」の部分を「コード」と考えて頂い ても結構です。 質問事項の中に曖昧な部分がありましたらご指摘下さい。

専門家に質問してみよう