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

フィルタオプションの設定の検索条件範囲で指定した条件が半角・全角や大文字・小文字にかかわらず抽出するということはできますか?

商品情報というブックがあり、抽出シート(1枚目)と2枚目のシートにデータが入っています。
2枚目のシートのフィールド名を抽出シートのA1を基準に貼り付けています。
条件をA1:I3あたりに入力し、2枚目のシートの条件に合うものを抽出シートのA5以降に取り出すマクロを書いています。次回マクロを起動させたときにA5以降にデータがあれば削除させます。
いろいろな方に教えていただいて下記のようにできあがったのですが、ちょっと問題があって
質問しています。

Dim myRow1 As Long, myRow2 As Long

myRow1 = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
myRow2 = Sheets("抽出").Range("A" & Rows.Count).End(xlUp).Row

If myRow2 >= 5 Then
Sheets("抽出").Range("A5:I" & myRow2).ClearContents
Sheets("抽出").Range("A5:I" & myRow2).ClearFormats

Sheets(2).Range("A1:I" & myRow1).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("抽出").Range("A1").CurrentRegion, _
CopyToRange:=Sheets("抽出").Range("A5"), Unique:=False

End Sub

現状では元データが全角だと半角で入力すると抽出されず、元データが小文字だと大文字は抽出されません。
いちいち元データの状態を把握しての検索になってしまいます。
このマクロを修正して全角・半角もしくは小文字・大文字にかかわらず抽出できるようにすることは可能でしょうか?
どなたかご存知の方がいらっしゃれば教えていただけないでしょうか?

A 回答 (1件)

フィルタオプションで数式を条件にします。

全角、半角混じり、大文字、小文字混じりでもいけると思います。
適当なワークシート関数がなさそうなので、ユーザー定義関数を作成してみました。
Function findString(targetString As String, pattern As String) As Boolean
If Len(targetString) <> Len(pattern) Then
findString = False
Exit Function
End If
If InStr(1, targetString, pattern, vbTextCompare) > 0 Then
findString = True
Else
findString = False
End If
End Function
フィルタオプションで数式を条件にするのは、下記などをご覧下さい。
http://www.excel-jiten.net/database/extract_filt …
<使用例>
下記式を入れたセルをフィルタオプションの条件に設定します。このセルの上は空白にしておく必要があります。
=findString(A6,$D$2)
A6はフィルターを掛けたい範囲の、フィールド名の下のセルのアドレス
$D$2は、検索したい文字列が入ったセルのアドレス
なお、xl2000で試しました。
    • good
    • 0
この回答へのお礼

ご連絡が遅くなりましてすみません。
自分で関数をつくるなんてびっくりです。

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

お礼日時:2010/11/15 20:54

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