• ベストアンサー

Excel=答えが日数で出ない

Excel2007 関数:締切日 E5=締切日:2011/12/10  F5=残り日数:1902/4/9 → 日数ででないので悩んでいます J5=Today:2009/9/1 式=DATEDIE(J5、E5、”d”) 教則本いわく、「ツール」→「アドイン」→「分析ツール」にチエック済み 日数の出し方教えて下さい 

  • winhi
  • お礼率67% (43/64)

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

  • ベストアンサー
回答No.4

> 言い直します > 2/年3/17 で答えを出したいのです 2年3ヶ月9日ですね。datedif関数の解説を読みましょう。あなたの 書いた第3引数"D"が日数でした。答は830日。同様に、"M"だと27ヶ 月、"Y"だと2年という答が返ってきます。さらに、"MD"とか"YM"な んてパターンもあります。 以上をふまえて、 =datedif(J5,E5,"Y")&"年"&datedif(J5,E5,"YM")&"ヶ月"&datedif(J5,E5,"MD")&"日" のようにするわけです。VBAで作る必要はありません。

winhi
質問者

お礼

誠に有難うございました。 出来ました、感謝いたしております。

その他の回答 (5)

回答No.6

2009/9/10 2010/3/5 0/年5/25 9月の残日数は20日 20日 + 3月の5日 で 25日 まてよ 2009年9月 の5ヶ月後 は 2010年の2月 2月の残日数は18日 18日 + 3月の5日 で 23日 ??????????????????????? と言う矛盾がありますが。。。 J5の日がE5の日を上回った場合 J5があと何日で来月になるかで日数をだしてます。そっちのほうが違和感ないでしょ?ということで 1。 ツール(T) → マクロ(M) → visual basic editor で該当のワークシートにコピ&ペースト 2。 ツール(T) → オプション(O) → セキュリティタブ → マクロセキュリティ →セキュリティレベル → 中 テストは3分・・・・バグがあったら反省する。後悔はしない 当日は残0でいいよね?無駄にコメント書いてみた。 ↓ 以下どうぞ Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$E$5") Or (Target.Address = "$J$5") Then 'E5 J5 に変更があった時 'If IsDate(Target.Value) = True Then '日付けだった場合 If IsDate(Range("E5").Value) And IsDate(Range("J5").Value) Then 'E5 J5 ともに日付けの場合 Range("F5").Value = 計算("F5", Range("E5").Value, Range("J5").Value) End If 'End If End If End Sub Function 計算(Target, E5, J5) As String Dim E5_yy As Integer Dim E5_mm As Integer Dim E5_dd As Integer Dim J5_yy As Integer Dim J5_mm As Integer Dim J5_dd As Integer '分解 E5_yy = Left(E5, InStr(E5, "/") - 1) E5 = Mid(E5, InStr(E5, "/") + 1) E5_mm = Left(E5, InStr(E5, "/") - 1) E5 = Mid(E5, InStr(E5, "/") + 1) E5_dd = E5 J5_yy = Left(J5, InStr(J5, "/") - 1) J5 = Mid(J5, InStr(J5, "/") + 1) J5_mm = Left(J5, InStr(J5, "/") - 1) J5 = Mid(J5, InStr(J5, "/") + 1) J5_dd = J5 Dim yy As Integer Dim mm As Integer Dim dd As Integer '年 yy = E5_yy - J5_yy '月 If (E5_mm - J5_mm) < 0 Then 'J5_mmが8月でE5_mmが6月だった場合10ヵ月後なので mm = 12 - (J5_mm - E5_mm) yy = yy - 1 '年は一つ下がるよね! Else mm = E5_mm - J5_mm 'そのまま End If '日 If (E5_dd - J5_dd) < 0 Then 'もしJ5の日のほうが大きいなら If mm = 0 Then 'もし月が0だった場合残りの月が-1になっちゃう yy = yy - 1 mm = 11 Else mm = mm - 1 End If Dim lastday As Integer lastday = last(J5_yy, J5_mm) 'J5の年月の最終日を求める とりあえずつきが繰り上がるまでの日数を。。 dd = E5_dd + lastday - J5_dd '20091002 - 200909 の場合 9月の最終日30 - 9 = 21  プラス 2 Else dd = E5_dd - J5_dd 'そのまま End If 計算 = yy & "/年" & mm & "/" & dd End Function Function last(yy, mm) As Integer 'Dim lastday() As integer = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} Dim lastday(13) As Integer lastday(1) = 31 lastday(2) = 28 lastday(3) = 31 lastday(4) = 30 lastday(5) = 31 lastday(6) = 30 lastday(7) = 31 lastday(8) = 31 lastday(9) = 30 lastday(10) = 31 lastday(11) = 30 lastday(12) = 31 If mm = 2 Then 'もし2月なら 'もし4で割り切れてかつ100で割り切れない または 400で割り切れる 場合 If ((yy Mod 4 = 0) And (yy Mod 100 <> 0)) Or (yy Mod 400 = 0) Then lastday(2) = 29 'うるう年なので2月は29日まで End If End If last = lastday(mm) 'その月の最終日をセット End Function

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.5

