• 締切済み

VBA フィルター条件について

マクロの初心者です。 フィルターをかける際に指定の文章が含まれているものをのみを絞り込む方法を教えてください。 できれば、下記に例を記載するのでコードをコピーして使用できるように教えて頂けると嬉しいです。 【例】  A列 1ロングタイプ1 2ショートタイプ2 3無料タイプ 4ショートタイプ1 5ショートタイプ3 6ロングタイプ2 7有料タイプ1 8有料タイプ2 9ロングタイプ 10有料タイプ2 11ショートタイプ 12有料タイプ1 上記のようなデータある際に「無料」、「ショート」、「ロング」という言葉が入っているもの だけを検索かけれるようにしたいのですが、やり方がわかりません。 ためしに「*無料*」などしてやってみたのですが、3つ以上するとエラーがでてしまいます。 わかりづらかったらすいません。その場合は質問してください。 宜しくお願いします。

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.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

関連するQ&A

  • VBAではなく、マクロでのフィルターのかけ方を教え

    accessのVBAではなく、マクロでのフィルターのかけ方を教えてください。 テーブル1には フィールド名:moji データ:テキスト型 文字列1 文字列2 ・ ・ ・ というデータがあります。 テーブル1を基にしたフォームには 画像のように、 コントロールソースにmojiを紐付けたテキストボックスを配置しました。 その際、マクロを実行して「文字列1」を抽出するフィルタの実行をしたいのですが マクロの作り方がわかりません。 マクロのアクションは「フィルタの実行」にしたのですが フィルタ名には何を入れればいいのでしょうか? とりあえずtestと入れました。 次に、Where条件式には [Forms]![フォーム1]![moji]="文字列1" といれました。 この時点ではエラーにならないのですが フォームを開いて、マクロ1を実行すると 「このウィンドウでは"ApplyFilter/フィルタの実行"アクションを実行できません。」 となってしまいます。 マクロの作り方を教えてください。

  • 数値をワイルドカードでフィルタしたい

    ●質問: Excelの表に記入された入力値に誤りが無いか、フィルタ機能で確認を試みています。 添付の画像のように入力されており、日付や名前はうまくフィルタ出来たのですが、「現場コード」(数値)がどうしてもうまくフィルタ出来ません。 桁数が多い、桁数が少ない、極端に数値が大きいor小さい、入力忘れ(空欄)など、明らかに入力ミスである項目を見つけるため、今までは「5?????」に等しくない値をフィルタしていました。 例では、4行目と6行目が引っかかることになりますが、どのようにすればフィルタ出来るでしょうか? ●経緯: 何故か今まではこの現場コードの欄が文字列になっているExcelデータが回ってきていたのですが、最近この現場コード欄が数値の状態のExcelが回ってくるようになり、それ以来「5?????」ではフィルタ出来なくなりました。(「等しくない」にすると、全行表示されたままです。) そもそも、フィルタする際に[▼]ボタンを押したとき、[テキストフィルター]ではなく [数値フィルター]と言う項目があるのが原因ではないかと思います。 ネットで調べてみると、隣のセルに「=""&C2」のような式を入れてオートフィルし、その式を入力した列をフィルタすると言う方法はありましたが、現場コード欄が文字列で届いていたときはそのままフィルタ出来たのが不可解です。 C列の [セルの書式設定] にて、分類を「文字列」にしても、上述のフィルタに引っかかりません。 フィルタの[▼]ボタンを押した後に「5?????」を検索すれば該当行を導き出すことはできますが、試しにこの動作をマクロ記録機能にかけてみると、下記のように、検索で出てきた結果の値を直接指定したことになっています。 ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=3, Criteria1:=Array( _ "512013", "513572", "513842"), Operator:=xlFilterValues 最終的に、このフィルタの動作をマクロに組み込むことも考えているため、どのようにフィルタしようか判断に困っています。 どのような操作でフィルタをかければ、該当行(4行目と6行目)を見つけ出せるでしょうか? ●利用環境: OS:Windows7 Excel2010 *画像の表は例です。記入している数値は実際に業務で使用したものではありません。

  • VBA 検索条件にヒットした行を削除

    VBAのことで教えてください。 エクセルのsheet1の「L列」に複数のデータが含まれております。 その中に「ロングタイプ」、「ショートタイプ」、「無償」など沢山のワードがある中で、 アスタリスク記号を利用して、5パターンのワードを検索して、その検索条件に満 たしている行を削除したいのですが、コードがわかりません。 例えば・・・・・ ロングタイプA ショートタイプB ロングタイプB ショートタイプA 無償A 無償B キャンペーンA キャンペーンB もっと複数のワードがあるのですが、その中でいらないワードをアスタリスク記号 を利用して5つワードを検索し、その対象行を削除したいです。 例えばアスタリスク記号を利用して「*ロング*」「*ショート*」「*無償*」などロングと 入っているワードを検索かけて、行を削除する。 コードで回答して頂ければ、幸いです。 宜しくお願いします。

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • オートフィルターをVBAで操作

    おはようございます。 度々申し訳ございません。 どうしても オートフィルターをVBAで操作させる方法が 見つからなかったため質問します。 やりたいこと A列セルにランダムで年月が入力されている状況にて ①今年の4月~9月までをオートフィルターで  絞り込み ②今年の10月~来年の3月までをオートフィルターで  絞り込み これをやりたいのですが 私がやってみても一月のみでしか選択できず 複数の月の選択のコードが書けませんでした。 すいませんが コードを記載していただけないでしょうか。 宜しくお願い致します。

  • フィルタオプションをマクロで

    1 テキストを読み込んで並べ替えなどして   表(1行目はタイトル)を作り、   フィルタをかける(マクロ) 2 フィルタオプションで必要なデータを抽出   その際に日付を手入力する   (例  A列(毎回決まった列)     2005/4/1以上 降順) 3 その後の作業(マクロ) このように1のマクロを起動して その後 2を手作業して 更に3をマクロを 起動すると言う方法をとっていますが 2の内容もマクロで作って 「日付」だけを 入力するように求められて それを入力するだけで その後の作業も自動で行うことは出来るでしょうか?

  • オートフィルタオプションをVBAで指定したい

    表中に、このような列があるとします。 肩ロース100g 肩ロース500g ヒレ100g ヒレ250g ヒレ500g レバー100g レバー250g 他の列には注文日や個数、小計金額があるとします。 オートフィルタをかけて、フィルタオプションで「○○で始まる」を指定し、例えばレバーの行のみを手作業で抽出することはできます。 この動作を、フィルタオプションでの設定を経由せずに行えないものでしょうか? たとえば、別の列などに「肩ロース」「ヒレ」「レバー」が記載されていて、そのデータを元にオートフィルタの▼をクリックすると「肩ロース」「ヒレ」のように抽出条件データが表示される、というふうには出来ないものでしょうか? VBA等を使用しても構いません。 抽出項目は固定ですので、コード中に記述しても構いません。 動作が要望を満たせば、オートフィルタを使用しなくても構いません。 フォームウィンドウで抽出項目を指定し、その項目をCriteria等に設定してフィルタオプションでも構いません(この方法は自力で出来そうですが)。 良い方法があれば、お教え下さい。

  • フィルターをかけ、必要部分だけを貼り付けするマクロ

    マクロを独学している初心者です。 よくわからず、途中までマクロを作成してみましたが、上手くいかずどのようにマクロを記載すれば以下教えてください。 ◆実施したいこと (1)ブック1を開いてマクロを動かして、ブック2をあける (2)ブック2のP列を当月(2020年6月)でフィルターする (3)ブック2のCの2行目以下をコピー (4)ブック1のB3セルへ貼り付け (5)ブック2のDの2行目以下をコピー (6)ブック1のC3セルへ貼り付け ----ここまでマクロで作成し写真添付------- (7)ブック2のO列を当月(2020/6/xx)でフィルターする (8)2020/6/1も6/何日であろうと出てきたもの全てをブック2のEの2行目以下をコピー (9)ブック1のD4セル以下へ貼り付け

  • Excelマクロ)フィルタをかけたコピーでエラー

    Excelのマクロで、フィルタをかけた列のデータ値を別シートへコピー(貼付け)する マクロを作りました。 フィルタをかけて、データ値があれば問題ないのですが、 データ値がない場合、エラーがでます。(=マクロがストップします) どうしたら回避できるでしょうか?

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

専門家に質問してみよう