VBA初心者です。
オートフィルターで、〇〇という語句を含み、××or▲▲or◇◇を含まないデータを抽出したいです。
↓自分で書いたプログラムです。
Dim arr(2) As String
arr(0) = "××"
arr(1) = "▲▲"
arr(2) = "◇◇"
Range("B1").AutoFilter Field:=2, Criteria1:="*"〇〇 "*", Operator:=xland, Criteria2:="<>*arr*"
〇〇を含み かつ ××or▲▲or◇◇を含まないデータなので、and条件かと思いましたが、
この言語だとデータが一つも抽出されません。
どのように改善すべきでしょうか?
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは。
オートフィルターで、そこまで細かく指定できないのでは?と思います。
マクロの記録で、オートフィルターの設定できる範囲が限界かと思います。
http://officetanaka.net/excel/vba/tips/tips155.htm
No.2
- 回答日時:
こんばんは、
タイプが間違っているのでは?
Range("B1").AutoFilter Field:=2, Criteria1:="*〇〇*", Operator:=xlAnd, Criteria2:="<>*arr*"
No.3
- 回答日時:
Criteria2:="<>*arr*"
変数名を文字列扱いしてませんか?
Criteria2:="<>*" & arr & "*"
でも未検証なのでどちらかと言えばAdvancedfilterがよさそうな?
ありがとうございます。
私も書式の問題かと思い、
Criteria2:="<> & arr & " としましたが、
「型が一致しません」というメッセージが出てデバックしてしまいます、、、
No.4
- 回答日時:
こんばんは
条件が複雑そうなので、作業列に条件式を設定して、その列を基準にフィルターを掛けるのが簡単そうに思います。
作業列を設けるのが嫌ならば、直接VBA内で判別して、表示/非表示を設定してしまう方法も考えられます。
また、No3様がご指摘のように、フィルターオプションを利用する方法もあるでしょう。
どうしても、AutoFilterに拘りがあるのなら、先にVBAで判別して、それをfilterの条件にしてしまうとか。
この方法だと、内容的に処理が2重手間のようになってしまいますけれど、ご参考までに。
※ シートの状態がどのようになっているのか不明なので、以下では、B列のみにフィルターを掛けるようにしてあります。
Sub Sample()
Dim r As Range, c()
Dim i As Long, tmp As String
Dim arr
Const include = "〇〇"
arr = Array("××", "▲▲", "◇◇")
Set r = Intersect(Range("B1").CurrentRegion, Columns(2))
ReDim c(1 To r.Rows.Count)
For i = 1 To r.Rows.Count
tmp = Cells(i, 2).Text
c(i) = InStr(tmp, arr(0)) + InStr(tmp, arr(1)) + InStr(tmp, arr(2))
If InStr(tmp, include) And c(i) = 0 Then c(i) = tmp Else c(i) = ""
Next i
r.AutoFilter
r.AutoFilter Field:=1, Criteria1:=c, Operator:=xlFilterValues
End Sub
No.5
- 回答日時:
No4です。
再度見てみたら、
No4のコードだと、B列に空白セルが存在するとその行も抽出されてしまいますね。
失礼いたしました。
以下、修正したコードです。
Sub Sample()
Dim r As Range, c()
Dim i As Long, f As Long, tmp As String
Dim arr
Const include = "〇〇"
arr = Array("××", "▲▲", "◇◇")
Set r = Intersect(Range("B1").CurrentRegion, Columns(2))
ReDim c(1 To r.Rows.Count)
For i = 1 To r.Rows.Count
tmp = Cells(i, 2).Text
f = InStr(tmp, arr(0)) + InStr(tmp, arr(1)) + InStr(tmp, arr(2))
If InStr(tmp, include) And f = 0 Then c(i) = tmp
Next i
r.AutoFilter
r.AutoFilter Field:=1, Criteria1:=c, Operator:=xlFilterValues
End Sub
No.6
- 回答日時:
お望みの方法とは違うかもですが、こんなのはどうでしょう。
Sub sample()
Dim Cri As Variant
Cri = WorksheetFunction.Transpose(Range("C:C"))
Cri = Filter(Cri, "〇〇")
Cri = Filter(Cri, "××", False)
Cri = Filter(Cri, "▲▲", False)
Cri = Filter(Cri, "◇◇", False)
Range("B1").AutoFilter Field:=2, Criteria1:=Cri, Operator:=xlFilterValues
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Excel(エクセル) excel vbaの配列なんですが・・・ 1 2022/12/26 18:50
- Visual Basic(VBA) VBAのフィルター操作 5 2023/08/08 09:48
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Visual Basic(VBA) vb.netです。2次元配列の要素をFor Eachでひとつづつ取得したい。 4 2022/07/05 11:30
- Visual Basic(VBA) excelVBAについて。 1 2022/11/30 06:16
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
VBA 空白セルを削除ではない方...
-
メモ帳(テキストデータ)をExc...
-
Excelのマクロでワードのテキス...
-
【エクセル】測定時間がバラバ...
-
PDOオブジェクトは使い回し可能?
-
Delphiからエクセルを設定
-
C# ソケット通信でデータ受信時...
-
エクセルで2つの時系列のデー...
-
javaでDBからデータを取ってき...
-
配列でデータが入っている要素...
-
LoadPictureしたイメージデータ...
-
この行は既に別のテーブルに属...
-
Accessで該当データにフラグを...
-
ポケコン PC-E650 の...
-
charからの型変換
-
0が含まれる幾何平均が「#NUM!」
-
[C言語] コメント文字列を無視...
-
家計簿プログラム
-
子ダイアログのデータを親ダイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
VBAでシートからコンボボックス...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報