なるほどそれですね 私はなんでもプログラムで解決しすぎるようです 昔々これを解決するプログラムを別の言語で作った経験があったものですから Excelの関数をよく調べもせずに自作してしまうくせがあるようでう。目からうろこの回答でした 回答そをしに来て勉強しました。 ありがとうございました。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

つまり答えを2年3カ月と10日ですよという風に表示したいということなのでしょうか (なぜ例が17日になるのかわからない) やり方としては それぞれを年、月、日に分ける それぞれ引き算する その時に「小学校の算数でならったように足りない時は上の桁から借りてくる」 つまり月が1-5となったら年から12借りてきて年の差-1を年にして 13-5とする、 日の計算も同様にする このとき大の月、小の月、うるう年に配慮する としてやっと計算できるのじゃないかと思うので 関数と式だけでやるのはかなりの難題です。 どうします? 暇があったらVBAで関数作ってもいいのですが...

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

日数計算は間違っていません。 日数欄F5の書式が日付形式になっているので 標準、または数値に変えてください。 上記の例の通りだと 830 と出るはずです。 830日という意味です。

winhi
質問者

補足

説明不足で申し訳ありませんでした < F5=残り日数:1902/4/9 → 日数ででないので悩んでいます 言い直します 2/年3/17 で答えを出したいのです お力ぞいいただけますか 

回答No.1

単純にF5の書式が日付形式になっているだけなので、書式を数値か 標準にすればオッケーです。

winhi
質問者

補足

説明不足で申し訳ありませんでした < F5=残り日数:1902/4/9 → 日数ででないので悩んでいます 言い直します 2/年3/17 で答えを出したいのです お力ぞいいただけますか 

