電子書籍の厳選無料作品が豊富!

マクロの初心者です。

フィルターをかける際に指定の文章が含まれているものをのみを絞り込む方法を教えてください。
できれば、下記に例を記載するのでコードをコピーして使用できるように教えて頂けると嬉しいです。

【例】
 A列
1ロングタイプ1
2ショートタイプ2
3無料タイプ
4ショートタイプ1
5ショートタイプ3
6ロングタイプ2
7有料タイプ1
8有料タイプ2
9ロングタイプ
10有料タイプ2
11ショートタイプ
12有料タイプ1

上記のようなデータある際に「無料」、「ショート」、「ロング」という言葉が入っているもの
だけを検索かけれるようにしたいのですが、やり方がわかりません。

ためしに「*無料*」などしてやってみたのですが、3つ以上するとエラーがでてしまいます。
わかりづらかったらすいません。その場合は質問してください。

宜しくお願いします。

A 回答 (1件)

ヘルプより...


式.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
「VBA フィルター条件について」の回答画像1
    • good
    • 0

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