- 締切済み
エクセル マクロでシート自動作成と日付入力
マクロでシートの自動作成するのに悩んでいます。 下記の二つを条件を入れるにはどうしたらいいですか? 1、コピーしたシートの日付を明日の設定する。 2、過去のシートを開いても日付を変えたくない。 コピー元のシートを"原本"という名前にしてます。 アドバイスよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- zap35
- ベストアンサー率44% (1383/3079)
#02です VBAは久方ぶりだったのでミスしました。4行目は nmSheet = Format(Date + 1, "YYYY-MM-DD") が正しいです。 すみません
- imogasi
- ベストアンサー率27% (4737/17069)
>コピーしたシートの日付を明日の設定する。 どういう意味? シート名に日付文字列を入れたいのか? ブックには作成日付などあるが、シートには無い。セルの値を日付を入れたいのか。 しっかり質問内容を表現してください・ シートの名前のことなら下記のコードを実行すればわかるだろう。 Sub test01() MsgBox Date MsgBox Date + 1 MsgBox Format(Date + 1, "yymmdd") a = #12/31/2009# MsgBox a MsgBox a + 1 MsgBox Format(a + 1, "yymmdd") End Sub わざと年末の例も挙げておいた。 シートの何処かのセルの値のことなら、やはり上記で判るだろう。 >過去のシートを開いても日付を変えたくない これも可笑しな表現。 将来そのシートを見てもその日に変わらない、というべき。 マクロでセルの値を設定すれば(関数と違って)セルの値は変わらないよ。 ただしイベントプロシージャ(自動実行)の中でDateを使うと、将来その日に変わる。 >コピー元のシートを"原本"という名前にしてます 何の関係があるのかな。 コピー元のシート名と、コピー先のシート名は関係ないはず。 関係持たせたいなら、質問に層初めから書くこと。 ーーー 明日の名前のシートを自分が指定するVBAの中で作るなら Sub test02() Worksheets.Add.Name = Format(Date + 1, "yymmdd") End Sub これで良いのか。 ーーー しかし挿入の操作の都度ということになると難しい。 シートを挿入するとき ThisWorkookのイベントの Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "AAA" End Sub は反応するが、シートの移動またはコピーのコピーでは反応しないようだ。 だから別途コピー以下をボタンのクリックイベントなどで、自分のコードで面倒を見ないと(記述し実行しないと)ダメかもしれない。操作者がシートをコピーしたとき、というイベントがエクセルに無い。
- zap35
- ベストアンサー率44% (1383/3079)
とりあえず新しいブックに「原本」という名前のシートを作成して、以下のマクロを実行してみてください。 「原本」シートを複写して、シート名が「実行した日+1」のシートを作成しますが、既に同名のシートがある場合は何もしません。 もし解釈が違っていたらごめんなさい。 Sub Macro1() Dim nmSheet As String Dim idx As Integer nmSheet = Format(today + 1, "YYYY-MM-DD") For idx = 1 To ThisWorkbook.Worksheets.Count If Worksheets(idx).Name = nmSheet Then Exit Sub Next idx Worksheets("原本").Copy after:=Worksheets("原本") ActiveSheet.Name = nmSheet End Sub ただしシート数が多くなったときなどのエラー処理は組み込んでいませんから、ずっと使っているとエラーになる可能性はあります。 エラー処理は必要に応じて適宜組み込んでください。
- MackyNo1
- ベストアンサー率53% (1521/2850)
質問内容がよくわかりません。 >1、コピーしたシートの日付を明日の設定する。 シートの日付というのはシート名ということでしょうか? 単純にDate+1にすれば明日の日付が取得できると思うのですが・・・ >2、過去のシートを開いても日付を変えたくない。 どうしてシートを開くと日付が変わってしまうのでしょうか? 現在どのようなマクロが設定されていて、どの部分が問題になっているのか、ポイントを絞って、シート構成やセル位置などを含め、できる限り具体的に質問するようにして下さい。