関連するQ&A

  • EXCEL VBAでWORKDAY関数を使用したい

    こんにちは。 タイトルの通りなのですが シート関数でのWORKDAY関数はうまく使用できるのですが VBAで同じような処理をするにはどうすればいいでしょうか? 例えば、開始日→A1、日数→A2、休日→F1:F10の場合 A3にその値を表示させたい場合 Range("A3")=workday(A1,A2,F1:F10) ではうまく行きません。 [ツール]-[アドイン]の分析ツールと分析ツール-VBAの チェックは付いています。 宜しくお願いします。

  • ある日数後の月、日を計算したい

    お知恵を拝借下さい。 エクセル2003を使用しています。 あるセルに日数が数値で入っています。例120 またあるセルには指定の月が入っています。 例12 その2つから、出来る限り簡素な関数を使って 指定月から、120日後の<月>をセルAに、 また、125などが入力されている場合もある為、 セルBには120日後の<日>を表示させることは可能でしょうか。 出来れば、アドイン⇒分析ツールを使わない方法で御願いします。

  • Excel2010の分析ツールについて

    質問させていただきます. この度,Excel2010において分析ツールのアドインを入れました. しかし,クラスター分析やコレスポンデンス分析の項目がございません. 大学の講義では2007においてこの項目を確認したのですが,何か特別な方法で導入するのでしょうか?

  • 分析ツールをインストールしても#NAMEエラーになる

    Excel2002で ツール-アドイン-分析ツールにチェックを入れているのに WORKDAY関数を使用すると#NAME?エラーになる。 解決方法を教えてください。

  • Mac Excel2011で相関行列は作れますか

    よろしくお願いします。 Mac Excel 2011で相関行列は作れますか? Windows Excelではアドインの分析ツールで作成可能なのですが,Macができなくて困っています。 分かりやすく教えていただけますと幸いです。

    • ベストアンサー
    • Mac
  • excel2007です。郵便番号ウィザードを使用しようと思ったのですが

    excel2007です。郵便番号ウィザードを使用しようと思ったのですが、アドインの項目自体がexcelに出ていません。過去にあったのかも知れないのですが、さっきofficeの修復とか色々やったので、無くなってしまったのかも知れません。 郵便番号辞書もダウンロードしてますので、これで良いとは思うのですが、そもそもexcelのアドインの項目の中に郵便番号ウィザード自体を確認出来ません。アドインの項目(有効なアドイン)を上から書いてみると、 Lookupウィザード インターネット アシスタントVBA ソルバーアドイン ユーロ通貨対応ツール ラベル印刷ウィザード 条件付き合計式ウィザード 分析ツール 分析ツール-VBA の様になっていてやはりありません。何でないのでしょうか。如何すれば郵便番号ウィザードを使う事が出来るのでしょうか。

  • EXCEL表の手入力を関数で自動化したい

    こちらで質問させていただいて、素晴らしい回答頂いたのですが、新たな問題が出てきましたので、再度質問させていただきます。 前回の質問は以下になります。 私は仕事で、毎日、10個ほどのサンプル(1個100g)について、理化学分析と味の評価をおこなっています。使用するサンプルについては、EXCEL表で在庫管理しています。受け入れた日に全部使用するわけではなく、最初に60g使用し、残りの40gは次回の比較に使用します。日々の手入力を改善したく、分析の払い出しを関数で自動化できないか検討しています。1回目の分析は自動化できましたが、2回目の分析日と使用量の払い出しの関数が、なかなかいい案がでません。いい案がありませんでしょうか? 作業の流れは以下になります。※EXCEL表1を参照 ①日付2023年11月16日に、オレンジ、イチゴ、リンゴを100g受け入れる。 ②1回目の分析は、その時に自動で60g払い出す。  リンゴでしたら、F11:=B11、G11:E11-40 ③D列を「リンゴ」でフィルターかける。その時、前回分と今回分のみが在庫40g残っているので、前回分を2023年11月16日の日付で40g払い出し、在庫をゼロにする。なので、最終的にすべてのサンプルは在庫40gとなる。 頂いた回答は、 H3に「=IFERROR(INDEX(B4:$D$1000,MATCH(D3,D4:$D$1000,0),1),"")」 I3に「=IF(AND(H3<>"",ISNUMBER(H3)),E3-G3,"")」 J3に「=E3-SUM(G3,I3)」 でした。 新たな質問というのが、EXCEL表1のH3の日付を、EXCEL表2のように年、月、日で分けるとそれぞれ、H3の関数をどうあてはめればいいかということです。 また、EXCEL表2の11/16のイチゴのように、同じサンプルが2個あった場合は、№の数が大きい方を1回目の分析で全量払い出し、1個だけ在庫を残すようにするためにはどうすればいいでしょうか? EXCEL表2の青枠4つの式を教えていただきたいです。教えていただければ、他の列のセルにもコピーする予定です。よろしくお願いいたします。

  • EXCEL関数で条件を満たす個数

    EXCEL関数で条件を満たす個数をカウントしたいのですが、どのようにしたらよいのでしょうか?    A列 B列 C列 D列 E列 F列 G列 H列 ----------------------------------------------------------- 1行    目標 1日 2日 3日 4日 5日   目標達成日数 ----------------------------------------------------------- 2行 山田  5  2  4  1  6  3    1 ----------------------------------------------------------- 3行 佐藤  3  1  2  6  5  4    3 ----------------------------------------------------------- 4行 岩本  4  6  2  1  2  5    2 上記のような表を作成し、目標を達成している日数をカウント するには、どのような関数を使用すれば良いのでしょうか? (H列)に目標達成日数を表示したいです。 山田さんの場合、 目標(セルB2)5以上を満たす日は、4日(セルF2)の6だけなので 目標達成日数(セルH2)は1となります。 佐藤さんの場合、 目標(セルB3)3以上を満たす日は、 3日(セルE3)の6と 4日(セルF3)の5と 5日(セルG3)の4と 目標達成日数(セルH3)は3となります。

  • 関数で経過日数を算出したい。

    基準日を1/9とします。   A   B   C   日付 データ  経過日数 ←土日祝を含みます。 1  1/1   な   8日 2  1/4   や   5日 3  1/5   む   4日 A、B列のデータからC列に経過日数を算出する関数をつくりたいのですが、調べたところWORKDAY関数で出来るようですがアドインしないと使えないようです。でも残念なことにインストールCDがありません(オフィス2000)。 なので、もし別の関数で出来るのであればご助言頂きたいです。 よろしくお願いします。

  • excel関数に関する質問です。

    excel関数に関する質問です。 =(+E9*F9)*1.05 "E9"の前についている"+"には、何か意味があるのでしょうか? また、関数で使用する記号について、分かりやすいサイトがあれば教えてください。 宜しくお願い致します。