• 締切済み

日付を抜き出したい

画像のようにA2~A3に文字列で日付が入力されています。 B2:C3に日付形式でA2に入力されている日付を”ー"で分けて西暦をつけて表示したいと考えています。 D2には開始日の日付の前日の日付を表示したいと考えています 年が変わった場合には翌年の日付を表示するにはどのような式を入力すればいいでしょうか。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

以下のようなことを心配する必要はないかもしれませんが、算式の使い方が不明なので、参考にしてください。質問の意図とは合っていないかもしれません。 このような月・日の入力の年を算式で補完しようとするのは、検証が大変でしょう。 実際、業務実績を月日の入力で作っている部署がありました。「年」は未入力なので頑張って算式で補完していたようでした。 しかし、業務実績は年間通じての累積データで、会議報告月の前月に作ったり、報告月月初めに作るので、年なしのExcelの日付がシステム日付に左右されて年月がおかしくなっていました。まずかったのは、年が変われば過去実績の年月が変わってしまうのと、12月から1月にかけての日付が、どちらの年を表すかExcel任せ(算式)になっていることでした。担当者にとっては、「年」が見えないので正しく入力されていると思ってしまっていたわけです。業務案件の期間には数年を要する案件もあり、「年なし」の月日データでは算式では判断できない訳です。[No.2]さんの書かれている通りでしょう。さらに、質問のように「年月」を文字列で入力していると、「年の判定」や「-の前後のどちらの月日が年またぎをしているか、していないかの判定やその期間」の計算はほぼ不可能でしょう。ただし、そのようなデータはないのならば関数の対応も可能でしょう。 例えば、質問の事例で、[2018/]12/24-[2019/]9/10 の場合、どう判定するか難しいところです。算式を使う場合は、過去の計算結果も検証が必要になります。特に年が変わるときは詳しく調べることが必要です。算式は、全ての場合に関しての検証が必要になります。フィルターや並べ替えでおかしなことが起きたりします。 上記の部署の処理を正確にするようにとの指示があったんですが、「入力(年月)の都合で、(不正確な)算式を作っている」ことが問題だと明らかなので、「月日」の入力を「年月日」に変更し、その日付を使っている箇所の関数を削除したり、簡略化し、処理も機能を使うようにしました。報告書の月日を年月日に変換する(検証も必要)ことが本来の仕事なのか、年月日を入力することで(検証などの)負荷も減ることを納得してもらい処理の変更を行いました。 ご参考に。

  • SI299792
  • ベストアンサー率48% (716/1482)
回答No.5

年はシステム年を使います。 >年が変わった場合には翌年の日付 これを実現するため、C2の式は長くなりました。 B2 =LEFT(A2,FIND("-",A2&"-")-1)+0 C2 =(YEAR(TODAY())+(LEFT(A2,FIND("-",A2&"-")-1)+0>(MID(A2,IFERROR(FIND("-",A2),0)+1,99)+0))&"/"&MID(A2,IFERROR(FIND("-",A2),0)+1,99))+0 D2 =B2-1 問題は、今日が2020/1/1の場合です。 当然、開始日 20201201 になります。 B2 =LEFT(A2,FIND("-",A2&"-")-1)+0 C2 =(YEAR(TODAY())+(LEFT(A2,FIND("-",A2&"-")-1)+0>(MID(A2,IFERROR(FIND("-",A2),0)+1,99)+0))&"/"&MID(A2,IFERROR(FIND("-",A2),0)+1,99))+0 D2 =B2-1 セルの書式設定、ユーザー定義で「YYYYMMDD」にします。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.4

[No.3]への補足、 全セルを yyyymmdd に書式設定しておくこと。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.3

B2: =IFERROR(IF(FIND("-",A2),LEFT(A2,FIND("-",A2)-1)*1),IF(ISNUMBER(A2),A2,A2*1)) C2: =IFERROR(IF(FIND("-",A2),MID(A2,FIND("-",A2)+1,9)*1),"") D2: =IFERROR(IF(FIND("-",A2),B2-1),"") 範囲 B2:D2 を下方にオートフィル

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルの基本的な知識の勉強不足による無理な要求です。 エクセルのシートで日付を文字列で持つことが、素人的です。 コンピュター的に、年を加えると、別の日付を、シートに同居させておいて、区別しろと言うのはおかしいでしょう。 関数しかできないレベルだろうから、現在日付を勘案することもできない。 エクセルの日付は「日付シリアル値」でシートに持って、表示形式で、好みの 書式に(年を省くも含め)するのです。

  • okwavey3
  • ベストアンサー率19% (147/760)
回答No.1

そもそもA列の値だけで年はわからない。 日付型のデータの表示項目が月日しかないのとは違い、単純に年を表す情報がその文字列にはない。 ないものをあることにする事は出来ません。 特定のルールに基づいて捕捉するならルールが必要で、そのルールに関しては何ら説明がないので出来ません。

