『シート1枚で一ヶ月分の勤務表を印刷する方法』(オデッセイ) エクセル2010を使用しています。 セルE1に年(2013)セルG1に月(5)と入力してセルC5に平成25年5月1日(水)から一ヶ月分 が印刷できるようにマクロを組んだのですがセルC5が明治33年1月31日(水)となってしまいます。 何がいけないのでしょうか? Sub AutoPrint() Dim i As Byte For i = 1 To Day(DateSerial(Range("E1"), Range("G1") + 1, 1) - 1) Range("C5") = i ActiveSheet.PrintOut 宜しくお願い致します。 ---- Range("C5") = i を Range("C5") = DateSerial(Range("E1"), Range("G1"), i) にするとうまくいくと思います。 (se_9) ---- >何がいけないのでしょうか? の回答として、シリアル値というものをまず理解する必要があります。 エクセルシートで日付は1900年(明治33年)1月1日を1として 1日経過するごとに1を加算していく日付連番(シリアル値)で 日付を表現します。   しかるに、ご提示のコードでは「1から月末までの日付値」がC5に 入力されます。「1から31」がC5にループで入力されますよね? シリアル値の考え方では1900/1/1〜1900/1/31のシリアル値を入力して いることになります。    セルに「2013/5/31」と入力し、表示形式を数値に変更した時に表示される 数値が「2013/5/31のシリアル値」です。 全然違うのが分かると思います。   そのセルに「日付」を表示したいだけなら、表示形式を標準や数値に。 平成25年5月31日のような表示にしたいのであれば、 日付に見合ったシリアル値を入力する必要があるので、 Range("C5") = i   ↓ Range("C5") = Format(DateSerial(Range("E1"), Range("G1"), i), "ggge年m月d日")   (みやほりん) ---- 衝突。かつ、同じようなことだけど、メモしたので。 >何がいけないのでしょうか? まず、本題としては、たとえば i は、最初 1 だよね。 で、日付というのは1900/1/1 を 1 としたシリアル値。 だから、セルに 1 をいれると 1900/1/1 のことで、和暦表示すると、【正しく】明治33年1月31日 になる。 本題とは離れるけど、 As Byte 。 う〜ん、あまり賛成できないなぁ。 今回扱う数値はいくつまで、だから As Byte 。 今回は、いくつまで、だから As Integer。 今回は、ちょっと大きめなので As Long。 こんなことに気を配っても、このご時世、【ご利益は全くない】 逆にデメリットがあるかもね。 整数は Long。小数ならDouble。もう、決め打ちして記述して、本来のコードロジック作成に注力したほうがいいね。 (ぶらっと) ---- >Dim i As Byte ぶらっとさんの回答見るまで気付かなかった… (se_9) ---- 皆様ありがとうございました。 初心者なので、これから勉強したいと思います。 (オデッセイ)