• ベストアンサー

文字列を年月に変換して、差を月数で計算したい

アンケートで6ケタで回答してもらった年月(例:201012)の2つの数値を計算して、差を月数で出したいのですが、どのようにしたら良いでしょうか?  例えば、下記のA-Bの差を月数で出したいのですが、どのような関数(あるいは方法)を使えば良いか教えてください。 例)  年月 A 201012 B 200511

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.5

文字列でも数値でも、文字列が数値に変換できるものなら、次でOKのはず。 A1,B1にデータがあるとする。負になればB1のほうが大きいだけ。 =(INT(A1/100)-INT(B1/100))*12+MOD(A1,100)-MOD(B1,100)

YYae
質問者

お礼

回答ありがとうございます。 こちらで計算してみようと思います。 ありがとうございます。

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

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 Excelのバージョンによっては、LEFT関数やRIGHT関数で数値データを処理すると、数値データではなく、文字列データとして扱われてしまう事があり、その場合には、そのままでは計算出来ない場合もあり得ます。  ですから、もし、ANo.2様の数式で上手く計算出来ない様な場合には、次の数式を試してみると良いと思います。 =(FLOOR(B1,100)-FLOOR(A1,100))*0.12+MOD(B1,100)-MOD(A1,100)

YYae
質問者

お礼

回答ありがとうございます。 アンケート収集の時に半角英数で回答してもらうつもりですが、もし文字列データとなってしまった場合はアドバイスいただいた件を試してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.3

#1さんのDATEDIF関数ですが、バグがあって「経過月数」の計算が正しくない事があるんです。式をテストしたわけじゃないので何とも言えませんが、条件的に引っ掛かりそうな気がします。実際にお使いになる場合は、以下のurlを確認された方が良いと思います。 http://www.niji.or.jp/home/toru/notes/50.html

YYae
質問者

お礼

ありがとうございます。 確認してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.2

このデータはどこにどんな形で入っているんですか? とりあえずExcelシート上で、セルA1とセルB1に、A1の方が必ずB1より後、という形で入っているとするならば。 =(LEFT(B1,4)-LEFT(A1,4))*12+RIGHT(B1,2)-RIGHT(A1,2) 日付シリアルなどを使わずに、単純に前半の差を12倍して、後半の差に足すだけでオッケーの筈です。

YYae
質問者

お礼

ご回答ありがとうございます。 上記の計算式で行うと、回答は-(マイナス)で出てきてOKですか?

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 =DATEDIF(TEXT(B1,"0000!/00")*1,TEXT(A1,"0000!/00")*1,"m")

YYae
質問者

お礼

早速の回答ありがとうございました。 きちんと月数で出てきました。

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

