| 
    
     |  | ▼masui さん: >▼kanabun さん:
 >以下でうまく実行できました
 >一つ教えていただきたい点がでました
 >
 >1)Worksheets("検索条件").Range("E1")に"作成日"
 >  の項目名を入れておきたいのですが
 >  下記では消えてしまいます
 
 >
 >1)を解消しようと.Offset(0).Formula = "作成日"を
 >  加えました
 >2)これで実行しましたが今度はヒットしませんでした
 >     With Worksheets("検索条件").Range("E1")
 >      .ClearContents
 >      .Offset(0).Formula = "作成日"
 >      .Offset(1).Formula = "=Year(一覧!A4)=" & 作成日
 >      .Offset(2).Formula = "=Left(一覧!A4,4)=" & 作成日
 >   End With
 >Range("E1")に文字を入れてはダメなでしょうか
 
 たとえば 年が2012 文字列のときは "2012" の行を抽出したいとして、
 変数を使わずに [E1:E3]の条件範囲の内容を記述すると、
 
 [E1] (ここは空白にします)
 [E2] =YEAR(一覧!A4)=2012   ← 一覧!A4(最初のデータセル)の年が2012
 [E3] =LEFT(一覧!A4,4)="2012" ← 一覧!A4 の前4文字が "2012" である
 
 と、このように書きます。
 E2とE3 の条件式は 検索対象範囲の「代表として」A4セルを対象とする式を
 書いておきます。数式で条件を書いていますから、「たまたま」A4セルが
 2012/10/20 のような日付型(数値)が代入されていれば
 [E2] TRUE
 [E3] FALSE
 となりますし、「たまたま」A4セルには "2012/10/20 AM"のような文字列が
 代入されていれば、
 [E2] FALSE
 [E3] TRUE
 となりますし、A4セルに 2010/10/15 のような2012年でない日付(数値)が
 入っていれば
 
 > [E2] FALSE
 > [E3] FALSE
 
 となりますが、それでかまいません。AdvancedFilterで [E2]の条件式と
 [E3]の条件式が書いてあるときは、[E2]条件 または(OR) [E3] 条件 の
 かたちで検索が実行されます。もちろん
 =YEAR(一覧!A4)=2012
 と書いてあっても、A4以下すべてのA列該当セル にたいして条件が適用
 されます。
 
 なお、
 > [E2] =YEAR(一覧!A4)=2012
 > [E3] =LEFT(一覧!A4,4)="2012" ← 一覧!A4 の前4文字が "2012" である
 
 の[E3]のほうですが、「文字列の先頭4文字が "2012"という文字である」と
 いう式なので、マクロで書き込むときは 式全体を "" で囲みますから、
 [E3] "=LEFT(一覧!A4,4)=""2012"""
 のように "2012" を ""2012"" となるようにします。
 
 
 補足
 [E1]には文字を入れることもできます。ただし、[A3]の列見出しと
 同じ文字列ではダメです。どうしても何か文字列を入れておきたいのなら
 [A3]の文字列とは異なる文字列にしてください。
 
 
 |  |