• ベストアンサー

Excelでの日にちの関数を作成したい

今仕事で日程表を作っています。 そこで、今日から8ヵ月後の1日前の日程を日付関数を使ってしたいのですが、何かやり方はありますか。 例えばA1のセルで2005年4月15日から8ヵ月後の1日前の日にち(2005年12月14日)をB1のセルに入れたいのです。 2005年6月10日から8ヶ月後の1日前の日にちの場合は2006年2月9日となるのですが、同じような作業を手入力でやっているのがとても面倒です。 何か方法があれば教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 基本的には、 =DATE(YEAR(A1),MONTH(A1)+8,DAY(A1))-1 になります。 ただし、この数式だと、例えばA1が「2004/10/31」の場合、「2005/6/30」になります。 (8ヶ月後の6月に31日が存在しないため) これを、「2005/6/29」を返すようにしたいなら、以下のような数式にします。 =EDATE(A1,8)-1 ただし、EDATE関数は分析ツールの関数なので、メニューの[ツール]→[アドイン]→[分析ツール]にチェックを入れて下さい。 もし、分析ツールが使用出来ない場合は、 =MIN(DATE(YEAR(A1),MONTH(A1)+8,DAY(A1)),DATE(YEAR(A1),MONTH(A1)+9,0))-1 でEDATE関数の数式と同じ結果になります。

norinnonorin
質問者

お礼

早速のご回答ありがとうございました。 私の知りたい情報は「基本的には~」という関数式で 充分間に合いました。 私の頭の引き出しに入れておきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

年をまたぐ可能性がありますので、ワークシート関数でやるよりも、いっそのことユーザー定義関数を作成してしまった方が早いかもしれません。ただ、すぐVBAに頼るのは安易すぎるかもしれませんが、、 VBAならば、DateAdd関数があります。ワークシート関数としては用意されていませんので、ユーザー定義関数を作成します。 以下のコードを標準モジュールに貼り付けて使用します。 <手順> 1. [Alt]+[F11]キー押下で、Visual Basic Editor が起動します。 2. メニューから[挿入]-[標準モジュール]をクリック 3. 開いたウィンドウに次のコードをコピー&ペースト Function MonthAdd(基準日 As Date, 加算月数 As Integer) As Date   MonthAdd = DateAdd("m", 加算月数, 基準日) End Function 4. Visual Basic Editor を終了 以上で、普通のワークシート関数のように、MonthAdd関数が使用可能になります。 例えば、A1セルに 2004/12/1 の8ヶ月後の前日を求めるなら、 =MonthAdd("2004/12/1",8)-1 と数式を書き込みます。ユーザー定義関数 MonthAdd は基準日に指定した月数を加えた日付を返しますので、最後に -1 とすることで、前日の日が取得できます。

norinnonorin
質問者

お礼

