|
↑前レス 少し勘ちがいをしていたので、
具体例で一緒に確認してみましょう。
新規シートの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!
|
|