• ベストアンサー

EXCELでオートフィルタのような条件検索を関数を使って作りたい!

いつもお世話になっております。 タイトルのごとく、EXCELでオートフィルタのような条件検索を関数を使って作りたいのですが、 たとえば、フォームのコンボボックスを複数設置し、その条件にあう答えを、特定のセルに表示させたいと思っています。 コンボボックスは20個ほど(すべての条件が揃わなくても結果がでるようにしたいと思っています)、その答えは100個ほどあります。 かなり手間になるかもしれませんが、どなたかご教示願います!

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

  • ベストアンサー
  • Miusuke
  • ベストアンサー率20% (5/25)
回答No.3

「関数による条件検索」ということであれば、 頑張って条件を作れば出来ると思います。 ~流れ~ (1)コンボボックスに表示させる内容をつくります。  (名前の定義) (2)上記(1)で作った選択肢の選択肢を作ります。  (こちらも名前の定義) (3)入力規則を利用して、(1)で選択した内容から(2)で更に条件を絞れるようにします。 (4)任意のセルに、今表示されている一番詳細な条件が表示されるようにします。(IF文) 条件が沢山あるみたいなので、条件2個バージョンで行きます! *やりかた* ■シート1   │A  B C D ------------------- 1 │ a a b c 2 │ b あ か さ 3 │ c い き し (1) 挿入→名前→定義で 名前:選択肢 範囲:=Sheet1!$A$1:$A$2 (2) 挿入→名前→定義で 名前:a 範囲:=Sheet1!$B$2:$B$3 (2) 挿入→名前→定義で 名前:b 範囲:=Sheet1!$C$2:$C$3 (2) 挿入→名前→定義で 名前:c 範囲:=Sheet1!$D$2:$D$3 ■シート2 A1セル選択→データ→入力規則→設定→入力値の種類:リスト→元の値:=選択肢 B1セル選択→データ→入力規則→設定→入力値の種類:リスト→元の値:=INDIRECT(A1) A3セル:=IF(A1="",IF(B1="","",B1),A1) コンボボックスを20個作るとなると、 aが選択された場合の名前の定義 bが選択された場合。。。。。。 と、かなり沢山の条件を作成したシートを作らなければいけないので 大変だと思います。 ただ、このやり方なら条件を変更したい時など、別シートに再度入力すれば良いので、 自分以外の人が触る場合もやり方を教えれば大丈夫と思います。 条件作成の表を分かりやすく作成することも工夫が必要ですね。。。 こんな感じでいかがでしょう??

acmr
質問者

お礼

Miusuke様、お忙しいところ、本当にありがとうございました。 早速チャレンジしてみます。 VBAじゃないとダメなのか、諦めておりました。 本当に感謝しております。

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

その他の回答 (2)

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

こんな問題は、当然VBAなどを勉強のこと。 VBAができないならあきらめること。 何でも質問者がしたいと思えば、関数程度でできると思うのは大間違い。 他人に回答をもらうのでなく自分のその方面の力を蓄えること。 関数は抜き出しは苦手です(それには理由があります)。 20条件などとんでもない。複雑すぎる。 1条件でも難しいが。 とりあえず1つのやり方を説明します。 例データ Sheet2とShee3を使う(理由はない) Sheet2に A2:B8(C列は式結果) 大村 石川県金沢市 木下 石川県輪島市 鈴木 東京都青梅市 1 佐藤 三重県津市 山田 北海道津市 近藤 愛媛県西条市 浅野 東京都青梅市 2 C2に =IF(NOT(ISERROR(FIND(Sheet3!$B$1,$B$2:$B$10))),MAX($C$1:C1)+1,"") と入れて下方向に式を複写する。 結果上記C列の通り。 ーー Sheet3にいって、条件をB1セルに入れる。 この場合「青梅市」と入れる。 Sheet3の A2には =INDEX(Sheet2!$A$2:$B$10,MATCH(ROW()-1,Sheet2!$C$2:$C$10,0),1) b2に =INDEX(Sheet2!$A$2:$B$10,MATCH(ROW()-1,Sheet2!$C$2:$C$10,0),2) と入れて、下方向に式を複写する 結果 青梅市 鈴木 東京都青梅市 浅野 東京都青梅市 B1を 「輪島市」に変えると瞬時に 輪島市 木下 石川県輪島市 #N/A #N/A #N/Aが出ないようにする手ももちろんありますが、内容があれこれに なるので略。 以上はimogasi方式といっています。WEBでimogasi方式で照会すれば1条件抜き出しの、過去の質問の他の回答者の回答も見られます。 ーー 同じ考えで2条件ぐらいまでは、式を複雑化すれば対処できそうですが、それ以上は複雑になりすぎる。