早速のご回答ありがとうございます。 でも私の頭ではVBAが難しいです・・・ もう少し勉強します。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 日にちの隣の列を書き出すには?

    A列に日付(西暦、月、日)、B列には曜日(祝日は祝と反映)が一年分入力されています。(2009年とは限りません) C1セルにある日にちを月と日だけで入力(たとえば1月1日)したときにD1セルに対応する日付の曜日の欄のセル番号(1月1日の場合は B1、2月1日の場合はB32)と表示させる方法を教えて下さい。(なぜB1と表示させたいのかというと、 B1 をindex関数で参照して別の作業をしたいからです) 以下は私がチャレンジしてダメだった内容です。 難しいのは、A列の日付が過去の日付という事です。C1セルにはただ単に1月1日、とだけ入力するようにしたいので、セルの日にちは自動的に「今年の」1月1日になってしまいます。A列が昨年以前の日付だとすると、C1=A列にはならないので、簡単なlookup関数などでは処理できません。 E列に=month(A1)、F列に=day(A1) 、として下までコピーし、month(C1)とday(C1)と同じものを探す、なんていうやり方は頭にあるのですが、それを表現できません。 また、A列でヒットした場合、B列のセル番号を返す、(A123が同じだった場合にB123と返す)というのが私の知識では及びません。(1つ下のセル、なら、row+1ですが、1つ右のセル、だと、column+1ではできない) いろいろなやり方があると思いますが、これを使って1年分の売り上げ分析を一枚のシートでやろうと思っているので、なるべくこの部分で複雑な展開にはしたくありません(ファイルが重たくなる)。 皆さんのお知恵をお願いいたします。 よろしくお願いします。

  • エクセル関数式で一番新しい日にちを出すには?

    質問です。 エクセルのB列に(B2からB100位まで) 11/11/2006 10/10/2007 11/10/2007 11/24/2007 12/02/2007 などと日にちが入っています。この中から一番新しい日にちを検索してきてC2のセルに出したいのですが何かLATEST DATE(?)かなにかの関数式ありますか? 教えてください!

  • エクセル関数

    セルA1に入力した日付が2008年12月31日以前なら セルB1に○ 2009年1月1日以降なら× と入力されるような関数を教えていただけたら幸いです。 よろしくお願いいたします。

  • ”2009/7/2 9:01:00” の日にちのみの変更。

     初めまして、よろしくお願いします。  一つのセル内(A1内)に”2009/7/2 9:01:00”と入力されているデーター表        A         B 1 2009/7/2 9:01:00 2 2009/7/2 9:13:00 3 2009/7/2 9:15:00 4 2009/7/2 9:25:00 5 2009/7/2 9:33:00 6     : :     :  があります。ここで年、月、時間はそのままで、日にち部分のみを変更したシートを複数作りたいと思っています。できましたら関数式で、日にちを打ち込めば総て表せるようにしたいと思います。何か良い方法がありましたら、よろしくお願いします。

  • エクセルの関数について

    DATE関数について教えてください。 エクセルで、シート1のA1セルにTODAY関数で本日の日付が入るようにセットし、 A2にVLOOKでシート2よりコメントを引き込むように設定しています。 シート2はA列に1月1日から12月31日まで順に並べ、B列にコメントを入れた 表になっています。 ここで質問なのですが、A1やシート2の日付はすべて2008年が入ってしまい、 A1セルが2009年になってしまうと、シート2から引き込まなくなってしまいます。 これを回避するために、A1とシート2ともに年を省き 月日のみで永続的に引き込みが出来るようにしたいのですが、 DATE関数などを利用して可能でしょうか? よろしくお願いします。

  • エクセルの関数について

    エクセルで月間予定表を作っています。(縦に1日から末日までを表示) 年と月を入力すると、日付、曜日が自動的に表示されるようにしたいと思い、日付のところは、1日に、DATE関数を使用し、2日は、1日のセル+1とし、3日以降は、2日の書式をコピーしています。 そうすると2004年2月の場合、29日までなので、30,31日のところが、それぞれ1,2と表示されてしまいます。 1,2と表示される時には、セルを空白にしたいのですが、どんな関数を使ったらいいでしょうか? うまく説明できなくて申し訳ありませんが、どうぞよろしくお願い致します。

  • エクセルと日付の関数

    エクセルと日付の関数 エクセル2007で以下のような表を作成しています。 処理日(現在の日付)が例えば3月2日であるとき、以下の表のA2セルに 3月の前月、つまり2月の日付を入力する関数はあるのでしょうか。 初心者で申し訳ありませんが、よろしくお願いします。

  • エクセルの関数について

    下記の内容を表示する関数を教えてください。 セルAには日付が入ります。セルBに関数が入ります。 *セルBにはセルAの日付の直後の日曜日の日付が入ります。 *15日をまたぐときはBには直後の15日が入力される。 例 セルA(06/8/1)→セルB(06/8/6) セルA(06/8/14)→セルB(06/8/15) セルA(06/8/15)→セルB(06/8/15) セルA(06/8/16)→セルB(06/8/20) IF関数など組み合わせてみましたが条件通りの式ができません。 誰か教えてください、お願いします。

  • エクセルの関数を教えてください

    エクセルで(シート1)に日付を縦に3か月分ぐらい並べて違うシート(シート2)のセルに日付を入力します。 (シート2)で入力した日を(シート1)の日付の横のセルに●を表示させる事は関数で可能ですか? 例えば、(シート2)に【7月20日】と入力したら(シート1)の【7月20日】の横のセルに●を表示させたいんです。 仕事の報告書で毎日報告書を出す訳ではないので報告書を作った日(日付を入力した日)を一覧表で●が表示されていれば一目でいつ報告書を書いたか分かるようにしたいんです。 分かる方よろしくお願いします。

  • エクセルで、あと何日あるかを表示させる関数

    いつもお世話になります。 例えば、 Aのセルに『2006/1/12』という今日の日付データを入力します。 同じくBのセルに『2006/3/27』という未来の日付データを入力します。 Bの日付の「未来」まで、あと何日あるのか?という日にちをCのセルに表示させるには、 どのような関数を入力すれば良いのでしょうか? お詳しい方、何卒ご教授くださいませ。

TS8230が起動できません
このQ&Aのポイント
  • TS8230をインストールしたが、起動できない
  • 再インストールや再起動を試したが、起動できない
  • Windows10でTS8230が起動しない
回答を見る

専門家に質問してみよう