• ベストアンサー

エクセルで日付を自動入力したい…

エクセル2003にて自動で日付、曜日が入力できる方法を教えください。 現在、日曜、祭日除く27(←MAX営業日数分)の日報の台紙シートを、12ファイル(12ヶ月分)作っています。 (1)A1のセルに日付   例;平成19年9月10日 (2)A2のセルに曜日   例;(月) (3)シート名に     例;10月 ←日付+曜日をこの形式。次は11火        という形式で日々入力しています。 シート一枚ずつに上記の作業をしています。         マクロや数式の設定等で手順を簡略化できませんでしょうか??? 毎日の作業なので効率化したく色々勉強したつもりですが改善できずに困っています。 わかる方教えて下さい。よろしくお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

マクロを実行した翌月から6ヶ月間のブックを作成する。 ブックは原本のファイルのある同じフォルダに作成される。 ファイル名は”平成19年10月分”~とする。 シート名には日曜日も含まれる。 Sub test2() Dim WB As Workbook Dim ws1 As Worksheet, ws As Worksheet Dim i As Integer Dim j As Date, jj As Date, k As Date Dim hiduke As String, tuki As String Dim WBpath As String Dim ddate As Date Application.ScreenUpdating = False Set ws1 = ThisWorkbook.Worksheets("Sheet1") WBpath = ThisWorkbook.Path j = DateSerial(Year(Date), Month(Date) + 1, 1) '翌月 jj = DateSerial(Year(j), Month(j) + 6, 1) '6ヶ月 k = j Do Workbooks.Add Set WB = ActiveWorkbook For i = 1 To Day(DateSerial(Year(k), Month(k) + 1, 0)) ddate = DateSerial(Year(k), Month(k), i) hiduke = Format(ddate, "daaa") 'If InStr(hiduke, "日") = 0 Then ws1.Copy after:=WB.Worksheets(Worksheets.Count) With ActiveSheet .Name = hiduke .Range("A1").Value = Format(ddate, "[$-411]ggge""年""m""月""d""日""") .Range("A2").Value = Format(ddate, "(aaa)") End With 'End If Application.CutCopyMode = False Next For Each ws In Worksheets If InStr(ws.Name, "Sheet") Then Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True End If Next WB.Worksheets(1).Activate WB.SaveAs WBpath & "\" & Format(k, "[$-411]ggge""年""m""月") & "分.xls" WB.Close Application.CutCopyMode = False k = DateSerial(Year(k), Month(k) + 1, 1) Loop Until k >= jj Application.ScreenUpdating = True End Sub ご参考になれば。

その他の回答 (5)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

ANo.5です。 念のため >For Each ws In Worksheets を For Each ws In WB.Worksheets にして下さい。

prtcw794
質問者

お礼

ありがとうございました。 おかげさまで完璧です!!! 何度も返事いただきまして大変お手数かけました。 本当にありがとうございます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

(1)原本Sheet1のタブを右クリックでコードの表示を開き貼り付け VBEの画面で「挿入」-「標準モジュール」を選択して出てきた画面に 貼り付け。 エクセルの画面で、「ツール」-「マクロ」-「マクロ」-Test選択-実行です。 (2)翌月分以降も作成できませんでしょうか??? 日付は、”当月の1日~月末日(日曜除く)”となってます。 10月になって新しいブックにシート1をコピーして、マクロをコピペし 実行すれば10月のシートができます。 ブックを作成するには、もう一段ループ処理が必要でしょう。 (3)日曜日も含む場合のシート作成方法はどの一文を抜けば作成可能でしょうか??? If InStr(hiduke, "日") = 0 Then End If この2文を消せばOKです。

prtcw794
質問者

補足

どうもありがとうございます。 毎回素早い返答本当に助かります。 おかげさまで(1)、(3)は理解しました。 (2)なんですが… >ブックを作成するには、もう一段ループ処理が必要でしょう。 というのはどういう意味なのでしょう??? 今回作成の日報というのはお客様のオーダーが1週間くらい前からなので、毎月20日頃には翌月のシートが作成必須なのです。 いろいろと調べて、勉強もしてみたんですがどうもできません。 loopの構文をというものが挿入できれば、今日から10月分や11月分のシートも作成できるのでしょうか???

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