acmr
質問者

お礼

早速のご回答、ありがとうございます。 勉強不足で失礼いたしました。 しかも詳細な解説を頂き、感謝しております。 ご回答を参考にして、マクロを勉強してみます。

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

質問の内容を実現するためにはアドバンスドフィルタの機能を理解する必要があります。 まずSheet1に以下のデータがあるとします      A列  B列  C列 1行目 品名  日付  数量 2行目 りんご 1月1日  1 3行目 りんご 1月1日  6 4行目 みかん 1月1日  14 5行目 りんご 1月2日  2 6行目 りんご 1月2日  7 7行目 みかん 1月2日  15 8行目 りんご 1月3日  3 9行目 りんご 1月3日  8 10行目 みかん 1月3日  16 次にSheet2に検索条件を入力します      A列  B列  C列 1行目 品名  日付  数量 2行目 りんご 1月2日 (空白) 「データ」→「フィルタ」→「フィルタオプションの設定」を選択し「指定した範囲」にチェックをつけて、   リスト範囲 「Sheet1!$A$1:$C$10」   検索条件範囲「Sheet2!$A$1:$C$2」   抽出範囲  「Sheet2!$D$1」 をそれぞれ指定して「OK」してみてください。 すると      D列  E列  F列 1行目 品名  日付  数量 2行目 りんご 1月2日  2 3行目 りんご 1月2日  7 が抽出されるはずです。 毎回フィルタオプションのパラメータを指定するのは大変ですから、マクロにしてしまえばいいですね。マクロサンプルも書きました。 以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 Sub Macro2() Dim lastR As Long lastR = Sheets("Sheet1").Range("A65536").End(xlUp).Row With Sheets("Sheet2")   Sheets("Sheet1").Range("A1").Resize(lastR, 3).AdvancedFilter _       Action:=xlFilterCopy, CriteriaRange:=.Range("A1:C2"), _       CopyToRange:=.Range("D1"), Unique:=False End With End Sub コンボボックスは検索条件を入力する手段ですから、それは好きにしてください。手で入力しても、コンボボックスから選択しても検索条件が入力できればアドバンスドフィルタで抽出が可能です。 質問文に書いてある情報が乏しいのでアドバイスできるとしたらこんなところでしょうか。後はご自身で勉強してみてください。フィルタオプションの設定を行うときに「ツール」→「マクロ」→「新しいマクロの記録」でマクロ記録をとってみれば勉強のとっかかりになると思います

acmr
質問者

お礼

早速のご回答、ありがとうございます。 やはり関数では無理ですか。 勉強不足で失礼いたしました。 ご回答を参考にして、マクロを勉強してみます。

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

