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で作る必要はありません。
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
No.5
- 回答日時:
なるほどそれですね
私はなんでもプログラムで解決しすぎるようです
昔々これを解決するプログラムを別の言語で作った経験があったものですから
Excelの関数をよく調べもせずに自作してしまうくせがあるようでう。目からうろこの回答でした
回答そをしに来て勉強しました。
ありがとうございました。
No.3
- 回答日時:
つまり答えを2年3カ月と10日ですよという風に表示したいということなのでしょうか
(なぜ例が17日になるのかわからない)
やり方としては
それぞれを年、月、日に分ける
それぞれ引き算する
その時に「小学校の算数でならったように足りない時は上の桁から借りてくる」
つまり月が1-5となったら年から12借りてきて年の差-1を年にして
13-5とする、
日の計算も同様にする
このとき大の月、小の月、うるう年に配慮する
としてやっと計算できるのじゃないかと思うので
関数と式だけでやるのはかなりの難題です。
どうします?
暇があったらVBAで関数作ってもいいのですが...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数について 4 2023/05/26 11:22
- Excel(エクセル) エクセルの数式で教えてください。 4 2023/06/27 09:56
- Excel(エクセル) Excel シート複数 金額日計表と日付 簡単にシートコピーしたら前日の残高と日付を変更させたい 1 2022/07/15 22:10
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Excel(エクセル) ExcelのABC分析についてです。 IF関数 VLOOKUP関数等など使わずに、ABC分析は出来ま 2 2023/06/15 23:57
- 統計学 データ分析に関する問題です。 ある町である感染症の保菌者は0.5%である。保菌者を少なくとも1人含む 3 2022/07/28 19:56
- Excel(エクセル) Excelヘルプの SUMIF関数の“コースのまとめ”で勉強した~いッ! 1 2023/08/05 17:44
- Excel(エクセル) 【Excel関数、count系】どなたか教示下さると助かります。 Excelでシフトを管理しており、 2 2022/07/09 06:34
- Excel(エクセル) Excel 参照元の値を参照したい 1 2022/08/20 18:58
- Excel(エクセル) excel 行でソートすると計算式が上手くいかない。 6 2022/06/01 08:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Androidスマホ半角数字の打ち方...
-
AndroidのスマホでPCみたいにフ...
-
Androidタブレットを軽くする
-
AndroidのAPN設定をいじってい...
-
AndroidX64のisoはありますか?...
-
Androidからパソコンに写真を移...
-
チェックリストアプリ Android ...
-
exeファイルを無効化するには
-
Androidステータスバー
-
Google天気のカエルが出ない
-
Android端末でお薦めのメーカー...
-
Android用Audacityはありますか?
-
Xperia 10 VとGoogle pixel7a ...
-
Androidのスマホを再起動しよう...
-
Android USBキーボード 日本語 ...
-
特定メーカのスマホは広告が多...
-
Androidスマホですが、最新広告...
-
Androidに関して質問です。私は...
-
最先端のCPUを詰んだAndroidス...
-
AndroidとiPhoneの2台持ちをし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AndroidのスマホでPCみたいにフ...
-
Androidスマホ半角数字の打ち方...
-
AndroidのAPN設定をいじってい...
-
アクリーのAndroid用アプリって...
-
Xperia 10 VとGoogle pixel7a ...
-
iPhoneとAndroidの違いは何です...
-
Android-X86 の最新 AndroidOS...
-
VBA、フォルダのパスに環境文字...
-
最先端のCPUを詰んだAndroidス...
-
Android マルチユーザー機能に...
-
Androidのボリューム
-
exeファイルを無効化するには
-
Androidのスマホを再起動しよう...
-
Googleフォトの容量がいっぱいに
-
AndroidX64のisoはありますか?...
-
auやdocomoのGalaxyS10ってAndr...
-
スマ放題画面のWi-Fi左下にある...
-
androidスマホの内部ストレージ...
-
Androidスマホですが、最新広告...
-
Android8,0.1ってまだつかえま...
おすすめ情報