• ベストアンサー

Excel:文字列から年月日を表示する

例えば、B4に「7月第2土曜日」と表示されていたら、C4に翌年の年月日を表示したいのですがどうすれば年月日を表示できるでしょうか? ただし、途中経過の関数をC4以外に表示させず、C4で全て表示させたいのですが。 Excel2010です。 回答よろしくお願いします。

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

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

>表示結果は正しい年月日が表示されました。 との事ですが、1月第5月曜日~1月第5土曜日等の存在しない年月日の類は確認されたでしょうか?  その他にもB4セルが空欄の場合や、「7月第2土曜日」という形式になっていない値(単なる数値や「abc」の様な意味のない文字列)が入力された際にエラーを出さないようにする事も考えますと、次の様な関数になります。 =IF($B4="","",IF(ISNUMBER(1/(MONTH((YEAR(TODAY())+1&"年"&LEFT($B4,FIND("月",$B4)))+MOD(FIND(SUBSTITUTE(RIGHT($B4,3),"曜日",),"日月火水木金土")-WEEKDAY(YEAR(TODAY())+1&"年"&LEFT($B4,FIND("月",$B4))),7)+7*(MID(LEFT($B4,LEN($B4)-3),FIND("第",$B4)+1,LEN($B4))-1))-LEFT($B4,FIND("月",$B4)-1)=0)/(RIGHT($B4,2)="曜日")),(YEAR(TODAY())+1&"年"&LEFT($B4,FIND("月",$B4)))+MOD(FIND(MID($B4,LEN($B4)-2,1),"日月火水木金土")-WEEKDAY(YEAR(TODAY())+1&"年"&LEFT($B4,FIND("月",$B4))),7)+7*(MID(LEFT($B4,LEN($B4)-3),FIND("第",$B4)+1,1)-1)+0,"該当日無し"))

miya_HN
質問者

お礼

回答ありがとうございます。 >との事ですが、1月第5月曜日~1月第5土曜日等の存在しない年月日の類は確認されたでしょうか? そういえばそうでしたね。 そこまで確認していませんでした。 一つのセルに入力するとなるとこんなに長くなってしまうんですね。 ここまで長くなるとは思いませんでした。 正しい表示結果が出ました。 大変感謝しております。 ありがとうございました。

その他の回答 (2)

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.3

まじめに考えるのも面倒くさいのでエラー対策は質問者に任せます。 =LEFT(SUBSTITUTE(A1,"第","01日 "),6)-1-WEEKDAY(LEFT(SUBSTITUTE(A1,"第","01日 "),6)-1-FIND(LEFT(RIGHT(A1,3)),"火水木金土日月"),3) +LEFT(RIGHT(A1,4))*7 > 途中経過の関数をC4以外に表示させず 数式を理解できるなら好きにすればいいと思いますが 何の意味があるんでしょうね。 私なら B4の入力自体を分けます。入力で楽して計算で困るなんてナンセンスです。

miya_HN
質問者

お礼

回答ありがとうございます。 >私なら B4の入力自体を分けます。入力で楽して計算で困るなんてナンセンスです。 なるほど。 確かに言われてみればそうですが。 ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

もっとスマートな方法があると思うけど。。。 =DATE(YEAR(TODAY())+1,LEFT(B4,FIND("月",B4)-1),MID(B4,LEN(B4)-3,1)*7+FIND(MID(B4,LEN(B4)-2,1),"日月火水木金土")-MOD(DATE(YEAR(TODAY())+1,LEFT(B4,FIND("月",B4)-1),0),7)-(MOD(DATE(YEAR(TODAY())+1,LEFT(B4,FIND("月",B4)-1),0),7)<FIND(MID(B4,LEN(B4)-2,1),"日月火水木金土"))*7)

miya_HN
質問者

お礼

回答ありがとうございます。 申し訳ありません。 結構長い関数になるんですね。 表示結果は正しい年月日が表示されました。 大変感謝しております。 ありがとうございました。

miya_HN
質問者

補足

最初に回答してくださり、表示結果も正しく表示され、ベストアンサーにしようと思ったのですが、回答No.2の方の回答がより正確な表示結果が出るようなので申し訳ありませんが回答No.2の方の回答をベストアンサーにしようと思います。 ですが、貴重な時間を私の質問のために割いてくれたこと、回答No.2の方の「1月第5月曜日~1月第5土曜日等の存在しない年月日の類の確認」については確認しませんでしたが、回答No.1の方の関数をそのままExcelに入力すると表示結果は正しかったため、回答に対しては非常に感謝しております。 また、面倒な質問をするかもしれませんが気が向いたらでよいのでそのときはよろしくお願いします。 ありがとうございました。

関連するQ&A

専門家に質問してみよう