こんにちわ。
エクセルの日付計算について不思議なことが起こったので、質問に来ました。

エクセルのセルに「2011/10/31」と打ち込み書式を標準あるいは数値にすると「40847」となります。
これは1900/1/1から40847日たったと理解しております。
が、「1950/11/15」を標準あるいは数値にすると「18582」になります。これに61年分の日付つまり365*61=22265を足すと40847と2011/10/31と同じ値になってしまいます。

上記文章の書き方を変えると↓
2011/10/31→→40847・・・(1)
1950/11/15→→18582・・・(2)
61*365=22265・・・(3)
(2)+(3)=(1)
18582+22265=40847
つまり
1950/11/15の61年後=2011/10/31

私の考えでは1950/11/15の61年後は2011/11/15になると思っていたのですが、実際には上記のようになってしまいました。

なぜこのようなことが起こるのかがわからず困る&困惑しております。
勘違いがあるかもしれませんがアドバイスやご意見をお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

お話を整理しましょう。


2011/10/31はシリアル値で40847
1950/10/31は18567
ところで61年後ということで61年を日にちに換算するのですが1年は365日ではありません。4年に一度うるう年があります。そのため通常は日にちに換算するときには1年を365.25日として計算します。
したがって61年は365.25×61で22280.25日となります。
このため1950/10/31の61年後は18567+22280.25=40847.25となって2011/10/31のシリアル値との違いは0.25日にすぎません。うるう年のことを考えるなら一致しているということができますね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うるう年の事を忘れておりました。
それで365.25で計算すればいいんですね!
なるほど納得です!ありがとうございました。

お礼日時:2011/04/17 01:32

こんなお話もあります。


『Excelには、意図的にバグが仕込まれているのをご存知だろうか。
 それは「1900年2月29日が存在する」というものだ。      』
続きはこちら
http://ameblo.jp/akiran-jp2/entry-10772320173.html

うるう年を判定する方法
http://support.microsoft.com/kb/214019/ja
    • good
    • 0
この回答へのお礼

こんなお話もあるんですね~^^
勉強になりました。ありがとうございます^^

お礼日時:2011/04/17 01:30

「61年分の日付つまり365*61=22265」が間違っています。

「つまり」1年は 12ヵ月だけど必ずしも 365日ではないから。

1950/11/15 がセル A1 に入力されているとき、式 =EDATE(A1,12*61) は 2011/11/15 を返します。=DATE(YEAR(A1)+61,MONTH(A1),DAY(A1)) でもOKです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うるう年の事を忘れておりました。
こんな方法もあるんですね!
なるほど納得です!
ありがとうございました。

お礼日時:2011/04/17 01:33

閏年

    • good
    • 0
この回答へのお礼

ありがとうございます。
うるう年の事を忘れておりました。
なるほど納得です!ありがとうございました。

お礼日時:2011/04/17 01:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで日にちをまたぐ場合の時間計算

エクセルで表を作ってみて「あれっ」と思ったのですが、日にちを
またぐ時間データから、その期間の延べ時間を計算する方法って
あるのでしょうか?


6/10  6/11
22:00 9:58

上の区間の時間11:58を求めたいのですが、上手い計算方法があるので
しょうか?

Aベストアンサー

失礼しました
セルの書式について説明が抜けていましたね

24時間以上の時間を表示させるには、セルの書式設定の分類でユーザー定義を選び
次の書式を設定してください

 [h]:mm

[h] は24時間以上の時間をそのまま表示できるようにする記述方法です
これがないと、24時間を超える分は差し引かれて表示されます
ですので、#1のお礼にある 12:52 という表示は、実は 1日と12:52なんです
セルの表示形式でこの時間の部分だけを表示するように【指定】しちゃってるんですね

ちなみにどうでも良いことですが、書式を [m] とすると分単位で表示されます
覚えておいても損は無いと思います

Qエクセル2007 月/日 時/分の書式で日付、時間を入力 & 経過時間を計算

いつもお世話になっております。
よろしくお願いいたします。

エクセル2007を使用して以下は可能でしょうか?

・セルA1 と セルB1に MM/DD HH/MM(月/日 時/分) のフォーマットで日付&時間を入れB1からA1を引き、経過時間を割り出す。

セルの書式設定で、年 を省いて MM/DD HH/MM とする書式が見つかりませんがこれは不可なのでしょうか。
もし、上記不可でしたら、代替え案とその具体的な方法(式など)をおしえていただけますでしょうか?

よろしくお願いいたします。

Aベストアンサー

》 エクセル2007を使用して以下は可能でしょうか?

私の Excel 2002 で可能なので、大丈夫だと推測します。


》MM/DD HH/MM とする書式が見つかりませんが…

(Excel 2002 の場合ですが)それは“日付”の場所にないということでしょう?“ユーザー定義”の場所で貴方自身で作れば好い。

Qエクセル表で日にちの計算式

エクセル表で日にち4/1~4/30までを土日と祝日のお休みを引いた日数を計算したいのですが?そんな関数はありますか?
宜しくお願い致します。

