[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで複数列、複数条件のオートフィルタにする方法』(まりも)
A列、B列に下の3つの条件でオートフィルタをしたいです
1)A列が「111」、B列が「ああ」
2)A列が「222」、B列が「いい」
3)A列が「333」、B列が「うう」
With Sh
.Range("A1").AutoFilter Field:=1, Criteria1:="111" '1番 .Range("A1").AutoFilter Field:=2, Criteria1:="ああ"
.Range("A1").AutoFilter Field:=1, Criteria1:="222" '2番 .Range("A1").AutoFilter Field:=2, Criteria1:="いい"
.Range("A1").AutoFilter Field:=1, Criteria1:="333" '3番 .Range("A1").AutoFilter Field:=2, Criteria1:="うう"
これだとA列が「333」、B列が「うう」しか抽出されなかったです
3つとも抽出したいときはどうしたらいいか教えてください
< 使用 Excel:Excel2019、使用 OS:Windows10 >
.Range("A1").AutoFilter Field:=1, Criteria1:=Array("111", "222", "333"), Operator:=xlFilterValues .Range("A1").AutoFilter Field:=2, Criteria1:=Array("ああ", "いい", "うう"), Operator:=xlFilterValues (???) 2020/08/31(月) 16:49
また、↑がNGの場合、作業列を設けたりオートフィルタ以外の解決方法でも、問題ないですか?
(もこな2 ) 2020/08/31(月) 19:53
だめなんです。
A列が「111」の時は必ずB列が「ああ」だけです
>また、↑がNGの場合、作業列を設けたりオートフィルタ以外の解決方法でも、問題ないですか?
With Shが元の形に戻れば問題ありません
でも抽出したものも形が決まってるので元に戻す必要があります
(まりも) 2020/09/01(火) 08:52
教えてください
Sub フィルター2()
Dim myFld As String Dim myCri1 As String, myCri2 As String, myCri3 As String Dim myCri4 As String, myCri5 As String, myCri6 As String Dim myRow As Long Dim Sh2 As Worksheet, Sh3 As Worksheet
Set Sh2 = Worksheets("あ") Set Sh3 = Worksheets("テスト")
myCri1 = Worksheets("い").Range("H7") myCri2 = Worksheets("い").Range("H8") myCri3 = Worksheets("い").Range("H9") myCri4 = Worksheets("い").Range("I7") myCri5 = Worksheets("い").Range("I8") myCri6 = Worksheets("い").Range("I9")
With Sh2
.Range("A1").AutoFilter Field:=1, Criteria1:=myCri1 '1番 .Range("A1").AutoFilter Field:=2, Criteria1:=myCri4
myRow = .Range("A" & Rows.Count).End(xlUp).Row Sh3.Range("A:K").ClearContents
.Range("A1:K" & myRow).Copy Sh3.Range("A1") .Range("A1").AutoFilter
.Range("A1").AutoFilter Field:=1, Criteria1:=myCri2 '2番 .Range("A1").AutoFilter Field:=2, Criteria1:=myCri5
myRow = .Range("A" & Rows.Count).End(xlUp).Row 'Sh3.Range("A:K").ClearContents
.Range("A1:K" & myRow).Copy Sh3.Range("A"& Rows.Count).End(xlUp).Row) .Range("A1").AutoFilter
.Range("A1").AutoFilter Field:=1, Criteria1:=myCri3 '3番 .Range("A1").AutoFilter Field:=2, Criteria1:=myCri6
myRow = .Range("A" & Rows.Count).End(xlUp).Row 'Sh3.Range("A:K").ClearContents
Range("A1:K" & myRow).Copy Sh3.Range("A"& Rows.Count).End(xlUp).Row) .Range("A1").AutoFilter
End With Worksheets("テスト").Activate Range("A1").Select
End Sub
(まりも) 2020/09/01(火) 09:05
また、提示されたコードはご自身で考えたものですか?
構文エラーになる部分があるのと、コメントアウトしてますがClearContentsしているのが気になります。
(もこな2) 2020/09/01(火) 09:39
>提示されたコードをみると、最終的に「テスト」シートに抽出結果が並べばいいんですかね。
>であれば、”ひとつずつ”抽出して貼付するのを3回繰り返せばよくないですか?
Worksheets("あ")には見出しがあるので見出しは最初だけで大丈夫です
Sub フィルター2() を3つ作って順番に貼付するということですか?
>フィルタオプション(詳細設定)のほうがこの場合は簡単だと思います。
>もちろん、手作業でということではなく、
>マクロ記録を使用すれば、ほぼそのまま使用できるマクロになります。
どうやって3つの条件を設定するのでしょうか?
3つ作ってということでしょうか?
(まりも) 2020/09/01(火) 10:13
項目1 項目2 111 ああ 222 いい 333 うう というようなセル範囲を 検索条件範囲に指定します。 もちろん一回の試行ですべて抽出します。 その場で絞り込むことも、該当データのみ他に複写することも可能です。
フィルタオプションの使用例を手元の書籍、なければネットで検索されると たくさんありますよ。 (γ) 2020/09/01(火) 10:20
Sub てすと() Dim i As Long Dim dstRNG As Range Dim フラグ As Long
Stop 'ブレークポイントの代わり
Set dstRNG = Worksheets("テスト").Range("A1") With Worksheets("あ") .AutoFilterMode = False
For i = 7 To 9 '▼抽出 .Range("A1").AutoFilter Field:=1, Criteria1:=Worksheets("い").Cells(i, "H").Value .Range("A1").AutoFilter Field:=2, Criteria1:=Worksheets("い").Cells(i, "I").Value
'▼コピペ .AutoFilter.Range.Offset(フラグ).Copy dstRNG
'▼次処理の準備 フラグ = 1 Set dstRNG = Worksheets("テスト").Cells(Rows.Count, "A").End(xlUp).Offset(1) Next i End With
Application.Goto Worksheets("テスト").Range("A1") End Sub
(もこな2) 2020/09/01(火) 10:28
エラー
抽出データを作業中のシート以外へコピーすることは出来ません
(まりも) 2020/09/01(火) 10:43
検索したら2つのシート間しかありませんでしたが3つのシート
だとできないとかですかね?
(まりも) 2020/09/01(火) 12:00
最悪の場合、一つのシートでマクロ記録して
できあがったマクロに手を入れればよいでしょう。
シートの修飾をする(Rangeの頭にWorksheets("Sheet2").などを
つける)ということです。
(γ) 2020/09/01(火) 12:47
もこな2さん
ループ処理で綺麗に抽出できました
まだ構文解読中です
Offset(フラグ)なんて使い方ができるのですね
参考に勉強します
(まりも) 2020/09/01(火) 12:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.