Excel。文字型になっている日付を日付型として使いたいけど、どうしたらいい
<LEFT+LEN関数・表示形式>
データを読み込んでみたら、日付がおかしい。
どうおかしいのかというと、文字(文字型)になっているわけです。
これでは、Excelの様々な機能を有効につかうことができません。
A列の日付は、日付はシリアル値なので数値なので、日付は右揃えになっているはずですが、左揃えになっています。
また、「=A2+1」と数式をつくってみたところ、「#VALUE!」というエラーが表示されました。
つまり、「日付」ではなくて「文字」として認識されているわけです。
このデータの原因は、「曜日」です。
曜日が付いてなければ、日付として認識されます。
まずは、対応方法をご紹介します。
色々な方法がありますが、比較的シンプルな方法をご紹介します。
C2に次の数式を設定し、オートフィルで数式をコピーします。
=LEFT(A2,LEN(A2)-3)*1
そのあと、C2:C3を範囲選択して、表示形式をホームタブの数値の書式にある「短い日付形式」に変更します。
これで、日付型にすることができました。
テキストファイルでもCSVでも曜日をつけたいなら、日付と分けてほしいところです。
C2に設定した数式の説明をしておきます。
=LEFT(A2,LEN(A2)-3)*1
なぜ、DATE関数ではなくて、LEFT関数をつかっているのか。
日付にするには、DATE関数をつかうというのがスタンダートなのですが、年と月と日をどうやったら抽出することができるのかを考えると、月と日をどのように抽出するのかというのが、問題になります。
例えば、2月の場合MID関数で、6文字目から1文字とすれば、抽出できますが、11月の場合だと、2文字抽出するように数式を設定しなければいけません。
同じように、日も、月によっては、何文字目から抽出したらいいのかも、異なるので、複雑な数式を用意する必要があります。
そもそも、曜日が邪魔なだけなので、曜日をカットした状態をつくればいいわけです。
そこで、LEFT関数をつかうわけです。
LEN関数をつかって、セル内の文字数を算出させて、曜日の「(曜日)」の3文字分の減算した値を左から抽出することで、文字数値型になります。
文字型を数値型にするVALUE関数をつかってもいいのですが、ネストだらけになってしまうので、VALUE関数をつかわずに、文字数値型に「×1」することで、数値型にすることができます。
また、算出結果に、TEXT関数で、年月日の短い日付形式をネストすると、また文字数値型に戻ってしまうので、表示形式をつかいました。
簡単に思われる処理も色々面倒だったりしますので、Excelにインポートする前に解決できるものは解決しておきたいところですね。