Aベストアンサー

次のような式になりますね。

=NETWORKDAYS("2013/4/1","2013/4/30","2013/4/28")

4月28日が祝日となっていますのでこのような式になります。
仮に4月2日も休みでしたら

=NETWORKDAYS("2013/4/1","2013/4/30",{"2013/4/2","2013/4/28"})

Qエクセルで日付時刻の差分の計算

画像のように日時が格納されています。A1:B1~A2:B2は「何秒」or「何分」or「何時間」or「何日」かを計算するにはどうすればよろしいのでしょうか?

Aベストアンサー

シリアル値でA列は整数値、B列は1より小さい小数値なら

c列に =A1+B1 下セルにコピペ

2行目の方が大きいので

C3:=C2-C1
表示値がおかしければ、セル書式設定で年月日時刻に修正

その差分を時間表示、分表示、秒表示にするには

=int(C3*24)
=int(C3*24*60)
=int(C3*24*60*60)

同じく表示値がおかしければセル初期設定で標準に修正

Q差分の日にちを算出する計算

2007/02/02 18:00
2007/02/01 23:00

これを1日と見なす計算をしたいのですが、どういう風に計算したら良いのか
いい方法が思い浮かびません。

時間は無視し、あくまでも日にちが変わったら1日とします。
(年月は勿論考慮します)
なので、単純に引き算を行っても算出出来ないと思うのですが、
いい方法はありませんでしょうか?

Aベストアンサー

strtotimeしたとmktimeすればよいでしょう。
もちろんstrtotimeするまえに文字列で左から10文字抜き出してもいいですが。

<?PHP
$str1="2007/02/02 18:00";
$str2="2007/02/01 23:00";

$date1=strtotime($str1);
$date1=mktime(0,0,0,date("m",$date1),date("d",$date1),date("Y",$date1));
$date2=strtotime($str2);
$date2=mktime(0,0,0,date("m",$date2),date("d",$date2),date("Y",$date2));

$datediff=abs(($date2 - $date1) /(60 * 60 * 24));
print $datediff;

?>

Qエクセル、計算式で日付が41330となるのを西暦に

エクセル2010です。
画像のようなデータがあったとして、
たとえば、「2月のUFJの金額の合計をする」といった計算式を、別のセルに記入したいと思っています。

そこで作業列を作り、ワイルドカードを使った文字列をヒットさせるようにしました。
画像のE列に「=A○&B○」という式の作業列を作り、結果を記載したい目的のセルには、
=SUMIF(E16:E27,"2013年2月*UFJ",D16:D27)
としてみました。

しかし、ヒットさせたい"2013年2月"の部分が、標準形式の41330のような表示になってしまい、ヒットしません。
SUMIF式のほうを標準形式にしてみようと思いましたが、どの桁が何月と決まっているわけではないので、ワイルドカードを使って指定できません。
こういう場合、E列を「2013年2月25日UFJ」のように表示させるのは、どうすればよいのでしょうか?
アドバイスをいただけると幸いです。よろしくお願いします。

------------------------------------

ちなみに、SUMIFS関数やSUMPRODUCT関数で実現はできたのですが、データが多くなってくると処理がとても重くなってきます。
またピボットテーブルも考えたのですが、この結果を各種条件で表示させるセルをまず設定してから、そのセルを別の様々な計算式が参照するような連動をするかたちになるので、ユーザーの手で条件を変更するピボットテーブルでは対応できないのでは、とのことから、この方法を試しているところです。

エクセル2010です。
画像のようなデータがあったとして、
たとえば、「2月のUFJの金額の合計をする」といった計算式を、別のセルに記入したいと思っています。

そこで作業列を作り、ワイルドカードを使った文字列をヒットさせるようにしました。
画像のE列に「=A○&B○」という式の作業列を作り、結果を記載したい目的のセルには、
=SUMIF(E16:E27,"2013年2月*UFJ",D16:D27)
としてみました。

しかし、ヒットさせたい"2013年2月"の部分が、標準形式の41330のような表示になってしまい、ヒットしません。
SUMIF式の...続きを読む

Aベストアンサー

E列を
=TEXT(A1,"yyyy年m月dd日")&B1
のようにする。

Q日にちの計算

エクセルで日にちの計算がしたいのですが
ファイルを開くと残り契約日を表示させたいのですが
うまくいきません AV61に契約満期日が書いてあるのですが下の式では、・・・・・

DATEDIF(TODAY()-,(AV61),"Y")
まったくトンチンカンなので どなたか教えてください。

又残り日数表示を 年 月 日としたいのですが お願いします

Aベストアンサー

=IF(AV61="","",IF(TODAY()>=AV61,"超過","残"&TEXT(DATEDIF(TODAY(),AV61,"Y"),"0年;;;") & TEXT(DATEDIF(TODAY(),AV61,"YM"),"0ヶ月;;;") & TEXT(DATEDIF(TODAY(),AV61,"MD"),"0日;;;")))

