- ベストアンサー
エクセル 日付の修正
お尋ね致します。 あるエクセルの表なんですが、A列が、31001(令和3年10月1日)という形の日付になっています。 これをyyyy/mm/ddに変えるため、B列の全行に2021と入力し、C列にmid関数で月を取り出し、D列にright関数で日を取り出し、この3列を使ってE列をdate関数で2021/10/01 にしています。 これよりスマートな方法があったらご教示願えませんでしょうか? ちなみに最後の形はR3/10/01でもOKです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
E1に =DATE(2018+A1/10000,MOD(A1/100,100),MOD(A1,100)) と書きます。 この式をE1に入れると「44470」のように、日付シリアル値が表示されるので、表示形式を「西暦年/月/日」や「和暦年/月/日」に変更しましょう。 なお、数値で「31001」のように年月日が区切り無しで入力されているのを、年、月、日に分解する場合、LEFTやMIDを安易に用いてはいけません。 「年が絶対に一桁」なら「月は2文字目から2文字分」ですが、令和10年を過ぎたら「月は3文字目から2文字分」になってしまいます。 MID関数を使って取り出している場合「年が1桁のデータと、年が2桁のデータが混在」していると、「月」の切り出し開始位置が2文字目の場合と3文字目の場合が混在してしまい、動作しなくなります。 MID関数を将来的にも使い続けるなら「元データが5桁なのか6桁なのかを判定して、2通りの切り出し方を切り替えする必要があります(「2000年問題」のように「和暦2桁問題」が発生します) 提示した回答では「年は元の値を10000で割った値」「月は元の値を100で割って、それを更に100で割った余り(つまり、千と百の桁の2桁)」「日は元の値を100で割った余り」にしてあり、年が1桁でも2桁でも何桁でも、正しく動作します。 「令和10年ころには、もう、このブックは使ってない」というなら問題は無視できますけど…。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
これを質問する前に、A列のセルのデータが、 (1)文字列で入っているのか(多分先頭に半角のアポストロフィが付いている)、(2)普通の数のようにエクセルのセルに、31001と入っているのか、 (3)その他、そのセルに対する表記形式の設定で、そうなっているのか、 (A)区別することの重要性を認識し、 (B)エクセルの日付の、「日付シリアル値」の仕組の理解が必要だが、そういうことは、質問に説明してない。初心者だろう。 ーー なんとなく、セルには、数字で31001(3万1千1)と入っているのではないかと推測する。 ここのセルのイメージの、1部を取り出すために関数を使うには、文字列対象の関数しかなく(ほかの方法として、割り算の商や余りを使えるかも)、文字列化してから1部を取り出す(取り出したものも文字列の数字)を使う。 その場合には、後尾から、2桁,次の2桁、残り桁数を取り出す必要がある。 例データ A2:E3 数 文字列化 日 月 令和年 31001 31001 01 10 3 120912 120912 12 09 12 後部からの2桁 日 =RIGHT(A2,2) 中間の2桁 月 =LEFT(RIGHT(A2,4),2) 年の部分 =LEFT(A2,LEN(A2)-4) これで文字列の数字が確定。 後は、この年、月、日の3つのデータを使って、日付シリアル値を作る。 F2に =DATE(E3+2018,D3,C3) C3やD3やE3は文字列で会ったはずだが、エクセル関数の引数部分では、文字列数字は、数字化して扱ってくれる、というお助け機能があるのでOK。 結果 F1:F3 西暦 2021/10/1 2030/9/12 ーー そしてエクセル日付は、好みの日付の表示形式を設定するためには、セルの値が、 日付シリアル値(その日は、1900年から何番目の日かの整数)でセットしておく 必要がある。 === 以上の如く、ややこしいことになるので、エクセルでは、当初から、西暦で 2022/4/13のようなデータ入力の必要性がわかるだろう。 ただ和暦の日付も年号漢字付きで、入力できるタイプ(即座に日付シリアル値に変換してくれる)があるので勉強のこと。
- msMike
- ベストアンサー率20% (364/1805)
お礼
ありがとうございました。大変助かりました。