Excel VBA質問箱 IV

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

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


8278 / 76732 ←次へ | 前へ→

【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!
1 hits

【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 発言

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