Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1496 / 13646 ツリー ←次へ | 前へ→

【73128】AdvancedFilteで日付を検索 masui 12/11/19(月) 13:07 質問[未読]
【73129】Re:AdvancedFilteで日付を検索 kanabun 12/11/19(月) 13:30 発言[未読]
【73130】Re:AdvancedFilteで日付を検索 UO3 12/11/19(月) 13:33 発言[未読]
【73131】Re:AdvancedFilteで日付を検索 kanabun 12/11/19(月) 13:41 発言[未読]
【73132】Re:AdvancedFilteで日付を検索 kanabun 12/11/19(月) 13:43 発言[未読]
【73134】Re:AdvancedFilteで日付を検索 masui 12/11/19(月) 15:19 質問[未読]
【73135】Re:AdvancedFilteで日付を検索 kanabun 12/11/19(月) 16:03 発言[未読]
【73141】Re:AdvancedFilteで日付を検索 masui 12/11/20(火) 9:40 質問[未読]
【73142】Re:AdvancedFilteで日付を検索 kanabun 12/11/20(火) 10:29 発言[未読]
【73143】Re:AdvancedFilteで日付を検索 masui 12/11/20(火) 13:18 質問[未読]
【73153】Re:AdvancedFilteで日付を検索 kanabun 12/11/21(水) 19:25 発言[未読]
【73154】Re:AdvancedFilteで日付を検索 kanabun 12/11/21(水) 19:35 発言[未読]
【73144】Re:AdvancedFilteで日付を検索 masui 12/11/20(火) 13:45 質問[未読]
【73156】Re:AdvancedFilteで日付を検索 kanabun 12/11/21(水) 20:00 発言[未読]
【73164】Re:AdvancedFilteで日付を検索 masui 12/11/22(木) 12:18 お礼[未読]
【74028】Re:AdvancedFilteで日付を検索 masui 13/4/7(日) 10:52 質問[未読]
【74029】Re:AdvancedFilteで日付を検索 kanabun 13/4/7(日) 21:33 発言[未読]
【74030】Re:AdvancedFilteで日付を検索 kanabun 13/4/8(月) 9:20 発言[未読]
【74031】Re:AdvancedFilteで日付を検索 masui 13/4/8(月) 12:14 質問[未読]
【74032】Re:AdvancedFilteで日付を検索 kanabun 13/4/8(月) 18:01 発言[未読]
【74039】Re:AdvancedFilteで日付を検索 masui 13/4/9(火) 15:23 質問[未読]
【74051】Re:AdvancedFilteで日付を検索 kanabun 13/4/10(水) 20:41 発言[未読]
【74054】Re:AdvancedFilteで日付を検索 masui 13/4/10(水) 22:24 お礼[未読]
【74055】Re:AdvancedFilteで日付を検索 kanabun 13/4/10(水) 22:38 発言[未読]
【74052】Re:AdvancedFilteで日付を検索 kanabun 13/4/10(水) 21:21 発言[未読]
【74053】Re:AdvancedFilteで日付を検索 kanabun 13/4/10(水) 21:32 発言[未読]

【73128】AdvancedFilteで日付を検索
質問  masui  - 12/11/19(月) 13:07 -

引用なし
パスワード
   AdvancedFilteで日付をワイルドカードで抽出しようと
思っています
表の値が日付型あるいは文字列となっています
      日付
表の値----2012/11/10
表の値----2012/10/10
表の値----2012/10/10AM

抽出条件に *2012* として2012/11/10を抽出するのですが
ヒットしません


Worksheets("一覧").Range("A3").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("条件").Range("C3:G4"), _
CopytoRange:=Sheets("項目").Range("A5"), _
Unique:=True
よろしくお願いいたします

【73129】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/19(月) 13:30 -

引用なし
パスワード
   ▼masui さん:

>表の値が日付型あるいは文字列となっています

どちらかに統一しないとむつかしくなりますね

すべて日付け型であれば
条件は(対象列がA列ならば)

 検索条件
 =Year(A2)=2012

こんなふうで抽出できると思います。

 

【73130】Re:AdvancedFilteで日付を検索
発言  UO3  - 12/11/19(月) 13:33 -

引用なし
パスワード
   ▼masui さん:

フィルターオプションで、抽出キーが日付の場合、ワイルドカードでは指定しにくいですね。
以下のページの説明のように、細工すればできないことはなさそうですが。

h tp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1461159399

