[[20060718121128]] 『日付の計算 何ヶ月か知りたい』(aya) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日付の計算 何ヶ月か知りたい』(aya)

 日付の引き算をしたいのです。
 過去の参照を見るとdayとしての換算はあるようなのですが
 monthに換算したいのでお願いします。
 いまひとつ、応用しきれませんでした。(1900/1となる)

 セルL1にyyyy/mm/dd - セルH5にyy/mm= 別シートリンク先mm

 L1を基準にH列(5,6,7・・・)の差を「○ヶ月」として知りたいです。
 セル内を統一しなければならないなら
 セルL2にyy/mm  - セルH5(H6,H7,H8・・・)にyy/mm= 別シートリンク先mm

 としてもいいと思っています。
 よろしくお願いいたします。


 表示形式とシリアル値 の問題かとも思いますが、
ポイントを捕捉できないので、
 とりあえず、Excelヘルプで、
『日付と日付システムについて』 や 『2つの日付間の差分を計算する』
をご覧になってみてはいかがでしょう。

 また、ライブラリの
http://www.excel.studio-kazu.jp/lib/e1m/e1m.html
 ↑もご参照ください。
(sin)


 ヘルプを参照したところ

 2つの日付間の差分を計算する
 =(YEAR(A4)-YEAR(A3))*12+MONTH(A4)-MONTH(A3)
 異なる年の 2 つの日付間の月数を求める

 とありました。 
 実施したところ
 セルL2(yy.mm) - セルH5(yy.mm) =mm を目指して実施したところ
        '06.07   -        '03.09   = 01 
 となりました。

 また、
 =DATEDIF(L2,H5,"mm")
 としたところ#NUM となりました。
 L2には06.07
 H5には03.09
 と入力してあります。

 うまくいきません。。。

  (aya)


 日付(数値)として認識していないのではないでしょうか?
L2の入力を 06/7/1 、 H5の入力を 03/9/1 とするといかがですか?
(sin)

 =DATEDIF(L2,H5,"mm")→#NAME
 となりました

 L2;2006/7/1
 H5;2003/9/1
 としてみました。
 しかし、H列には約300ほどのデータがすでに「'yy.mm」の形で
 入力されています。

 (aya)

 =DATEDIF(H5,L2,"m")では?      (ぷーのすけ)

 確認ですが、L列は「日付」として入力されていて
 H列は「文字」として “月(2桁).日(2桁)”
 で入力されているんですよね?

 ちなみにH列には西暦で何年から何年のものが入力されていますか?
 全て2000年以降であれば空いた行に
 5行目="20"&H5&".1"
 を入れフィルドラッグ。結果を値張り付けした後
 メニューの データ→区切り位置→[次へ]→[次へ]
                   列のデータ形式を日付にして[完了]
 とすると、日付に変わると思うので
 H列に戻して引き算してみて下さい。

 ※試行錯誤する時はコピーを取った上でやることをお薦めします。

 (HANA)

 =DATEDIF(H5,L2,"mm")→#name?
 となりました。

 H列には2003年9月を03.09として始め
 現在の2006年7月(06.07)と入力されています。
 今後も2007,8,9・・・と随時データは追加していきます。
 L2,H5にはユーザー定義としてyy/mmと表示しています。
 ex)2006/7/1→「06/07」と表示

 皆様、アドバイス本当にありがとうございます。
 (aya) 


 両方日付ですか・・・。

 ちなみに
 ツール>アドイン>分析ツール
 にチェックは入ってますか?

 (HANA)

 衝突しました。
ぶーのすけさん や HANAさんと重複する点も多々ありますが、以下にそのまま貼り付けます。

 >=DATEDIF(L2,H5,"mm")→#NAME
 > となりました
 > L2;2006/7/1
 > H5;2003/9/1
まず、DATEDIF関数は、"mm"を月の表示と認識してくれないので、"m"とします。
また、DATEDIF(開始日,終了日,単位) ですから、=DATEDIF(H5,L2,"m") ですね。
L2とH5でどちらが小さい(古い)かも条件に入れるなら、
=DATEDIF(MIN(L2,H5),MAX(L2,H5),"m") とされたらいかがでしょう。

 >しかし、H列には約300ほどのデータがすでに「'yy.mm」の形で入力されています。
仮にH1:H300に入力されているとすると、
I1セルに =H1&".1" と入力し、I100までコピーし、
I1:I100を選択してコピー → 形式を選択して貼付け-値にチェックを入れてOK。
そのままI1:I100を選択した状態で、【データ】-【区切り位置】-【次へ】-【次へ】-【日付】にチェックを入れ-OK。
これをH列に貼り付け直す。
出来ましたか?

 ここから追記しました。
日付や時間は、正しく入力しておかないと、後々色々と面倒になる! と考えた方が良いと思います。
正しく入力した上で、画面上(表示上)を見易くされる事をお勧めします。
 ↓これもExcelヘルプの抜粋です。
 検索ワード:『ワークシートのセルにデータを入力する』
