• ベストアンサー

Excel2007:複数列を対象としたフィルタ

Excel2007で複数列を対象としたフィルタを行いたいのですが、どういう方法がありますでしょうか?(ピボットテーブル、マクロを使うのも可) 添付画像の表(1)が表(2)の中に存在しうる単語です。 たとえば「大阪」という文字列を選択すると表(2)の行3,4が抽出され、「朝日」の文字列を選択すると行1,2,4を抽出。「英語」であれば1行も抽出されないといった具合です。 実際には行・列・対象となる文字列ともに例よりも多い数での使用を考えています。また、表(2)の値は変化しえますが、そのたびに数式を見直したりといった手間は無いほうが良いです。 一旦テキストに落としてgrepとかも無しで、Excle内で完結させたいと思っています。 よい解決策を教えてください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

少なくとも「オートフィルタ」では出来ません。 フィルタの詳細設定(2003以前では「フィルタオプションの設定」。オートフィルタのオプションではないので注意)を利用すれば出来ますが,マクロでいいならマクロを使った方が簡単です。 サンプルマクロ: 検索したい言葉をどうやって与えたいのか不明なので,仮に「大阪」で固定にしときます。 検索対象範囲の与え方も不明なので,仮にSheet2のC2:G6の場合。 実際のシートはご質問で例示されたのとは色々違うという事なので,適宜工夫してください。 やってることは簡単で,言葉が有った行を表示し,無かった行は非表示にしています。 sub macro1()  dim s as string  dim c as string  dim target as range  dim res as range  dim h as range  s = "大阪"  set target = worksheets("Sheet2").range("C1:G6")  set res = worksheets("Sheet2").range("C1")  set h = target.find(what:=s, lookin:=xlvalues, lookat:=xlwhole)  if not h is nothing then   c = h.address   do    set res = union(res, h)    set h = target.findnext(h)   loop until h.address = c  end if  target.entirerow.hidden = true  res.entirerow.hidden = false end sub

anonym
質問者

お礼

ありがとうございました。 頂いた回答を元にマクロを作ったところ、私のやりたかった事ができるようになりました。とても助かりました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

表は2行目からデータが入っているとして、列は例えばX列まで利用されているとしたらY1セルに検索の文字列を入力します。Z2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A2:X2,Y$1)>0,1,"") ある行に検索の文字列があればZ列には1が表示されます。 1行目を選択してから「ホーム」タブの「並べ替えとフィルタ」から「フィルタ」を選択します。 その上で、Z1セルの▼を操作して1を選択するようにすればよいでしょう。

anonym
質問者

お礼

ありがとうございました。参考になりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 とりあえず、検索条件は一つということでの方法になります。 ↓の画像のようにSheet2のデータをSheet3に抽出するようにしてみました。 Sheet2に作業用の列を使わせてもらっています。 作業列G2セルに =IF(COUNTIF(B2:F2,Sheet1!$B$2),ROW(),"") という数式を入れ、オートフィルで下へずぃ~~~!っとコピーします。 そして、Sheet3のA2セルに =IF(COUNT(Sheet2!$G:$G)<ROW(A1),"",INDEX(Sheet2!A:A,SMALL(Sheet2!$G:$G,ROW(A1)))) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、空白セルに「0」が表示されてしまいますので 当方使用のExcel2003の場合ですが メニュー → ツール → オプション → 「表示タブ」で 「ゼロ値」のチェックを外しています。 これでSheet1のB2セルに検索したい項目を入力すると Sheet3にその項目を含む行が表示されると思います。 以上、参考になれば良いのですが 他に良い方法があれば読み流してくださいね。m(__)m

anonym
質問者

お礼

ありがとうございました。 今回はNo.1さんの回答で問題を解決しましたが、この回答も私が思いつかなかったよいアイディアであり、今後の参考になります。 丁寧に画像まで貼り付けていただき、たいへん感謝しております。

