[[20040502184002]] 『年だけと年月日が混在:時間順に並べ替えたい』(みどり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『年だけと年月日が混在:時間順に並べ替えたい』(みどり)

[年だけと年月日が混在している状態で、時間順に並べ替えたい]

Excel2002、WindowsXPを使用しています。

時間順に事項を並べたいのですが、それぞれの日付が、年だけのものと、年月日あるものとが交じっています。(例:1750と1758/4/5)
セルの書式を「日付」にすると、年だけの方が、違う数字に変換されてしまいます。これは、後ろに//をつけることで一応解決されました。
しかし、ソートすると、1750/10/3と1750/2/4の場合、10月の方が先に来てしまいます。どうすれば、時間順に並べることが出来るか、教えて頂きたいです。
年だけのものの表示形式を変えたり、セルの書式を変えたりすればいいのかと重いながら、わからないので、くどくどと説明させて頂きました。
よろしくお願い致します。


 まず、エクセルにおける日付の認識の仕方を先に把握してください。
Win版エクセルでは1900年1月1日を数値の「1」として、これを基点に
日数をカウントしていきます。
1900年以降例えば「1975/3/3」と入力すればエクセルは自動的に相応の
「数値」に変換しセルへ格納します。表示は日付形式を維持します。
ですが、「1758/4/5」は日付としてはまったく認識されていません。
見た目は似ていますが、1900年より前の日付を入力しても文字列として
認識されてしまいます。
逆に、
 
 >年だけのものの表示形式を変えたり、セルの書式を変えたりすれば
 
これは、日付の表示形式にしてしまうと、1900年1月1日から「1750日目」
と認識されてしまい、「1904/10/15」という表示になるはずです。
 
 >1750/10/3と1750/2/4の場合、10月の方が先に来てしまいます。
 
この原因も双方が文字列として認識されていることにあります。
文字列でのソートは文字列の先頭から順番に値の大小を比べていくので、
同じ桁の部分、「1750/1」と「1750/2」は「1750/1」を並べ替えの前の
ほうへもっていく傾向にあります。

 >年だけのものと、年月日あるものとが交じって
そもそも、これが曲者ですが、なぜ、年だけのセルが存在するのでしょうか。
年表か何かで正確な日付が不明ということでしょうかね。
どちらにせよ、年数で入力したものは数値、日付も入力されているものは
(1900年より前のものに関しては)文字列となるので、このままでは一元的に
管理するのは不可能です。
そこで、ソート用の作業列を作成し、ソートはその作業列を使用する
方法をお勧めします。
 
【手順】
目的の日付が入力されている列を仮にA列とします。
一行目が見出し。二行目からレコードが開始されているとします。
(A2からデータが入力されているとします。)
作業列を3列確保してください。列の挿入でも、データの最後でもかまいませんが、
以下の例ではBCD列を挿入して作業列としています。

B2(年数抜き出し)
=IF(ISNUMBER(VALUE(SUBSTITUTE(A2,"//",""))),VALUE(SUBSTITUTE(A2,"//","")),VALUE(LEFT(A2,FIND("/",A2)-1)))
C2(月の抜き出し)
=IF(ISNUMBER(VALUE(SUBSTITUTE(A2,"//",""))),0,VALUE(MID(A2,LEN(B2)+2,FIND("/",SUBSTITUTE(A2,B2&"/",""))-1)))
D2(日の抜き出し)
=IF(ISNUMBER(VALUE(SUBSTITUTE(A2,"//",""))),0,VALUE(SUBSTITUTE(A2,B2&"/"&C2&"/","")))

 上記の式をそれぞれ必要範囲へコピーしてください。
いずれも少し長めの式になってしまいましたが、
「1750/10/3」
「1750//」
「1750」
この3種類の入力に対応します。
「1750//」「1750」この2種類の入力の場合は月、日それぞれ「0」が返ります。
並べ替えは「データ」「並べ替え」で「B列昇り順」「C列昇り順」「D列昇り順」で
実行すれば日付順に並ぶかと思います。
(KAMIYA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.