dポイントプレゼントキャンペーン実施中!

EXCELの顧客管理表に検索機能を追加したいと思っています。
概要は以下の通りです。

・Sheet1を顧客データ一覧、Sheet2を検索用シートとし、Sheet2の上段に検索したい
単語又は日付を入れ検索ボタンを押すと、Sheet1のリストからデータを抽出しSheet2中段以降に
表示、が理想です。
・Sheet1の顧客データは、毎日数行ずつ追加します。
項目は「日付」「顧客名」などB1~M1まで入っています。

似た質問を調べ、↓の状態までは設定できました。

・Sheet2のB1~M1にSheet1同様の項目を作っておき、抽出したい項目の2行目に
検索対象文字を入れる。
(例 B1の項目が日付の場合、B2に”2007/01/16”)
Sheet2に作った「検索ボタン」を押すと、Sheet2の4行目
以降に検索対象文字を含むデータが抽出される。
(4行目にもSheet1同様の項目を入れています。)
ちなみに、検索ボタンのマクロの内容は以下の通りです。

Private Sub 検索_Click()
Worksheets("顧客入力").Range("顧客データ").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("B4:M5"), CopyToRange:=Range("B8:M1063"), Unique:=False
End Sub

※顧客データ・・・Sheet1の顧客リストに定義している名前
※顧客入力・・・Sheet1の名前

これで基本的な検索はできるようになったのですが、日付指定に関して足りない部分があります。
特定の日付指定は可能なのですが、2007/01/01~2007/01/31のような範囲の指定ができません。
また、文字列の検索で「~から始まる」検索は出来るのですが「~を含む」検索が出来ません。

マクロ初心者なのでどこをどう変えればいいのかが分からず困っています。ご教授いただければ助かります。

A 回答 (2件)

こんばんは。

#1のWendy02です。

>「~を含む」検索の指定の方法に関して指定の方法
AdvancedFilter は、VBA内部には、その方法はないですね。AutoFilter のようにいけば面白いのですが、そうはならないようです。つまり、CriteriaRange の部分は、ワークシートに依存しているわけです。

本来、Criteria 部分は、人がワークシートに書き入れるものなので、


CriteriaRange:= を変数に置きまして、

Private Sub 検索_Click()
Dim CriteArea As Range
Set CriteArea =Range("B4").CurrentRegion
'ただし、CriteArea は、他のデータに隣接せず、独立した場所

Worksheets("顧客入力").Range("顧客データ").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=CriteArea, CopyToRange:=Range("B8:M1063"), Unique:=False
End Sub

というように作ってやるぐらいが関の山なのです。
だから、"検索_Click()" とボタンにするのではなくて、Worksheet_Change イベントで、CriteriaRange で反応させるように作ることも多いです。一種の関数のように使います。

そうでなければ、最初から、AdvancedFilter なしで作るのですが、方法としては、AutoFilter から、条件を入れてあげる方法です。そちらには、「Operator:=xlAnd = かつ~(条件)」があります。CopyToRange の部分は、実際に、Copy メソッドで行います。
    • good
    • 0
この回答へのお礼

大変遅くなりまして申し訳ありません。
少しずつですが、アドバイスを参考に改良を加えています。
また分からないことが出てきた時は質問させて頂こうと思っています。
ありがとうございました。

お礼日時:2007/01/31 13:02

こんばんは。



>特定の日付指定は可能なのですが、2007/01/01~2007/01/31のような範囲の指定ができません。

これは、VBAの問題ではありませんね。

2007/01/01 ~ 2007/01/31

ワークシートに、Criteria 部分を置いているのでしょうから、その部分を以下のようにしてください。

Criteria の部分(AND 検索の場合は、横に並べます)

日付               日付
= ">=" &("2007/01/01")*1  |= "<=" & ("2007/01/31")*1
    • good
    • 0
この回答へのお礼

お返事が遅れまして申し訳ありません。
そういえばそうでした…おかげさまで日付検索に関しては解決しました^^
ありがとうございます。
恐縮なのですが、「~を含む」検索の指定の方法に関して指定の方法などご存知ないでしょうか?

お礼日時:2007/01/18 17:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!