- 締切済み
VBA フィルター条件について
マクロの初心者です。 フィルターをかける際に指定の文章が含まれているものをのみを絞り込む方法を教えてください。 できれば、下記に例を記載するのでコードをコピーして使用できるように教えて頂けると嬉しいです。 【例】 A列 1ロングタイプ1 2ショートタイプ2 3無料タイプ 4ショートタイプ1 5ショートタイプ3 6ロングタイプ2 7有料タイプ1 8有料タイプ2 9ロングタイプ 10有料タイプ2 11ショートタイプ 12有料タイプ1 上記のようなデータある際に「無料」、「ショート」、「ロング」という言葉が入っているもの だけを検索かけれるようにしたいのですが、やり方がわかりません。 ためしに「*無料*」などしてやってみたのですが、3つ以上するとエラーがでてしまいます。 わかりづらかったらすいません。その場合は質問してください。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- eden3616
- ベストアンサー率65% (267/405)
ヘルプより... 式.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown) とあるように、オートフィルタ―で指定できる条件は「Criteria1」と「Criteria2」の最大で二つになります。 3つ以上の条件でフィルターをかける場合は別セルに判定用の列を作成し 一旦条件に一致、不一致を「"○"」か「""」で判定してから、判定列に対してオートフィルターをする方法があります。 http://officetanaka.net/excel/vba/tips/tips155.htm 判定列を設けない方法として・・・・ 条件に一致するリストを作成し、リストと一致する値をフィルターかける方法で作ってみました。 最下のVBAコードを標準モジュールに張り付けて、実行してください。 ただし、 >下記に例を記載するのでコードをコピーして使用 とありますが、オートフィルターは1行目を項目行としますので、 添付画像のようにA2~A13のリストに変更して処理しています。 コード内の以下の箇所は場合により適切に変更してください。 『"*無料*", "*ショート*", "*ロング*"』 →フィルター対象とする条件 『Range("A" & Rows.Count)』 →最大行を判定する列 『Range("A" & i)』 →値を取得するセル(2ヶ所あります) 『Range("A1:A13")』 →実際にフィルターをかけるセル範囲 ■VBAコード Sub 条件フィルター() '型宣言 Dim word As Variant, i As Long, j As Long, cnt As Integer Dim myRng As Range, myArray() As String '準備 ReDim myArray(0) If Not ActiveSheet.AutoFilter Is Nothing Then Selection.AutoFilter '条件設定 word = Array("*無料*", "*ショート*", "*ロング*") '行数ループ For i = 1 To Range("A" & Rows.Count).End(xlUp).Row 'フラグ初期化 flag = 0 '条件判定 For j = 0 To UBound(word) If Range("A" & i) Like word(j) Then ReDim Preserve myArray(UBound(myArray) + 1) myArray(cnt) = Range("A" & i) cnt = cnt + 1 Exit For End If Next j Next i 'フィルター設定 Range("A1:A13").AutoFilter Field:=1, Criteria1:=myArray, Operator:=xlFilterValues End Sub