[[20120825224337]] 『一つのエクセル内で二つの検索シート』  ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『一つのエクセル内で二つの検索シート』

データの入ったシートが二つあり(シート1)と(シート2)とします。
それぞれに色々な項目が列A1からBA1まで2000行くらいあります。

(シート1)のデータを検索するシート(検索シート1)と
(シート2)のデータを検索するシート(検索シート2)をつくり
該当のデータを絞り込んで表示させたいと考えています。

(検索シート1)のA1に検索したいキーワード(複数の項目可にしたいです:
シート1のA3が住所・A4が電話番号・A5が数字列を検索するように)
を入れて、エンターを押せばA3の位置から、
検索キーワードにひっかかった(シート1)のデータの行が何行もでてくるようにしたいです。
同じく(検索シート2)でも同様に、同じエクセル上で同じ機能にしたいです。

コピーできるコードをそれぞれ書いてもらえませんか??
よろしくお願いします。エクセル2003です。
(のり)


 フィルタオプションによる抽出作業となります。
 これはエクセルに備えられた機能であり、キーワードの入力から、データの抽出まで手作業になります。
 これをマクロ記録して整理すれば「コード」が得られます。

 この機能を実行するマクロを作ったとして、操作としては

 1.検索シート上で、データシートの、どこかの列に対する検索語を入力
 2.抽出されたデータが検索シートに表示される

 こうなるよね。

 としたら、データシートそのものにオートフィルターを設定しておいて
 (毎回やる必要はない。一度設定しておけばOK)

 1.データシート上で任意の列に対して検索語を指定
 2.データシート上に抽出されたデータが表示される。

 操作としては同じだよね。
 複数列に対するAND条件の絞り込みもできるし、○○で始まる といったものも □□ 〜 ■■ の範囲のもの
 といった抽出もできる。

 で、ここまでであればマクロは不要。

 抽出されたものだけを、検索シートにコピーしたいのなら、
 ・データシートのセルをすべて選んで Ctrl/c
 ・検索シートのA1を選んで Ctrl/v

 で、絞り込まれた状態のデータシートをすべて表示された状態に戻したければ、データメニューのフィルターからすべて表示を選ぶ。

 これもマクロ不要だね。

 この一連の操作をマクロで実行したいなら、1.と2.は、人間の操作なのでマクロは不要。
 だから、Ctrl/c と Ctrl/v のところとオートフィルターで絞り込まれた状態の解除のところだけの操作をマクロ記録して、それを使えばOK。

 追記)絞り込んで、マクロ実行をするのではなく、絞り込まれたら自動的にマクロ実行させることも
    上記で記録して作ったマクロに、ちょっと、塩こしょうで味付けすれば可能。
    でも、まず、上記の操作だけで、あるいは一部をマクロ記録して実行。
    これをやってみて。

 (ぶらっと)

すいません よく理解できませんでした・・・

目的はお客さんと電話での話をしながら、すみやかに相手について割り出すのが目的です。
登録外の電話番号でかかってくることも多く、複数の条件で検索しなくては特定できないことが
たびたびです。

オートフィルターの機能では、複数検索をそれぞれ毎回しなくてはならないということでしょうか?
電話対応中の作業では、できれば簡単に「キーワード入力」のひと手間くらいで検索をしたいです。

 (複数列に対するAND条件の絞り込みもできるし、○○で始まる といったものも
 □□ 〜 ■■ の範囲のものといった抽出もできる。)
というのがオートフィルターでどうやればいいのか
わかりません・・・・
(のり)


オートフィルタの使い方です。簡単ですので、試してみてはいかがでしょうか(マナ)
  
http://www.eurus.dti.ne.jp/yoneyama/Excel/filter.htm
  

 マナさんご紹介のページは、とてもわかりやすいので一度、目を通しておいてね。
 また、「学校」内にも
http://www.excel.studio-kazu.jp/lib/e1L/e1L.html
 ここで、わかりやすく説明されているので参考にしてね。

 >オートフィルターの機能では、複数検索をそれぞれ毎回しなくてはならないということでしょうか? 

 オートフィルターじゃなくても、お客さんとの電話の中で、産地が山梨ということだと、産地フィールドに対して
 山梨 という検索語を入力しなきゃいけないし、商品が ブドウ なら 商品フィールドに対して ブドウ と
 指定しなきゃいけないよね?

 (IT一般としては最近は音声で指示できる手法もあるようだけど)

 いずれにしてもオートフィルターは、非常に便利で強力なツールなので知っておいて損にはならないと思うね。

 (ぶらっと)

 もし、用途がコールセンタで、客先からの電話を受けながら素早くデータを抽出するというもので、
 オートフィルターでの項目の▼を選んで、そこに表示されるドロップダウンリストから目的のものを選んで・・
 という操作すら、節約したいということなら、たとえばの方法として、同じオートフィルターなんだけど

 「準備」

 1.データシートを 4行目をタイトル行、5行目からデータ行
 2.このリストにオートフィルターを設定
 3.1行目に4行目のタイトル行をコピペ

 「操作」

 2行目の抽出必要項目のところに、抽出すべきキーワードを入力。
 とりあえずFrom/Toはサポートしていないけど、ABC といれれば ABC のものが抽出される。
 *ABC* なら 途中に ABC があるもの、ABC* なら ABCから始まるものが、*ABC ならABCでおわるものが抽出される。
 クリアすれば、その列の全データが表示される。(抽出がリセットされる)
 必要な項目について、上記入力を行うと、この列がこれ、かつ、この列がこれ・・・と
 AND条件で絞り込まれる。
 該当のものがその列にない場合はセルが赤くなる。

 「コード」

 データシートのシートタブを右クリック、コードの表示を選んででてくる場所(シートモジュール)に以下をコピペ。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a As Range
    Dim c As Range
    Dim r As Range
    Dim x As Long

    With Me.AutoFilter.Range
        Set r = .Rows(1).Offset(2 - .Row)
        Set a = Intersect(r, Target)
        If a Is Nothing Then Exit Sub
        For Each c In a
            x = c.Column - r.Column + 1
            c.Interior.ColorIndex = xlNone
            If Len(c.Value) = 0 Then
                .AutoFilter field:=x
            Else
                If WorksheetFunction.CountIf(.Columns(x), c.Value) = 0 Then
                    c.Interior.Color = vbRed
                Else
                    .AutoFilter field:=x, Criteria1:=c.Value
                End If
            End If
        Next
    End With
 End Sub

 (ぶらっと)

なるほど すごいです
アスタリスクを入れるのがちょっと手間がかかりますが
断然早く絞り込みできそうです。

ありがとうございました。

(のり)


 区別させないで ABC といれれば、最初でも途中でも最後でも ABC があるものを抽出という条件なら

 If WorksheetFunction.CountIf(.Columns(x), c.Value) = 0 Then

 これを

If WorksheetFunction.CountIf(.Columns(x), :="*" & c.Value & "*"
) = 0 Then

 また
 .AutoFilter field:=x, Criteria1:=c.Value
 これを
 .AutoFilter field:=x, Criteria1:="*" & c.Value & "*"

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.