関連するQ&A

  • Excel 年月の差を求めたい

    Excel2007です。 年月の差を求めたいのですが 入力の方法と計算式を教えてください。 5年と3年2ヶ月の差を1年2ヶ月と計算したい。 文字列として入力すると計算ができません。 どのように入力して、どのように計算式又は関数を使えばよいか教えてください。 わかり難い質問かも知れませんがよろしくお願いします。

  • 月数の計算

    月数の計算で「何ヶ月目」か計算したいのですが、どのように関数を入れればいいでしょうか? (例)始まりが2月の日にちの場合(2/2でも2/25でも)は、2月中は全て1ヶ月目と表示させていのです。3月になると2ヶ月目というふうに・・・ ご存知の方は宜しくお願いします。

  • 勤続年月数の計算式教えて下さい

    勤続年月数の計算式教えて下さい A1に入社年月日を入力しています。 B1に本日までの勤続年数を出したい。次にC1に月数を出したい。年と月を別々のセルに 出したいので宜しくお願いします。

  • エクセルで二つの年月の差を求めたいのですが、、、

    よろしくお願いします。 エクセルの表に、  A   B   C   D  E (年) (月) (年) (月) 41   6   46   5 というように、二つの年月数が入っています。 この表でいう、46年5ヶ月と41年6ヶ月の差の期間を求めて、 その値をEに入れたいと思っております。 が、ちょっと複雑で、 例えばこれでいうと、4年11ヶ月となりますが、この場合4年を1ヶ月でも超えているので、数値を5年としてEの列に値を入れたいのです。 計算値が3年0ヶ月などになった場合は3年ですが、3年1ヶ月となった場合は4年としたいのです。 何か良い方法はありますでしょうか。 ご指南よろしくお願いいたします。

  • エクセルで月数の計算

    例えば、2007/5/8をA1に2008/1/31をA2に入力してA3でその期間の月数を求めます。この場合暦に従って計算し、1ヶ月未満の端数が生じたときは1ヶ月として計算します。上記の日付の場合8ヶ月と端数が生じるので9となります。A3に設定する関数はどのようになるでしょうか?

  • エクセルで月数の計算2

    例えばA1に開始日、A2に終了日、A3に数式を設定して月数を計算します。月数は暦に従って計算し、ひと月未満の端数はひと月として計算します。この場合、初日を算入(計算の対象に入れる)して計算する場合、下記の数式のどこを修正すべきでしょうか? =IF(DATEDIF(A1,A2,"MD")=0,DATEDIF(A1,A2,"M"),DATEDIF(A1,A2,"M")+1)

  • 勤続年数(月数)の計算および定義について

    エクセルで退職金の計算をしようと思います。 条件: a) 勤続年数は暦日によって計算 b) 1ヵ年に満たない月数は月割で計算し、1ヶ月に満たない日数は切り捨てる c) 退職金=基本給x勤続年数x支給率 d) 3年以上勤続のものに支払われる。 質問1: 1)満年数の勤続年数の計算は下記の関数でただしいでしょうか? 関数:DATEDIF(入社日,退職日,"Y") 例:1989/3/20(入社)2009/10/31(退職) の場合、満年数=20 2)残りの満月数の計算は下記で正しいでしょうか? 満月数=条件bの”1ヶ月以下切り捨て”に相当 関数:DATEDIF(入社日,退職日,"YM") 例:上記の場合、満月数は7 3)上記の例の場合(入社日:1989/3/20 退職日:2009/10/31) 退職金=基本給x(20+7/12) x 支給率  で正しいでしょうか? 4)上記の関数でいくと下記のような場合は、2年と11カ月になります。 例:1989/9/30 2009/10/31  これは定義上、2年11カ月になるのでしょうか?(そうなると退職金が受けられない)。 それとも、関数自体が間違っているのでしょうか? 以上4点について、ご教授をお願いいたします。 お返答、お待ちしております。

  • 月数計算

     請求書の作成をエクセルで行おうとしているのですが、請求対象月を各請求書ごとに記載しなければなりません。現状では月が変わるとある一箇所だけ月数を変えてその月から+1したり-1したりしているのですが、年が変わってしまい12月分の請求書を作らなくてはならないのに-1をすると0月分とでてしまいます。12月のときも+1したら13月とでたところを手作業で修正しました。そのようなことがおきないように下記のようなIF関数を書いたのですが、FALSEとでてしまいうまくいきません。 年をこせる関数を現在の月とそこから+-するための数字だけで何月分と簡単にでてくるような数式ってどうやって書けばいいのか教えてください。 =IF(A9<=0,A9+11,IF(0<=$A$9<=12,A9,IF(13<=CZ9,CZ9-12)))

  • 文字列を数式に変換して計算する方法

    エクセルで計算を行なうときにA1のセルに計算式、B1のセルに答えの数値を表したいときにこれまではA1に例えば1+1を入力してそれをコピーしてB1に貼り付けて その前に=を入力していたのですが、計算式をA1に入力した段階でB1に答えが出る方法がありましたら教えてください。なにぶんにも初心者なのでよろしくお願いします。ソフトはofficeXPです。

  • JAVAで月数計算

    2つの日付を引き算して月数を出したいと思っています。 日付はaとbにとってこれているものとして、 long m = a.getTime() - b.getTime()/30*24*60*60*1000; と考えたのですが、ひと月は31日ある月もあれば、30日ある月もあります。 これで計算に矛盾は起きないでしょうか? 皆様はどうしていますか?

専門家に質問してみよう