といった具合で。

Qエクセル2010のコマンドボタンついて

MouseDownイベントでループ(Doなど)をさせた後
MouseUpイベントでStopさせるコードを作りましたが
MouseUpイベントまで行かずずっとループしてしまいます

(押されている間はボタンが凹んでいますが
このコードにすると凹まず中断しないと
動かせないようになってしまいます)

何が原因がわからないので回答お願いします
下はコードです

Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
Select Case Button
Case 1
Range("A1") = 1
Case 2
Range("A1") = 3
End Select
Do
Range("A1") = Range("A1") + Range("A1")
Loop
End Sub

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
Stop
End Sub
(Select Case Button
Case 1...にしても変わりませんでした)

MouseDownイベントでループ(Doなど)をさせた後
MouseUpイベントでStopさせるコードを作りましたが
MouseUpイベントまで行かずずっとループしてしまいます

(押されている間はボタンが凹んでいますが
このコードにすると凹まず中断しないと
動かせないようになってしまいます)

何が原因がわからないので回答お願いします
下はコードです

Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
Select Case Button
Case 1
Range("A1...続きを読む

Aベストアンサー

こんな感じのこーどにしてはどうでしょうか?

Dim B As Boolean

Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
B = False
Select Case Button
Case 1
Range("A1") = 1
Case 2
Range("A1") = 3
End Select
Do
DoEvents ’★追加
Range("A1") = Range("A1") + Range("A1")
Loop Until B = True ’★追加
End Sub

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
B = True ’★変更
End Sub


どうしてもStopで止めたいのであれば、Do Loop間を以下の様にすればよろしいかと思います。

Do
DoEvents
Range("A1") = Range("A1") + Range("A1")
If B = True Then Stop
Loop

こんな感じのこーどにしてはどうでしょうか?

Dim B As Boolean

Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
B = False
Select Case Button
Case 1
Range("A1") = 1
Case 2
Range("A1") = 3
End Select
Do
DoEvents ’★追加
Range("A1") = Range("A1") + Range("A1")
Loop Until B = True ’★追加
End Sub

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal...続きを読む

Q日にちの計算について

   A列      B列
1 2007/12/24 2008/11/15
2 2008/1/20  2008/11/16

とあったとします。
A列が開始日、B列が終了日だとすると、
実際に続いていた日にちを調べたいのですが、
関数でできないでしょうか。。
(イメージはB-Aの日数みたいなことです。)

いろいろ調べて、関数はDATEDIF関数を使うんじゃないかと
思うのですが…うまくできません(TT)

ご存知の方、知恵を貸して下さい!!よろしくお願いします。

Aベストアンサー

A,B列が日付シリアル値であれば=A1-B1で日数が出ます。
ーー
実際のカレンダーでの年、月、日数を出すならDATEDIF関数を使う。
2007/12/24    2008/11/1501022
2008/1/20     2008/11/160927
C1 =DATEDIF(A1,B1,"y")
D1 =DATEDIF(A1,B1,"YM")
E1 =DATEDIF(A1,B1,"MD")
YMは年で取った(計算した)残りの月
MDは月で採った余りの日
などの意味です。
Googleで「DATEDIF」で照会すれば該当も多く、実例も載っているでしょう。>うまくできません・・とはどんな点?

Qエクセル Aの日付以降の規則的な日付を表示

よろしくお願い致します。

a1のセルにある日付から2ヶ月後以降3年未満の「年」と「月」を表示したいのです。

つまり、34ヶ月分の「年月」をag3~ag14、aj3~aj14、am3~am12に表示したいです。
a1が09/07/10であればag3に09/09ag4に09/10・・・という具合です。

表示するセルが断続的なのですが、自働で表示することは可能でしょうか。

またa1を基準にして
今度はag30~ag34に

3年分の7月と12月を表示したいです。

つまり、a1が09/07/10であればag30に09/07ag31に09/12、ag32に10/07
という具合です。

こんなことって可能でしょうか?

Aベストアンサー

セルag3
=TEXT(DATE(YEAR($A$1),MONTH($A$1)+ROW()-1,1),"yy/mm")
~ag14までコピー

セルaj3
=TEXT(DATE(YEAR($A$1)+1,MONTH($A$1)+ROW()-1,1),"yy/mm")
~aj14までコピー

セルam3
=TEXT(DATE(YEAR($A$1)+2,MONTH($A$1)+ROW()-1,1),"yy/mm")
~am12までコピー

セルag30
=TEXT(DATE(YEAR($A$1),7,1),"yy/mm")

セルag31
=TEXT(DATE(YEAR($A$1),12,1),"yy/mm")

セルag32
=TEXT(DATE(YEAR($A$1)+1,7,1),"yy/mm")

セルag33
=TEXT(DATE(YEAR($A$1)+1,12,1),"yy/mm")

セルag34
=TEXT(DATE(YEAR($A$1)+2,7,1),"yy/mm")

参考まで


人気Q&Aランキング