私の場合は、条件を ●●以上 と ○○以下。このように2つ指定しますね。

ht p://www.eurus.dti.ne.jp/yoneyama/Excel/filter3.htm

この【期間の条件の書き方】等を参照ください。

【73131】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/19(月) 13:41 -

引用なし
パスワード
   > 表の値が日付型あるいは文字列となっています

あるいは、検索条件を

------  E  ----------------   
1  
2  =YEAR(A2)=2012
3  =LEFT(A2,4)="2012"

-------------------------------
こんなふうに OR指定 してもいいですね(対象列がA列のばあい)

【73132】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/19(月) 13:43 -

引用なし
パスワード
   (↑補足です)

>------  E  ----------------   
>1  
>2  =YEAR(A2)=2012
>3  =LEFT(A2,4)="2012"
>
>-------------------------------

[E1]は空白です。

【73134】Re:AdvancedFilteで日付を検索
質問  masui  - 12/11/19(月) 15:19 -

引用なし
パスワード
   ▼kanabun さん:

 UserForm検索.TextBox日=2012 が入力されています

 sht1.Cells(Gyou, Retu) = year(UserForm検索.TextBox日)
 OR指定で
 sht1.Cells(Gyou+1, Retu) = UserForm検索.TextBox日
 としましたがうまくいきません
 マクロの書き方が違うようです
 よろしくお願いします


>あるいは、検索条件を
>
>------  E  ----------------   
>1  
>2  =YEAR(A2)=2012
>3  =LEFT(A2,4)="2012"
>
>-------------------------------
>こんなふうに OR指定 してもいいですね(対象列がA列のばあい)

【73135】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/19(月) 16:03 -

引用なし
パスワード
   ▼masui さん:
>▼kanabun さん:
>
> UserForm検索.TextBox日=2012 が入力されています
>
> sht1.Cells(Gyou, Retu) = year(UserForm検索.TextBox日)
> OR指定で
> sht1.Cells(Gyou+1, Retu) = UserForm検索.TextBox日
> としましたがうまくいきません
> マクロの書き方が違うようです
> よろしくお願いします
>
>
>>あるいは、検索条件を
>>
>>------  E  ----------------   
>>1  
>>2  =YEAR(A2)=2012
>>3  =LEFT(A2,4)="2012"
>>
>>-------------------------------
>>こんなふうに OR指定 してもいいですね(対象列がA列のばあい)


検索対象範囲が 「一覧」シートのA3に列見出しがあり、A4から
日付けデータがあると仮定します。(つまり日付データは A列のばあい)
試してないけど、こんな感じですよ

Dim ss As String

'TextBoxの文字列を変数ss にコピーします
ss = UserForm検索.TextBox日.Text