関連するQ&A

  • Excel2007でのフィルタ抽出がうまく行きません。

    Excel2007でのフィルタ抽出がうまく行きません。 あきらかに存在する項目名が抽出対象項目の中になかったり、数値項目で抽出すると 10行あるのに5行しか抽出されない。などです。 類似のシートが10あり、平均5000行の表です。正しく抽出されるシートもあります。 どこがどう違っているのか特定不能です。 抽出対象から漏れる行があるということは、特定条件に合致した行の項目を加減乗除する 数式を入れてあるのですが、それも漏れている可能性アリでしょうか? だとすれば、電卓片手に全項目の検算?をみなさんやっているのでしょうか?

  • 秀丸での数列・文字列検索

    初心者ものです。 EX) 下記の数列で、“10000”の数列を含まない行をGrepしたいと考えています。 検索する文字列にはどのような表記をすればよいのでしょうか? 00435678323059190583100001 003230591905831000016778990 003230591905830042019001 003230591905831000012678919 0032305919058310000136272 0037262323059190583100001 00323059192305831000012763 ・ ・ ・

  • Excel2010フィルターの文字を大きく表示法は

    Excel2010で行の文字を抽出する時フィルターから列に入っている文字を選択する場合 ディスプレイは24”を使用しているのでデーターはそれなりに調整できるのですが 出て来る一覧表の文字が同じで小さいので私としては小さすぎるので探すのに見えにくいのです、 テキストフィルターではそれなりに大変なので一覧表の大きさを(変更=文字を大きく) する方法は有りませんでしょうか? 以前にも問い合わせたのですが ->読めるのだから   ー>小さくは無い等の回答で 私にとっては読みにくい=探しにくい=時間がかかる のでよろしくお願いいたします

  • 複数の文字列を検索

    あるログファイルの文字列を取得して。検索でヒットした文字列行 を返すスクリプトを作成しております。 検索:"OK"    日付 対象行 : OK! Tue Jul 19 文字列"OK"は普通に # grep "OK" ログファイルPath で検索できますが、 文字列と日付を両方引っ掛ける場合は・・・ grep -e "OK" -e env LANG=c date -u +"%a %b $d" ログファイルPath 当然コマンドエラーになります。 dateコマンドから日付を取得して、grepにて引っ掛ける方法を知りたいので すが、お分かりになる方、ご教授お願い致します。

  • 複数列の一致する行を検索する数式はありますか?

    2007でブロック別の10のブックに分けたデータがあり、その中で特定の複数列が一致するデータを、現在は数列をフィルタ抽出し、それと一致するものが他の列にあるかどうか、対象列を変えて調べる、というムダかな?とも思えることをやっています。 実際の表とは別に仮定として質問させていただきたいのですが、A~C,D~F,G~Iの各3列ごとに異質ではあるが表示を同一としているデータがあるとして、調べた結果、ABCが5,10,15であるものが100,500,1000行目に、CDFが5,10,15であるものが1500,2000行目に、G H I が5,10,15であるものが3000行目にあることが判りました。 このケースで3列の組合せ一致があるかないかは調べてみないと判らないのと、フィルタをかける場合、最初に基準にする3列をどれにするかで異なるのと、全てを調べるには何年かかるのかな?という感じです。 全表の中で、同じ組合せがあるなら、それはどんな組合せで、どこにあるか、を調べる数式はあるのだろうか?という疑問をもっています。 VLOOKUPについて本を調べてみたのですが、検索する指定値が決まっているわけではないので違うかな?と思っています。 関数はSUMとCOUNTを少し活用できるようになったかな?のレベルです。 よろしくお願いします。

  • 指定した文字列を含む行から、指定した文字列を

    含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。 対象ファイルに結果を上書きでもかまいません。 指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。 例) 東京都 新宿区 <start123AAA> 東京都 港区 <end>AAABBB 東京都 目黒区 どのファイルにも必ず<start と<end の文字列があります。(必ず1組です) <start の文字列を含む行から <end の文字列を含む行までを 抽出したいのです。 (欲しい結果↓) <start123AAA> 東京都 港区 <end>AAABBB フリーのエディタソフトのgrep、grepのマクロ、バッチでできないものかと試してみているのですが どうしてもうまくいきません。 抽出したい範囲、削除する範囲には禁則文字?が入っているのでバッチは難しいのでしょうか? できればバッチで処理できればなと思っているのですが、うまくいきません。 (<>!""/ あたりが入っています。別の文字に置き換えることは可能です) 範囲を抽出ではなく、 <startを含む行の一つ上の行から前を全て削除 <endを含む行の一つしたの行から後を全て削除 する方法や VBAで、スタート行をとエンド行をSearchして抽出する方法など ご教授いただきたくお願い致します。

  • Excel2003 オートフィルタで「*」を抽出

    Excel2003でオートフィルタを使って文字列「*」を含む行を抽出したいのですが、どのようにすれば抽出できますか?

  • 正規表現

    テキストファイルからコメント行以外から文字列"bbb"を含む 行をgrepで抽出したいと思っております。 コメント行→"#"で始まる行と"--"で始まる行 先頭にスペースがある場合もあるので、結局 先頭に「0個以上のスペース+("#"or"--")」がある行は対象外 として、文字列"bbb"を含む行をgrepで抽出したいと思っています。 下記、foo.txtの中から下記の抽出対象の2行のみを抽出したい場合、 どういった正規表現を書けばいいか教えてください。 【foo.txt】 aaa bbb → 抽出対象 aaa bbb →抽出対象 # aaa # bbb →抽出対象外 #aaa # aaa --aaa --aaa -- aaa -- bbb →抽出対象外 -aaa -bbb - aaa ご存じの方がいらっしゃいましたら、よろしくお願い致します。

  • エクセルのマクロで特定の文字列を選択したい

    集計表にピボットテーブルを2つ入れるマクロを作成しています。 その際に、出来あがったピボットテーブルの項目ごとの合計を 表示しないためには、対象となるセルを選択して(Select) 表示しないを選択する(Selection.Delete)ことはマクロの記録からわかりました。 しかし、ピボットテーブルの枠が固定されているわけではないので、 合計欄の選択がうまくできません。 結果的には、A列の何行目かに「B在庫」という文字列が表示されていて、 その下からピボットテーブルが作成されています。 その「B在庫」の文字列から「右に3、下に2」と「右に1、下に5」 進んだセルをそれぞれ指定して(Select)削除(Selection.Delete)したいと思っています。 どのように「B在庫」と入力された文字列を探し出すのか、 また、そこから「右に3、下に2」と「右に1、下に5」進んだセルを 指定する方法を教えていただけないでしょうか。

  • エクセルのオートフィルタ機能について教えてください。

    エクセルのオートフィルタ機能を使って列にチェックマークがついているもののみ抽出したい場合、「空白以外」を選択しても、行の途中からフィルターがかからなくなってしまうことがあります。 フィルタは行タイトルにつけてあります。 なぜでしょうか?

専門家に質問してみよう