|
▼yukio さん:
>初めて目にするフィルタオプションですので早速コードを作ってみました。
>データの少ないサンプルでコードを作り動かしてみたら問題がなかったので、
> 現在使っているファイルに利用したところ、項目だけが横に並ぶのですが
> データが抽出されてきません。いろいろいじったのですが原因が掴めません。
> アドバイスをお願いいたします。
の件ですが、
> Union(Range("E2:H2"), Range("K2")).Select
> Selection.Copy
のところで、どのシートかを指定せずに範囲を選択 Copy しています
ここは、「CD目録」シートの必要見出しを「仮抽出」シートにコピーしてい
るところと思われますが、Rangeの前にシートの指定がないので、
仮にアクティブなシートが仮抽出のほうだとすると、
空白セルがコピーされます。その結果、AdvancedFilterの抽出先の
項目名が空白でエラーになります。
ま、
> 項目だけが横に並ぶのですが
ということなので ActiveSheetは「CD目録」のほうにあったのでしょうが。
あと、Copy貼り付けするときに シートの選択は不要です。
どのシートのどのセル範囲を どのシートのどこのセルに 貼り付ける
のように Selectなしで一気に書いてください。
よく言われるように、 Select Selection に頼ったコードは
画面がチラチラするし、コードの可読性も劣るので、Selectは
ほんとうにそれが必要な時以外は避けるようにしましょう。
その点を考慮して、若干修正すると以下のようですが、
Sub ADF抽出2()
Dim MaxRows As Long
Worksheets("仮抽出").Range("A:E").Clear
With Worksheets("CD目録")
.Range("T1").Value = "種別"
.Range("T2").Value = "交響曲"
.Range("U1").Value = "作曲者名"
.Range("U2").Value = "ハイドン"
MaxRows = .UsedRange.Rows.Count
Union(.Range("E2:H2"), .Range("K2")).Copy _
Sheets("仮抽出").Range("A1")
.Range("C2:K" & MaxRows).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("T1:U2"), _
CopyToRange:=Worksheets("仮抽出").Range("A1:E1")
End With
End Sub
こちらの簡単なサンプルデータでのテストでは もともとの
yukio さんのコードでも
「交響曲」「ハイドン」はちゃんと抽出されましたから
> コードに間違いがある
のではないような気がします。
たとえば 「交響曲」「ハイドン」は完全一致で検索なんですよね?
〜が含まれる(部分一致)ではないですよね?
|
|