質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2593閲覧

オートフィルターの結果でIF関数を使う

ayapre

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/05/22 06:59

編集2018/05/22 07:46

オートフィルターで抽出した結果からIF関数を使い他の列にさらにオートフィルターをかけたい。

『もし18列目に”W"がある場合は、7列目のフィルターは"2","3","4","5"でかけて
そうでない場合は"2","3","5"でかける。
もし7列目に"4"がある場合は、8列目のフィルターは"ABC"を含まないものにかけて
そうでない場合はなにもしない。』
という内容を追加したら動かなくなりました。

Sub AutoFilter() Dim Ws As Worksheet   For Each Ws In Worksheets     Ws.Activate With ActiveSheet 'オートフィルター設定済を考慮して '一旦オートフィルターを解除 .AutoFilterMode = False Rows("2:2").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$CP$718").AutoFilter Field:=18, Criteria1:=Array( _ "A", "M", "W"), Operator:=xlFilterValues ActiveWindow.SmallScroll Down:=-12 ActiveSheet.Range("$A$2:$CP$718").AutoFilter Field:=15, Criteria1:="3" ActiveWindow.SmallScroll Down:=-12 If Columns(18)="W" Then ActiveSheet.Range("$A$2:$CP$718").AutoFilter Field:=7, Criteria1:=Array("2" _ , "3", "4", "5"), Operator:=xlFilterValues Else ActiveSheet.Range("$A$2:$CP$718").AutoFilter Field:=7, Criteria1:=Array("2" _ , "3", "5"), Operator:=xlFilterValues End If If Columns(7)="4" Then ActiveSheet.Range("$A$2:$CP$718").AutoFilter Field:=8, Criteria1:="<>*ABC*", _ Operator:=xlFilterValues End If End With Next Ws End Sub```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/05/22 07:41

コードが見難いです。<code>ボタンを使ってコードを記載してください。
ExcelVBAer

2018/05/22 09:46

ご提示のコードは見やすくなってますか? それとも、元のコードがご提示通りのコードなのでしょうか?
ayapre

2018/05/23 00:11

投稿時<code>ボタンを使って記入したほうが見にくく思ったので使わなかったのですが、他の人には見やすくなるのかなと<code>ボタンを押して、そこに記入してみました。記入するところではキレイに改行できているのですが、プレビューは改行されてません・・・
guest

回答2

0

自己解決

いろいろ試したけどIFがうまく使えなかったので
IFは使わずにマクロの記録でオートフィルタをかけました。

Sub

1 Dim Ws As Worksheet 2  For Each Ws In Worksheets 3    Ws.Activate 4 5 With ActiveSheet 6 'オートフィルター設定済を考慮して 7 '一旦オートフィルターを解除 8 .AutoFilterMode = False 9 10 Rows("2:2").Select 11 Selection.AutoFilter 12 ActiveSheet.Range("$A$2:$CP$18059").AutoFilter Field:=18, Criteria1:=Array( _ 13 "A", "M", "W"), Operator:=xlFilterValues 14 ActiveWindow.SmallScroll Down:=-18 15 ActiveSheet.Range("$A$2:$CP$18059").AutoFilter Field:=15, Criteria1:="3" 16 ActiveWindow.SmallScroll Down:=-6 17 ActiveSheet.Range("$A$2:$CP$18059").AutoFilter Field:=7, Criteria1:=Array( _ 18 "2", "3", "4", "5"), Operator:=xlFilterValues 19 ActiveWindow.SmallScroll Down:=-12 20 ActiveSheet.Range("$A$2:$CP$18059").AutoFilter Field:=9, Criteria1:= _ 21 "<>*ABC*", Operator:=xlAnd 22 End With 23 Next Ws 24End Sub 25

投稿2018/05/23 02:50

ayapre

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし18列目に”W"がある場合は、7列目のフィルターは"2","3","4","5"でかけて
そうでない場合は"2","3","5"でかける。
もし7列目に"4"がある場合は、8列目のフィルターは"ABC"を含まないものにかけて
そうでない場合はなにもしない。

「18列目にWがある場合」というのを
Columns(18)="W"
で行っているのが怪しいのではないでしょうか?
InStr()や、IF ~~Like〇〇 
などを使って、文字列を検索させればいいかと思います。※countifのようなもの

IF 18列ならば最終行まで検索して、1個以上。 then… 
という発想です。

7列目も同様です。

投稿2018/05/22 16:00

ptk3

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayapre

2018/05/23 01:19

回答ありがとうございます。 アドバイスのようにやってみましたが、やはり同じところで止まります。 「型が一致しない」というエラーです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問