• ベストアンサー

エクセルのテンプレートのカレンダーで

エクセル2010のテンプレートのカレンダーで日にちが#VALUE!になります。 ダウンロードした物はMicrosoft office公式のカレンダーの構成 (任意の年)です。 http://office.microsoft.com/ja-jp/templates/TC010274124.aspx 数式を治さないといけないのかエクセルの設定なのか使い方をご教示お願いします。 私の環境はWindows7 Office Personal2010です。 よろしくお願いします。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

>どのように修正すれば良いのかご教授していただけると幸いです。 C4セルの数式が次のようになっています。 =IF(AND(YEAR(JanSun1)=$A$1,MONTH(JanSun1)=1),JanSun1, "") この中でJanSun1と言う名前で値を代替していることが分かります。 「数式」タブに有る「名前の管理」を開くと幾つもの名前が定義されています。 JanSun1を選択して定義されている数式を確認すると次のようになっています。 =DATEVALUE("1/1/"&年カレンダー!$A$1)-WEEKDAY(DATEVALUE("1/1/"&年カレンダー!$A$1))+1 この数式のDATEVALUE関数の引数が問題の部分です。 シートが複数のとき各シートのA1セルにカレンダーの西暦年数が入力されていれば"年カレンダー!"は不要です。 日付を示す文字列を日数の計算可能なシリアル値に変換するのがDATEVALUE関数です。 2008年を例にすれば次のような計算がJanSun1で行われています。 =DATEVALUE("1/1/"&$A$1)-WEEKDAY(DATEVALUE("1/1/"&$A$1))+1      ↓ =DATEVALUE("1/1/2008")-WEEKDAY(DATEVALUE("1/1/2008"))+1      ↓ #VALUE!エラーとなる。"1/1/2008"は米国の日付表示のため"2008/1/1"に直す必要があります。      ↓ =DATEVALUE("2008/1/1")-WEEKDAY(DATEVALUE("2008/1/1"))+1      ↓ =39448-3+1 → 39446 → 2007/12/30 以上の動作状況を考慮してJanSun1の定義を次のように変更すれば1月のカレンダーが正常になります。 =DATEVALUE(年カレンダー!$A$1&"/1/1")-WEEKDAY(DATEVALUE(年カレンダー!$A$1&"/1/1"))+1 此処でシート名(年カレンダー!)は不要ですが定義範囲をブック全体にすると自動的にシート名が付加されます。 他の名前(2月~12月用)も同様に変更すればすべての月が正しく表示されます。

coogy
質問者

お礼

ありがとうございます。 出来ました。 その月の前後に前の月の日にちと次の月の日にちが 入ってしまいます。 表示しない方法は、ありますでしょうか?

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.6

>その月の前後に前の月の日にちと次の月の日にちが入ってしまいます。 何処を直したの? 私は名前の定義で使っている数式だけ直すように提言しました。 日付を表示するセルの数式を元のままにすれば当月のみ日付が表示されるはずです。 次の数式は1月のカレンダーの左上の数式です。 C4=IF(AND(YEAR(JanSun1)=$A$1,MONTH(JanSun1)=1),JanSun1, "") 右隣のセルは次の数式になっていますので順次1日加算して当月の日付であるか否かをIF関数で条件分岐しています。 1ヶ月分のマス目(セル)に順次1日加算した結果をチェックして当月に含まれない日付は空欄("")となるような数式であることが分かるでしょう。 D4=IF(AND(YEAR(JanSun1+1)=$A$1,MONTH(JanSun1+1)=1),JanSun1+1, "") 2月分については定義された名前をFebSun1に書き換えています。 3月分は定義された名前をMarSun1となっています。 このように順次定義された名前を替えることで各月のカレンダーを表示できるようにしてあるようです。 出来栄えとしては好ましいものではありません。

coogy
質問者

お礼

ありがとうございます。 理論は難しくてよくわからないのですが 入力の仕方は理解できました。 置き換えを使えばそんなに面倒でもないですね。

回答No.4

こんにちは。 #3さんの仰る通りですが、作者の基本的な考え方のミスだと思います。 コンパネをいじるのも嫌ですから、 一応、[数式]-[名前の管理]で、こちらは、 AprSun1: =DATE(年カレンダー!$A$1,4,1)-WEEKDAY(DATE(年カレンダー!$A$1,4,1))+1 から、 SepSun1: =DATE(年カレンダー!$A$1,9,1)-WEEKDAY(DATE(年カレンダー!$A$1,9,1))+1 まで、このように、DATEVALUE関数ではなく、DATE関数で全て直してみました。 こうすれば、日付設定に関係なく表示されるはずです。 ちょっと面倒ですが、根気よくやれば全部が直ります。

coogy
質問者

お礼

ありがとうございます。 申し訳ありません。 私の技量では、説明がよくわかりませんでした。 私のやり方が悪いのかもしれませんね。

coogy
質問者

補足

その月の最初には先月の日にちが入り最後には来月の日にちが 入ってしまうのは表示させない方法はあるのでしょうか?

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>エクセル2010のテンプレートのカレンダーで日にちが#VALUE!になります。 確かに#VALUE!エラーになります。 数式内の名前の定義が拙いのではないかと思われます。 英語(米国)版の日付フォーマットを元に名前の定義をしているようですから修正すれば使えるようになるでしょう。 貼付画像は1月分のみ名前の定義を修正した結果です。

coogy
質問者

お礼

ありがとうございます。 しかし、私の技量では、英語(米国)版の日付フォーマットを 修正する方法も解りません。 どのように修正すれば良いのかご教授していただけると幸いです。

関連するQ&A