AdvancedFilterメソッドの引数「検索条件範囲」の指定が違うようだか?

Question 63.1 Previous Next
Sub filteroption2()
    Range("A1000:Gp2000").AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range(Cells(39, Range("O50").Value - 4), _
        Cells(40, Range("O50").Value - 3))
End Sub

Range(Cells(39, Range("O50").Value - 4), Cells(40, Range("O50").Value - 3))
    
Cells(39, Range("O50").Value - 4), しか範囲指定しないのです。
Range(Cells(39, Range("O50").Value - 4), Cells(40, Range("O50").Value - 3)) の書き方のどこが違うのか分かりませんので教えてください。
Answer   Copyright (C) 2003.9.29 永井善王
でっかいワークシートですね。 項目数が224(列)、件数が1000(行)のリストつまりデータベースですか。ご提示されたコードは、そのリストから、アドバンスフィルタで抽出するためのものですね。

AdvancedFilterメソッドの構文
対象オブジェクト.AdvancedFilter(動作指定,
検索条件範囲, コピー先のセル範囲, 重複レコードの処理方法)

そして、お知りになりたい点は、
検索条件範囲を指定する引数の書き方に違いがないかですね。

随分、込み入った書き方のコードですが、O50セルの値が仮に '5' とすると検索条件範囲として、
   
CriteriaRange:=Range(A39:B40) と指定したことになるのでしょうか。
そうだとすれば、下記 3つの条件を満たしている限り、問題は発生しないかと思われます。
 1. O50セルの値が必ず '5' 以上であること
 2. O50セルの値から '4' または '3' を減じて求めた列範囲の 39行目(上記仮定では A39:B39)のセルの値が列
   見出しであり、かつ、1000行目にあるはずの列見出しに存在するものであること
 3. 同じ列範囲の 40行目(上記仮定では A40:B40)のセルの値が検索する値として相応しいものであること

school ワークシートのレイアウトをお示しいただいてないので、条件2.と3.の説明がしにくかったですが、以上を参考にしてチェックしてみてください。そして、解決できたら、具体的にお知らせいただけませんか。

なお、蛇足かもしれませんが、検索条件範囲を Setステートメントで変数に代入しておくなどすると、コードがすっきりと分かりやすくできるかと思います。ご研究ください。

 

Excel VBA Macro