▼数値、文字列、日付および時刻を入力する
日付
日付を入力するときは、スラッシュ(/)やハイフン(-)を使って区切ります。
たとえば、「2002/9/5」または「5-Sep-2002」と入力します。
現在の日付を入力するには、Ctrlキーを押しながら;(セミコロン)を押します。
(sin)


 (HANAさん)
  ツール>アドイン>分析ツールにチェックは入っていました。

 (sinさん)
 日付の入力をしなおし
 現在H列には「'yy.mm.01」という形で入力されています。
 その後、=DATEDIF(H5,L2,"m") をやったところ
 #VALUE! と表示されています。
 エラーメッセージ(検証)をみると
 =DATEDIF("03.09.1".38899".m")
 となっていました。  

 またご指摘のとおり
 日付入力をyyyy/mm/ddで統一していこうと思うのですが
 その際、H列をどのように訂正したらよいですか?

 (aya)

 衝突しましたが、そのままの内容を貼り付けます。※追加された内容は見てます。

 日付の入力と表示に関して、下記を参考にして下さい。良い説明とは言えないかも知れませんが。。。
 計算に使用する日付は、日付形式で表示されている数値(シリアル値)です。
この件は、最初に書いてますが、ヘルプで【日付と日付システムについて】を再読ください。
 また、下記の内容をご自分でも行い、確認して下さい。
     A	       B      C          D
 1 2006/7/19   1  2006/7/19    1
 2 '06/07/19    2  2006/7/19    1
 3 06.07.19     2   #VALUE!   16
 4 '06.07.19    2   #VALUE!   16
 5 06.07.01     1  2006/7/19    1
     ↑         ↑      ↑         ↑
  実際の入力 =TYPE(A1) =A1*1  =TYPE(C1)
 A列は、実際に入力した内容です。
※但し、A5セルは、表示形式を【yy.mm."01"】として、『2006/7/19』と入力しています。
 B・D列は、TYPE関数でA・C列の値のデータタイプを調べた戻り値です。
TYPE関数の戻り値:1=数値、2=文字列、・・・・16=エラー値 【TYPE関数のヘルプを参照ください。】
これにより、普通に計算される数値にするためには、入力時にyyyy/m/dの様に頭に『'』を付けずに
『/』で区切ったものだけです。(1・5行目)
※頭に『'』を付けると、文字列の入力となります。『1』と『'1』は、同じ数字の1でも、数値と文字列の違いがあります。
 C列は、A列の値に1を掛ける事により、文字列の数字を数値の数字に置き換えています。(2行目)
※数値と見なせる文字列の数字は、Excel君が計算時に数値と見なしてくれます。例外はありますが・・・
エラー値『#VALUE!』は、1を掛けてもどう見ても文字なので計算できません。という事をエラーとして教えてくれています。
yy.mm.ddと思って入力しても、Excel君は、思うのは勝手だけど僕は文字としか見ませんよ!という事です。
また、C5は、A5の入力内容が2006/7/19なので、1を掛けても同じ2006/7/19となっています。
つまり、A5の06.07.01は、あくまでも表示内容であって、実際の値は2006/7/19という事です。
日付けとして認識できる正しい入力データになっていれば、y(年)とm(月)とd(日)を認識した表示ができます。

 ここからが、本題・・・
 >現在H列には「'yy.mm.01」という形で入力されています。
これは、文字列ですから、yyyy/mm/dd の形で再入力してみて下さい。

 >その際、H列をどのように訂正したらよいですか?
 既に入力済みのデータの事ですよね?
上でHANAさんや私の書き込んでいる方法(区切り位置)で、日付として認識できるデータに変換して下さい。
HANAさんの説明の方が、親切だったと思います。
(sin) とりあえず、ここまで。 不備があると思いますが、再チャレンジしてみて。
チョット追記、
. や , や " が、ごっちゃになってるので勝手に修正して書きますが、
=DATEDIF("03.09.1",38899,"m") で #VALUE! が表示されているという事ですよね?
=DATEDIF("03/09/1",38899,"m")  とすれば(なれば) 34 が、求められます。
日付と見なせる文字列 03/09/1 から シリアル値38899(日付 2006/7/1)の月数です。 


 H列を日付(シリアル値)に変えるのがいいと思いますが
 ('yy.mm.01 と言う形ではいっているのなら
   作業列5行目=--("20"&REPLACE(REPLACE(H5,3,1,"/"),6,1,"/"))
   としても日付(シリアル値)に変更できますね)

 >=DATEDIF("03/09/1",38899,"m")  とすれば(なれば) 34 が、求められます。
 と言うことなら、現在
 >現在H列には「'yy.mm.01」という形で入力されています。
 との事なので .→/ に置換でもできそうですね。
 (これだとH列は文字のままですが)

 (HANA)

 みなさま、本当にわかりやすく教えていただいてありがとうございました。
 無事、処理できました。
 欲をだせばなんですけど、、、
 34を2.10(2年10ヶ月)と表示させることはできますか?

 (aya)


 上で、貼っているリンクの応用になりますね。
【全文検索】の検索結果を貼っておきます。
http://www.excel.studio-kazu.jp/cgi-bin/estindex/estseek2.cgi?phrase=%E4%BD%95%E5%B9%B4%E4%BD%95%E3%83%B6%E6%9C%88&perpage=10&attr=&order=&clip=-1
(sin)


 すみません!
 ありがとうございました。

 (aya)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.