'「条件」シートの[E1:E3] に検索条件式を記入します
'A4 は最初のデータセル
With Worksheets("条件").Range("E1")
  .ClearContents
  .Offset(1).Formula = "=YEAR(一覧!A4)=" & ss
  .Offset(2).Formula = "=LEFT(一覧!A4,4)=""" & ss & """
End With
Worksheets("一覧").Range("A3").CurrentRegion.AdvancedFilter _
 Action:=xlFilterCopy, _
 CriteriaRange:=Worksheets("条件").Range("E1:E3"), _
 CopytoRange:=workSheets("項目").Range("A5"), _
 Unique:=True

【73141】Re:AdvancedFilteで日付を検索
質問  masui  - 12/11/20(火) 9:40 -

引用なし
パスワード
   ▼kanabun さん:
以下でうまく実行できました
一つ教えていただきたい点がでました

1)Worksheets("検索条件").Range("E1")に"作成日"
  の項目名を入れておきたいのですが
  下記では消えてしまいます
2)Worksheets("検索条件").Range("E2")及び("E3")にはFALSE
  が表示されます
   With Worksheets("検索条件").Range("E1")
      .ClearContents
      .Offset(1).Formula = "=Year(一覧!A4)=" & 作成日    
      .Offset(2).Formula = "=Left(一覧!A4,4)=" & 作成日
   End With

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")に文字を入れてはダメなでしょうかよろしくお願いします

【73142】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/20(火) 10:29 -

引用なし
パスワード
   ▼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]の文字列とは異なる文字列にしてください。

【73143】Re:AdvancedFilteで日付を検索
質問  masui  - 12/11/20(火) 13:18 -

引用なし
パスワード
   ▼kanabun さん:
ご丁寧な説明を頂き有難うございました
もう一点教えてください
     [D1]に「住所」を書いて
     [D2]に文字列 「*東*」と入力
     Worksheets("検索条件").Range("D1")="住所"
     Worksheets("検索条件").Range("D2")="*東*"
この場合は上手くヒットします
[D2]が文字列文字列検索だからでしょうか

[E1] (ここは空白にします)
今回の場合は日付を検索するから[E1]を空白に
しておくのでしょうか

度々申し訳ありませんがよろしくお願いします

【73144】Re:AdvancedFilteで日付を検索
質問  masui  - 12/11/20(火) 13:45 -

引用なし
パスワード
   ▼kanabun さん:
すいません もう一点
   "=Year(一覧!A4)="
 (一覧!A4)=は Sheet名が一覧で
        !A4の書き方について教えて下さい

【73153】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/21(水) 19:25 -

引用なし
パスワード
   ▼masui さん:

>もう一点教えてください
>     [D1]に「住所」を書いて
>     [D2]に文字列 「*東*」と入力
>     Worksheets("検索条件").Range("D1")="住所"
>     Worksheets("検索条件").Range("D2")="*東*"
>この場合は上手くヒットします
>[D2]が文字列文字列検索だからでしょうか

このばあいは「住所」と書いてある列から 「東」を含む行を抽出
するということで、こういう書き方になります。

> "*東*"

は数式ではないので、[D1]には 列見出しをコピーして入れておきます。


>> [E1] (ここは空白にします)
>今回の場合は日付を検索するから[E1]を空白に
>しておくのでしょうか

[E1]を空白にしたのは検索するデータが日付けだから、ではありません。
検索「条件が数式で書いてある」からです。


---
> もう一点
>   "=Year(一覧!A4)="
> (一覧!A4)=は Sheet名が一覧で
>        !A4の書き方について教えて下さい


ちょっとご質問がわかりません。

【73154】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/21(水) 19:35 -

引用なし
パスワード
   >▼masui さん:

>[E1]を空白にしたのは検索するデータが日付けだから、ではありません。
>検索「条件が数式で書いてある」からです。

あー、数式だから、という理由付けはまずかったですね
検索列が 数式の中に書いてある(一覧!A4 のような)セルアドレスにより
自動的に分かるときは(複数列を条件式に使うこともあるので)とくに
「どの列」の指定はしません、
といい直したほうが少しはましでした m(_ _)m

【73156】Re:AdvancedFilteで日付を検索
発言  kanabun  - 12/11/21(水) 20:00 -

引用なし
パスワード
   ▼masui さん:

もう一度、説明し直してみます。

フィルタオプションの設定(詳細設定、AdvancedFilter) で検索条件を
セル範囲に書くときは、2つの方法があります。

I. 比較検索条件
 特定の値や指定した範囲内の値が入力されている行を表示します。
 検索条件見出しは、比較の対象となる列の見出しと同一の文字列を使用します。
<例>
    D    
1   住所   
2   *東*

<例2>
 D     E     F   
販売員  売上高   売上高
河合   >10000    <80000

※ともに検索条件見出し(1行目)は、比較の対象となる列の見出しをそのまま
 用います。


II. 計算検索条件
 計算検索条件の指定には、ワークシートの数式を使用します。
 数式を使用した場合、リストにない値を使って検索条件を計算する
 ことができます。
 計算検索条件の見出しは、リスト内の列見出しとは異なる文字列を
 使用するか、「見出しなし」にしておきます。
 入力する数式は、その計算結果が論理値 (TRUE または FALSE) になる
 ようにします。リストから数式の計算結果が TRUE になる値(行)だけ
 を検索します
<例>
    E     
1  条件
2  =AND(売上高>10000,売上高<80000)
3  

<例>
   E     
1     
2 =YEAR(一覧!A4)=2012
3 =LEFT(一覧!A4,4)="2012"

【73164】Re:AdvancedFilteで日付を検索
お礼  masui  - 12/11/22(木) 12:18 -

引用なし
パスワード
   ▼kanabun さん:
ご丁寧な説明有難うございました
よく理解できました

【74028】Re:AdvancedFilteで日付を検索
質問  masui  - 13/4/7(日) 10:52 -

引用なし
パスワード
   ▼kanabun さん masui です:>
以前下記の解答をいただきましたものです
これで全て解決したのですが
一点疑問が出ましたので再度質問させてください

1)A4セルには "2012/10/20 AM"のような文字列が代入されていれば
   > [E2] FALSE
   > [E3] TRUE
   となるはずなのですが
  [E2] #VALUE   
  [E3] TRUE
   となります しかし 検索はちゃんと抽出されています
  [E2] がなぜFALSEにならないのでしょうか


2)A4セルに 2010/10/15 のような2012年でない日付(数値)が入っていれば
  [E2] FALSE
  [E3] FALSE
  となりますが TRUEでなくても "2012"の行が抽出されます
  [E2] =YEAR(一覧!A4)=2012 
  [E3] =LEFT(一覧!A4,4)="2012" 
  となっていればよいのでしようか
よろしくお願いします


>たとえば 年が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]の文字列とは異なる文字列にしてください。

【74029】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/7(日) 21:33 -

引用なし
パスワード
   ▼masui さん:
こんにちは〜

>一点疑問が出ましたので再度質問させてください
>
>1)A4セルには "2012/10/20 AM"のような文字列が代入されていれば
>   > [E2] FALSE
>   > [E3] TRUE
>   となるはずなのですが
>  [E2] #VALUE   
>  [E3] TRUE
>   となります しかし 検索はちゃんと抽出されています
>  [E2] がなぜFALSEにならないのでしょうか

A4 セルの表示形式が「文字列」で "2012/10/20 AM"というテキストが
入っていて、かつ、抽出条件範囲[E1:E3]が以下のようになっていれば

>>[E1] (ここは空白にします)
>>[E2] =YEAR(一覧!A4)=2012   ← 一覧!A4(最初のデータセル)の年が2012
>>[E3] =LEFT(一覧!A4,4)="2012" ← 一覧!A4 の前4文字が "2012" である

>  [E2] #VALUE   
>  [E3] TRUE
>   となります
A4は「文字列」なのだから、[E2]の数式(日付けのYEAR関数)は数値として計算
不能で #VALUE! のエラーになり、
「文字列」が入っていてその先頭4文字が "2012" であれば[E3]は TRUE と
表示されます。


>2)A4セルに 2010/10/15 のような2012年でない日付(数値)が入っていれば
>  [E2] FALSE
>  [E3] FALSE
>  となりますが TRUEでなくても "2012"の行が抽出されます
>  [E2] =YEAR(一覧!A4)=2012 
>  [E3] =LEFT(一覧!A4,4)="2012" 
>  となっていればよいのでしようか

こちらはちょっと質問の意味が分かりません。

A4セルに 2010/10/15 のような2012年でない日付(数値)が入っていれば
[E2]式 =YEAR(一覧!A4)=2012  の結果は YEARは 2010 だから式の結果は
FALSE となって間違いありません。
また
[E3]に =LEFT(一覧!A4,4)="2012" のような式が入っていれば、
A4 のセルの値を文字列に変換したときの前4文字は "2010" であり "2012"
ではありませんから、FALSE で 間違いありません。

【74030】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/8(月) 9:20 -

引用なし
パスワード
   ↑前レス 少し勘ちがいをしていたので、
具体例で一緒に確認してみましょう。

新規シートのA列に フィルタオプションテストするための日付データを
以下のように書き込んでください。(ほんとに日付ではない日付風データ
も作ります)
(A列は、入力値が右詰めか(数値)左詰めに配置される(文字列)かが
分かりやすいように 「列幅」をすこし横に長くしておいてください)

|    A     | 
1 日付        | 
2     2010/10/25| ←標準書式のまま 2010/10/25 と打ち込む
3 2012/10/10     | ←表示形式「文字列」にして 2012/10/10と入力
4 2012/10/20 12:00 AM| ←表示形式「文字列」にして 2012/10/10 00:00AM と入力
5     2012/11/10| ←標準書式のまま 2010/11/10 と打ち込む
6 2012/10/10 AM   | ←標準書式のまま 2010/10/10 AM と打ち込む

つぎに、[B2:B6]を選択して 数式ボックスに =YEAR(A2)=2012 と打ち込んでから
Ctrl+[Enter] で確定してください。
同じように [C2:C6]範囲を選択して数式ボックスに =LEFT(A2,4)="2012" と打ち
込んで Ctrl+[Enter] で確定してください。
以下のような結果になると思います。

|    A     | B   C
1 日付        |       
2     2010/10/25| FALSE  FALSE
3 2012/10/10     | TRUE  TRUE
4 2012/10/20 12:00 AM| TRUE  TRUE
5     2012/11/10| TRUE  FALSE
6 2012/10/10 AM   | #VALUE! TRUE

なぜこういう結果になるのか、確認してみます。
▼2行目 [A2]は正しい日付(数値)データです。=YEAR(A2)の結果 2010が返ります。
2010は 2012 ではありませんから [B2]は FALSEとなります。
([C2]が FALSE となる理由については あとで考えてみます。実は
前回の推定、ここに間違いがありました)
▼3,4行目は表示形式「文字列」にしておいて入力したデータなので、
値は文字列です。ただし、文字列でも日付に変換可能な文字列データ
のときは Year関数が機能します。よって [B3:B4]は Year関数で 2012
が返ってくるので True となっています。また[A3:A4]は文字列の先頭
4文字が "2012" なので [C3:C4]は True となります。
▼5行目は日付の 2012/11/25 です。Yearは2012を返すので [B4]は
 TRUE となります。つぎに、ここがポイントですが、2012/11/25を
 文字列にすれば 先頭4文字は "2012" ですから[C4]は True になって
 よさそうなのにそうなってません。実はLEFT関数などが日付データ
 などの元は文字列でないデータに適用されるとき、セルの表示値を
 LEFTするのでなく、VALUE()関数で数値化した値を文字列に変換した
 ものが使われています。なので 2行目の 2010/10/25 という日付
 データのLEFT(data,4) は "2010" ではなく 40476 の左4文字 つまり
 "4047" なので、 これは "2012" でないから FALSE であり、
 この4行目の日付 2012/11/25 のLeft(data,4) も 41238 のLeft(,4)
 は "4123" となるから、<>"2012" で FALSE だったのです。
▼最後の6行目データは「標準」書式に打ち込んだ値が「正しい日付」
 ではないため、Year関数を使おうとしてエラー(#VALUE!)となって
 います([B6])。[A6]データは日付化不可能な文字列です。
 単なる文字列ですからその左4文字は"2012" で [C6]は True です。

D列に =VALUE(A2) としたときの結果
|    A     | D   
1 日付        |       
2     2010/10/25|  40476
3 2012/10/10     |  41192
4 2012/10/20 12:00 AM|  41192
5     2012/11/10|  41238
6 2012/10/10 AM   | #VALUE!

【74031】Re:AdvancedFilteで日付を検索
質問  masui  - 13/4/8(月) 12:14 -

引用なし
パスワード
   ▼kanabun さん
すごく丁寧な解答頂き有難うございました
よく理解することができました
再度次の2点確認をお願いします

1)ここでの TRUE FALSE #VALUE!の意味は比較判定の結果がFALSEであっても
  条件式で検索されるため
  あくまで[A2]の値と検索文字を比較している結果の判定と考えてよろしいので  しょうか

2)|    A     | B   C
  [6] 2012/10/10 AM  | #VALUE! TRUE
  
  =YEAR(輸送手配一覧!H4)=2012
  =LEFT(輸送手配一覧!H4,4)="2012"
  この場合 [2012/10/10 AM]が検索されません
  その他の行の日付データーは検索されます
  どのように処理をするのでしょうか   

よろしくお願いいたします

【74032】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/8(月) 18:01 -

引用なし
パスワード
   ▼masui さん:

>よく理解することができました

>再度次の2点確認をお願いします
>
>1)ここでの TRUE FALSE #VALUE!の意味は比較判定の結果がFALSEであっても
>  条件式で検索されるため
>  あくまで[A2]の値と検索文字を比較している結果の判定と考えてよろしいので  しょうか

う〜ん、またもや質問が分かりませ〜〜ん (ToT)

> ここでの TRUE FALSE #VALUE!の意味は
B列 C列の数式の結果です。

> 比較判定の結果がFALSEであっても
> 条件式で検索されるため
そこの例は セルに書いた普通の数式であり、

|    A     | B   C  | D   
1 日付        |        |     
2     2010/10/25| FALSE  FALSE |  40476
3 2012/10/10     | TRUE  TRUE |  41192
4 2012/10/20 12:00 AM| TRUE  TRUE |  41192
5     2012/11/10| TRUE  FALSE |  41238
6 2012/10/10 AM   | #VALUE! TRUE | #VALUE!

ここで、
           [B2] =YEAR(A2)=2012
           [C2] =LEFT(A2,4)="2012"
                       [D2]=VALUE(A2)

フィルタオプションの「条件式」ではありません。
(もっとも、フィルターオプションの抽出条件式の形をしていますので、
B列 C列のどちらかが True になっている行は もしA列に対し
B列 C列の条件式を書いてフィルタオプションを実行すれば、
B列 OR C列の少なくともどちらかがTRUE になっている行、
すなわち、3,4,5,6 が抽出されることになります。---という意味では
式は条件式です。)

この表をつくるとき
> [B2:B6]を選択して 数式ボックスに =YEAR(A2)=2012 と打ち込んでから
> Ctrl+[Enter] で確定してください。
> 同じように [C2:C6]範囲を選択して数式ボックスに =LEFT(A2,4)="2012" と
> 打ち込んで Ctrl+[Enter] で確定してください。
と書きましたが、
フィルタオプションの条件式を書くときも同じで、条件式(数式)は抽出対象
範囲のいちばん上のデータ行を使ってすべてのデータ行を代表します。
たとえば [E2]に =YEAR(A2)=2012 と書いて、
[E3]に =LEFT(A2,4)="2012" と書いてフィルタオプションをかけて A3〜A6
までの行が抽出されるのは、6行目のときには =YEAR(A6)=2012 条件式と
=LEFT(A6)="2012" 条件式とでOR判定しているからです。2行目は 2つの条件式
のどちらも FALSEを返してますから 抽出されません。


>2)|    A     | B   C
>  [6] 2012/10/10 AM  | #VALUE! TRUE
>  
>  =YEAR(輸送手配一覧!H4)=2012
>  =LEFT(輸送手配一覧!H4,4)="2012"
>  この場合 [2012/10/10 AM]が検索されません
>  その他の行の日付データーは検索されます
>  どのように処理をするのでしょうか   

これも残念ながら、ご質問の主旨が不明です。
そこのB,C列の数式は
>  |    A     | B        C
  [6] 2012/10/10 AM   | =YEAR(A6)=2012 =LEFT(A6)="2012"

となっているとしたら、
[A6]が "2012/10/10 AM" (←これは日付ではありませんから、単なる
文字列です) という値は YEAR関数適用不可で B列数式の結果は「#VALUE!」と
なり、C列数式の結果は(文字列の左4文字が "2012" なので)「TRUE」という
結果を返します。

【74039】Re:AdvancedFilteで日付を検索
質問  masui  - 13/4/9(火) 15:23 -

引用なし
パスワード
   ▼kanabun さん
  質問の仕方が悪く申し訳ありません
  実例から疑問点を示してみます。
  下記表[Sheet1]のデーター表からAdvancedFieter を用いて
  日時の抽出をしました
----------------------------------------------
 疑問点(1)
   [例ー1]では抽出条件式が
   A列       B列      C列      D列
   行No      品名      日時      TEL
    1          #VALUE!    
    2          FALSE    
  いずれも[TRUE]ではないのに抽出されている
  ただし
    [抽出されない]    
    4  SLD−3  2007/3/16 PM      TEL 045-574-1011
--------------------------------------------------
疑問点(2)
  [例ー2]では抽出条件式が
   A列      B列     C列      D列
  行No      品名     日時      TEL
   1         #VALUE!    
   2         TRUE
  =LEFT(Sheet1!C1,4)="2012"    
  が[TRUE]であるにもかかわらず下記のものが抽出されていない
  他のものは抽出されている  
   行No  品名         引取日時         TEL
    1      SUD−100    2012/8/23AM    02-26521025
-------------------------------------------------------
 「以下のご説明ですと[TRUE]が抽出される」とありますが
  [例ー1];[例ー2]をみますと定義どうりの結果には
  ならなく、 又抽出されたものもあれば、されないものもある
  何故なのでしょうか
  よろしく、お願いいたします
  
>フィルターオプションの抽出条件式の形をしていますので、
>B列 C列のどちらかが True になっている行は もしA列に対し
>B列 C列の条件式を書いてフィルタオプションを実行すれば、
>B列 OR C列の少なくともどちらかがTRUE になっている行、
>すなわち、3,4,5,6 が抽出されることになります。---という意味では
>式は条件式です。)

************************************************
        [Sheet1]
   A列       B列          C列         D列
   行No  品名         引取日時         TEL
    1      SUD−100    2012/8/23AM    02-26521025
    2  固定具    2012/8/23         電話:045-510-6212
    3  SUD-3 1台    2007/1/22         044-287-4415
    4      SLD−3    2007/3/16 PM    TEL 045-574-1011
    5      VB-57/C    2012/7/19         044-287-4415
    6      C−1R    2007/4/25     TEL 0198-27-4171
    7  PENCIL    2012/11/19    045-510-2090
    8      SUD-100    2008/10/11    028-729-0811
------------------------------------
[例ー1]
    抽出条件表[Sheet2]            
   A列  B列      C列      D列
   行No      品名      日時      TEL
    1          #VALUE!    
    2          FALSE    

   抽出条件式            
   行No        C列    
    1      "=YEAR(Sheet1!C1)=2007    
    2  "=LEFT(Sheet1!C1,4)="2007"
--------------------------------------    
        抽出結果    [Sheet3]
   A列       B列          C列      D列
   行No       品名   引取日時    TEL
    3     SUD-3 1台  2007/1/22       044-287-4415
    6     C−1R   2007/4/25   TEL 0198-27-4171
    [抽出されない]    
    4  SLD−3  2007/3/16 PM      TEL 045-574-1011
------------------------------------------------------
 [例ー2]
       抽出条件表[Sheet2]
   A列      B列     C列      D列
  行No      品名     日時      TEL
   1         #VALUE!    
   2         TRUE
    
  抽出条件式
  行No       C列        
  1    "=YEAR(Sheet1!C1)=2012    
  2    "=LEFT(Sheet1!C1,4)="2012"    
-----------------------------------------
     抽出結果[Sheet3]
  A列    B列      C列           D列
  2  固定具      2012/8/23   電話:045-510-6212
  5  VB-57/C      2012/7/19    044-287-4415
  7  PENCIL      2012/11/19   045-510-2090
    [抽出されない]    
  1  SUD−100      2012/8/23AM     02-26521025
--------------------------------------------------------

【74051】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/10(水) 20:41 -

引用なし
パスワード
   ▼masui さん:

ご提示のサンプルデータで
こちらでもやってみました。

[あるシートの]A〜D列の表データ
◆列関係がよく分からなかったのですが、A列は
列見出しが「行No」で 2行目から1,2,3...の連番になっている
ものとしています。

__A_____B____________C__________D_________
行No  品名    引取日時    TEL
 1  SUD−100 2012/8/23AM  02-26521025
 2  固定具     2012/8/23  045-510-6212
 3  SUD-3 1台    2007/1/22  044-287-4415
 4  SLD−3  2007/3/16 PM  045-574-1011
 5  VB-57/C     2012/7/19  044-287-4415
 6  C−1R    2007/4/25  0198-27-4171
 7  PENCIL     2012/11/19  045-510-2090
 8  SUD-100    2008/10/11  028-729-0811

に対して
[例-1]
_____F_______________
1 日時
2 =YEAR(C2)=2007     (表示は #VALUE!)
3 =LEFT(C2,4)="2007"   (表示は )

という抽出条件([F1:F3]範囲)でフィルタ抽出しますと
(◆F1 はほんとは空白でよいのですが、「引取日時」でなければ
なんでもよい、ということで「日時」としました)
(◆また 数式はいちばん上の「データ」に対して条件式を書くのだから
C1 ではなくて C2 ですよ!)

以下のように、3つの2007年データが抽出されます。

__A_____B________C______________D_________
行No  品名  引取日時    TEL
3  SUD-3 1台   2007/1/22  044-287-4415
4  SLD−3 2007/3/16 PM  045-574-1011
6  C−1R   2007/4/25  0198-27-4171


また
[例-2]
_____F_______________
1 日時
2 =YEAR(C2)=2012
3 =LEFT(C2,4)="2012"

という抽出条件([F1:F3]範囲)でフィルタ抽出しますと
以下のように、4つの2012年データが抽出されます。

__A_____B________C______________D_________
行No  品名   引取日時   TEL
1  SUD−100 2012/8/23AM  02-26521025
2  固定具    2012/8/23  045-510-6212
5  VB-57/C    2012/7/19  044-287-4415
7  PENCIL    2012/11/19  045-510-2090


◆結局、そちらとちがうのは
行No 1 の 2012/8/23AM 

行No 4 の 2007/3/16 PM 
というAM または PM のついた2つのデータが、こちらでは
抽出されるのに、そちらでは抽出されない、という点です。
そちらでなぜ抽出されないのか?

たとえば、元表のC2以降に対して =VALUE(C2) のように
VALUEをとると、どういう結果が得られますか?

_____C列___________M列_____
引取日時    
2012/8/23AM  #VALUE!
2012/8/23    41144
2007/1/22    39104
2007/3/16 PM  #VALUE! 
2012/7/19    41109
2007/4/25    39197
2012/11/19    41232 
2008/10/11    39732 

こちらは M列としましたが、どこか空いている列であれば
どの列でもいいです。

【74052】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/10(水) 21:21 -

引用なし
パスワード
   ▼masui さん:

> 疑問点(2)
>  [例ー2]では抽出条件式が
>   A列      B列     C列      D列
>  行No      品名     日時      TEL
>   1         #VALUE!    
>   2         TRUE
>  =LEFT(Sheet1!C1,4)="2012"    
>  が[TRUE]であるにもかかわらず下記のものが抽出されていない
>  他のものは抽出されている  
>   行No  品名         引取日時         TEL
>    1      SUD−100    2012/8/23AM    02-26521025
>-------------------------------------------------------
> 「以下のご説明ですと[TRUE]が抽出される」とありますが
>  [例ー1];[例ー2]をみますと定義どうりの結果には
>  ならなく、 又抽出されたものもあれば、されないものもある
>  何故なのでしょうか

[例-2]条件でそちらで抽出されないデータは ちょうど条件式の[C2]セルを
参照しています。そして 条件式の2番目 =LEFT(Sheet1!C2,4)="2012"
という条件式の結果が True になっている、ということですから、
こちらで追試した結果のように、当然抽出されてしかるべきです。

なぜ、そちらで抽出されないのか?
不思議です。
そちらのデータが(もしくはデータ型が)みられないので、原因は
こちらでは推定できません。

【74053】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/10(水) 21:32 -

引用なし
パスワード
   ▼masui さん:

>----------------------------------------------
> 疑問点(1)
>   [例ー1]では抽出条件式が
>   A列       B列      C列      D列
>   行No      品名      日時      TEL
>    1          #VALUE!    
>    2          FALSE    
>  いずれも[TRUE]ではないのに抽出されている
>  ただし
>    [抽出されない]    
>    4  SLD−3  2007/3/16 PM      TEL 045-574-1011
>--------------------------------------------------
> 疑問点(2)
>  [例ー2]では抽出条件式が
>   A列      B列     C列      D列
>  行No      品名     日時      TEL
>   1         #VALUE!    
>   2         TRUE
>  =LEFT(Sheet1!C1,4)="2012"    
>  が[TRUE]であるにもかかわらず下記のものが抽出されていない
>  他のものは抽出されている  
>   行No  品名         引取日時         TEL
>    1      SUD−100    2012/8/23AM    02-26521025
>-------------------------------------------------------

●もしかして、
 条件式は
_____________________________
1   日時
2   =YEAR(Sheet1!C2)=2007
3行目 =LEFT(Sheet1!C2)="2007"

と書いてあるけれど、

◆抽出条件範囲の指定に 1行目と2行目しか指定してない
(3行目を範囲に入れてない)なんてこと、ありませんか?

_____________________________
1   日時
2   =YEAR(Sheet1!C2)=2007

だけだと、日付でない AMやPMの入ったデータは いくら先頭から4文字が
"2007" や "2012" であっても抽出されませんけど?

【74054】Re:AdvancedFilteで日付を検索
お礼  masui  - 13/4/10(水) 22:24 -

引用なし
パスワード
   ▼kanabun さん

大変お手数をお掛けしました
ご指摘の [抽出条件([F1:F3]範囲)でフィルタ抽出] で
([F1:F2]範囲)としていました
([F1:F3]範囲)にして実行しましたら
全てうまくいきました
 つまらないミスに気が付きませんでした
ありがとうございました
以後 もう少し慎重に照査します
ご迷惑をおかけしました

【74055】Re:AdvancedFilteで日付を検索
発言  kanabun  - 13/4/10(水) 22:38 -

引用なし
パスワード
   ▼masui さん:

>大変お手数をお掛けしました
>ご指摘の [抽出条件([F1:F3]範囲)でフィルタ抽出] で
>([F1:F2]範囲)としていました
>([F1:F3]範囲)にして実行しましたら
>全てうまくいきました
> つまらないミスに気が付きませんでした
>ありがとうございました

こちらこそありがとうございました。
もっとはやく そのことに気付くべきでした。
やっぱり 具体的なサンプルデータで確認してみたのが
よかったですね。

1496 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free