関連するQ&A

  • エクセルのオートフィルタで抽出できない

    エクセルのオートフィルタでデータを抽出しようとしていますが、あるレコード以降のデータからは条件にあっていても抽出されません。このあるレコードははっきり特定できません。 およそ4000以降くらいかと思われますが・・ この表の中に空白行はありません。 コンボボックスがありますが、何か関係ありますか? よろしくお願いします。

  • Excelでオートフィルターをかけているのですが

    よろしくお願いします。 Excel2000でオートフィルターをかけ、 指定した内容のみを表示させています。 この表示されている数字だけをSUM関数などで 計算させたものを特定のセルに出したいのですが、 どうすればよいのでしょうか?

  • オートフィルターのような機能をフォーム上で VBA

    いつも大変お世話になっております。 Excel2003を使用しております。 フォーム上で、オートフィルターのような機能を作りたいと思っています。 http://okwave.jp/qa/q8423348.html 過去の質問のプログラムを何度も使わせて頂いております。 フィルターをかけたら、可視セルを抽出し、コンボボックスに登録…ということを しています。 フォーム上のコンボボックスが変更されたら フィルターをかけ、コンボボックスのリストを更新するようにしていますが、 更新したときに、またフィルターをかけてコンボボックスを更新してしまい どうしたら上手く処理がいくのか分からなくなってしまいました。 現状、 Combobox1_Changeのとき、  If Combobox1<>"" Then   フィルターをかける   コンボボックスのリストを抽出する   コンボボックスを更新する  Else   フィルターを全開にする   コンボボックスのリストを抽出する   コンボボックスを更新する  End if こういった手段をとっています。 しかし、このままですとコンボボックスを更新するときに 毎回フィルターが全開?になってしまいます。 何か良い方法があれば、教えて下さい。 よろしくお願い致します。

  • excelでSUBTOTAL関数を設定したのですが、オートフィルタをか

    excelでSUBTOTAL関数を設定したのですが、オートフィルタをかけるとSUBTOTAL関数を設定したセルが消えてしまいます。 セルが消えないようにするにはどうすればいいんでしょうか。

  • エクセルのオートフィルターの使い方

    エクセル2010で1000行程度の表からオートフィルターで必要な情報を抽出しているのですが、該当する条件を▼セルで探すのも面倒なので、所定のセルに条件を入力したらオートフィルターで抽出できる方法があれば教えてください。

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

  • excleのオートフィルタの関数というか・・・

    なんと質問すればいいか・・ 基本的にそういう関数があるか無いか? 知りたいのです たとえばAの列に 2 4 3 6 1 2 1 4 5 3 など入っていて、オートフィルタをすると、 ドロップダウンボックスの選択する部分で 1 2 3 4 5 6 となりますよね? つまり、指定の範囲の中から、単独の項目を引き出したいのです オートフィルタがその機能があるのだから それを作る関数ってエクセル持ってるはずですよね? でもその関数がわからないんです どなたかご存知ないですか?

  • エクセルのオートフィルタについて

    エクセルのオートフィルタについてですが、一番取り扱いに困っている所は、社員の給与リストとかで、ある特定のデータ、例として事務員(一つの行の例えば一つのセルに名前、一つ横のセルに給与の数字(数値データ)がはいっている)を抽出した場合(事務員の記号がどこか同じ行にはいっているとして)数値の列を開いているセルで関数処理したい場合、表示されている数字だけを処理する場合と隠れている(多分)データも処理してしまう場合があり大変戸惑っています。なんとかどちらかに統一したいのですが、自分なりに調べましたが分かりません。どなたかご存知ないでしょうか。また、このオートフィルタで特定の数字や文字を抽出しようとしてもうまくいく時とそうでない時があります。なぜなのでしょうか。これはバグと考えても?

  • エクセルのオートフィルタについて

    エクセルのオートフィルタオプションで、複数条件での抽出ができます。ここで、「◎◎と等しいAND△△で始まる」という抽出条件ができるかと思いますが、3つ以上の条件で抽出することはできないのでしょうか?

  • エクセルのオートフィルタ機能について

    エクセルのオートフィルタ機能について エクセルのオートフィルタで、オプション機能を使えばそのセルの一部の文字(例「田中太郎、田中次郎」がセルの項目のとき、抽出条件を「田中」+「含む」とする)を含む全てのセルを抽出できますが、オプション機能を使わずに、最初からオートフィルタのリストとしてセルの項目の一部分(例の「田中」)を設定しておくことは可能でしょうか?

着信中のまま使用できない
このQ&Aのポイント
  • 着信中のまま電話機能が使えない
  • パソコンもしくはスマートフォンのOSは何ですか? 有線LANで接続されています。
  • アナログ回線を使用しています。
回答を見る

専門家に質問してみよう