Sheet1に原本がある状態で実行すると、 ・Sheet1をその月の日付分コピーする。(1日~月末日) ・シート名は、例10月とするが、日曜は含まない。 ・各シートのA1に日付、A2に曜日を   平成19年9月10日 (月) と、値として代入する。 Sub test() Dim ws1 As Worksheet Dim i As Integer Dim hiduke As String Dim ddate As Date Application.ScreenUpdating = False Set ws1 = Worksheets("Sheet1") For i = 1 To Day(DateSerial(Year(Date), Month(Date) + 1, 0)) ddate = DateSerial(Year(Date), Month(Date), i) hiduke = Format(ddate, "daaa") If InStr(hiduke, "日") = 0 Then ws1.Copy after:=Worksheets(Worksheets.Count) With ActiveSheet .Name = hiduke .Range("A1").Value = Format(ddate, "[$-411]ggge""年""m""月""d""日""") .Range("A2").Value = Format(ddate, "(aaa)") End With End If Next Application.ScreenUpdating = True End Sub ご参考になれば。

prtcw794
質問者

補足

ありがとうございます!!! 表示方法として希望にかなった物ができました。最高です。 さっそく明日から仕事で使わして頂きます。 ところで、無理お願いするのですが、最後に質問よろしいでしょうか??? (1)>Sheet1に原本がある状態で実行すると、  >・Sheet1をその月の日付分コピーする。(1日~月末日)  と教えていただきましたが、マクロを実行すると原本を無視してプラスで1日から29日までのシートが作成されます。 原本を削除すれば問題はないのですがマクロ実行手順が間違っているのか心配です。 実行手順は、教えていただいた式をコピーし、原本Sheet1のタブを右クリックでコードの表示を開き貼り付け。→(マクロの実行)でSheet1.testを実行。の手順でよろしいのでしょうか??? (2)上記手順ですと9月分は作成可能ですが10月以降の分が作成できません。翌月分以降も作成できませんでしょうか??? (3)日曜日も含む場合のシート作成方法はどの一文を抜けば作成可能でしょうか??? わがままばかり言って非常に申し訳ないのですが、よろしくお願いします。

noname#42041
noname#42041
回答No.2

参考意見ですが、今の形式にこだわらないのであれば(1ファイル1か月分という使い方ではなく、1年1ファイル(月ごとの12シート)とし、1年分のフォーマットを作ってしまう)、日付関係の関数だけで1月1日のみ入力すれば後の日付表示は自動ということも可能です。 ただ、目的の日付を呼び出すのが少し手間になりますし、日報が1日1枚でない場合は少し使いにくいですけど。

prtcw794
質問者

補足

回答ありがとうございます。 すみませんが会社規定の様式なので変更ができません。 また、今回の質問の一番の目的は見出しのタブにも自動入力が可能か?という点です。 私用のものでしたらそれでOKなのですが

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

例えば、今日(9/10 月曜日)Bookを開いたら、 ・10月と言うシートがあればなにもしない。  なければ、新規作成(前のシートのコピー?)し以下の処理をする。 ・A1に日付 ・A2に曜日 ・その他の書式??? と言ったものでしょうか?

prtcw794
質問者

補足

回答ありがとうございます。 希望は、あれば、なければでなくこれから先のシートを一年分くらいまとめて作りたいのです…。 用語がよくわからくて申し訳ないのですが… デスクトップ>日報フォルダ>1月~12月までの日報ファイル12個(エクセル)>1日~31日までのシート という形です。 その1日~31日までのシートの一番下のタブ(見出し?)に10月と入力したいのです。 今考えている方法は (1)台紙を作成 (2)31シートコピーで新規作成 (3)A1とA2は関数を入れておく(この関数も教えてほしいです) (4)これを12個コピーしファイル名に9月日報などと付ける (5)A1に9/1日と入力すると自動的にその月の日付と曜日が全て入力される (6)営業ではない日のシートを削除 (7)タブは手入力 (7)の入力に時間がかかりますので上記以上に、簡単に作成できる方法を教えてください。 また、現在は関数もわからないので全て手入力です。

関連するQ&A