関連するQ&A

  • Excelで日付を抜き出したい

    画像のようにA2~A3に文字列で日付が入力されています。 B2:C3に日付形式でA2:A3に入力されている日付を西暦をつけて抜き出したいと考えています。 B2:C3にはどのような式を入力すればいいでしょうか。

  • エクセルの日付機能

    エクセルの日付機能に関する質問です。 あるワークシートのA列に日、B列に月、C列に年が入力されています。これらの日付を行ごとに結合して、D列にdd/mm/yyという形式で表示させたいと考えています。 先ほど、D2に[=A2&"/"&B2&"/"&C2]という計算式を入力し、D列を右クリックして[セルの書式設定]→[表示設定]→[ユーザー定義]で[種類]欄に[dd/mm/yy]と入力しましたが、D2は日付として認識されず、ただの文字列として認識されているようです。 統合された文字列が日付として認識される良い方法を教えていただけないでしょうか?よろしくお願いします。

  • 日付に関して

       A B C  D  E 1   5 / 3 2    / 5 3    / 8 4   6 / 12 5    / 25     ・     ・ 上記のように日付をかいています。すべてのセルが文字列です。 D列に曜日(火)、(木)と自動で表示させるにはどのようにすればよいでしょうか? D列にCONCATENATEでA1:C1を結合させ、E1でD1を参照してセルの書式設定で(aaa)と入力したのですが無理でした。 どなたかお願いします!

  • Excelの日付表示について

    470622と文字列で入力されているA1のセルを西暦で1972/6/22と表示させたい場合は、まずB1のセルにMID関数でS47/06/22と変換させてからC1のセルにVALUE関数で数値に変換し、セルの書式設定で日付の西暦表示に変えるしか方法はないのでしょうか?他にいい方法があれば教えてください。

  • エクセルの日付表示について

    A1セルに090705という表示があります。これは、西暦・月・日を意味しています。表示形式は文字列です。この日から1ヶ月前の日付をB2セルに表示させたいのですが、良い方法は無いでしょうか?

  • エクセルの文字列を日付で計算したい

    お世話になってます。 仕事で外部システムからデータを抜き出しているのですが、 日付が文字データとして抜き出されます。 ※西暦下2桁と月日の6文字が、文字データとして抜き出されます。 普段、下記の操作(1)~(4)を都度行っているのですが、 ほかにもっと簡単なやり方はないでしょうか? (1)A列、B列に 20000000 を加算 (2)C列に関数を入力  =DATE(INT(A2/10000),INT(MOD(A2,10000)/100),MOD(A2,100)) (3)D列に関数を入力  =DATE(INT(B2/10000),INT(MOD(B2,10000)/100),MOD(B2,100)) (4)E列に数式を入力  =D2-C2 例:サンプル A列   B列    発注日 納品日    121201 121211  121211 130105  

  • エクセルで「日付」を表示する件

    エクセルで「日付」を表示する件 シート(1)の「A1」に「この事件は」の文字列。「B1」に書式を日付にして「平成22年8月1日」と入力。「C1」に「に起こりました」と入力。 複数のセルの文字列と日付を一つのセルに合わせて「この事件は平成22年8月1日に起こりました」のようにしたいので、「D1」に「=A1&B1&C1」と入力すると、「この事件は40391に起こりました」と表示されてしまいます。 解決方法を教えて下さい。 エクセルのバージョンは2002です。

  • IF文で、2つの日付の差分を求める式で「0」を表示させたい

    A列に初回来店日、D列に2回目来店日を入力している表があります。 C列に2つの日付の差分を日数で表す式を入れています。 =IF(AND(D2>A1,COUNT(A1,D2)=2),TEXT(DATEDIF(A1,D2,"d"),"#;;"),"") ※この式だと「0」は表示されず、ブランクになってしまいます。 「0」を表示させるにはどのような式に変更すればよろしいですか? 簡単な質問ですみません。エクセル2000です。    A      B     C     D      1 2007/10/22 2         0     0    2007/10/22 3 2007/10/23 4         1     1    2007/10/24 5 2007/10/25 6 2007/10/25 ※B列は、C列の値をコピーするための列です。 以上、よろしくお願いします。

  • エクセルの日付関数について教えてください。

    エクセルの日付関数について教えてください。 A列には日付が入力されています。 B列には金額が入力されています。 C列にも日付が入力されています。 A1に入力された日付(例:2010/4/30)とC1に入力された日付(例:2010/4/30)が同じ日付のときだけ、B列の金額を抽出しD10に合算させたいと考えています。 ***【サンプル】*****************************    A   B   C   D 1 4/30  100  4/30 2 4/30  200  4/30 3 5/1   100   4 5/2   200  5/2 5 5/2   100  5/2 6 7 8 9 10            同じ日付(1)の合計 11            同じ日付(2)の合計 ******************************************* 上記の場合のD10やD11の関数は、どのような関数に すべきでしょうか? どなたかご教授をお願い致します。 【環境】 WindowsXP Pro Excel 2003

  • Excelで日付と時間の自動入力

    教えてください。 エクセルで表を作っているのですが、 D列に文字を入力すると、 A列に入力した日付 B列に入力した時間 を「自動で」表示させたいのですが…マクロやVBAなどでできますでしょうか? できれば、D列の文字を消すと日付と時間も消えるようにしたいです。 初心者で申し訳ないのですが、よろしくお願いします。

専門家に質問してみよう