こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2007VBA 日付の加算について

●質問の主旨
コピー元のシートの特定セル(A3セル)に入力されている日付に対して
加算を行い、その加算した日付をシート名とコピー先の
シートの特定セルに入力するためにはどうすればよいでしょうか?

具体的には下記のコードをどのように書き換えればよいでしょうか?
「Worksheets(i + 1).Name = mydate」のところでエラーが出てしまいます。
ご存知の方、ご教示願います。

●コード
Sub 一週更新()

Application.ScreenUpdating = False

Dim i As Integer
Dim mydate As Date

'既存のシート数を取得
i = ThisWorkbook.Worksheets.Count
'最終シートをコピーして後ろに挿入
Worksheets(i).Copy after:=Worksheets(i)
'mydateは最終シートのA3セルに入力されている日付の1週間後の日付とする
mydate = DateAdd("ww", 1, Worksheets(i).Range("A3"))
'追加したシートのシート名はmydate2の日付とする
Worksheets(i + 1).Name = mydate

'新しく作成したワークシートについて以下の処理を行う
With ActiveSheet

Range("A3") = mydate
Range("A12").ClearContents
Range("A19").ClearContents
Range("A26").ClearContents
Range("A32").ClearContents

End With

Application.ScreenUpdating = True

End Sub


●補足
上記コードは週単位の報告書を作成するためのコードです。
コピー元のA3セルは表示上は9/16となっており、
「セルの書式設定上」は「日付」→「3/14」,
ロケールは日本語です。
私はVBA初心者です。

投稿日時 - 2011-09-19 11:43:35

QNo.7020753

困ってます

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

シートタブにスラッシュ(/)は許容されませんので、別に文字列に変更して下さい。
例えば、m月d日とすると、Worksheets(i + 1).Name = Format(mydate, "m月d日")で変更できますが如何でしょうか。

投稿日時 - 2011-09-19 12:08:53

お礼

mu2011様

先日に引き続きご回答ありがとうございます。

Worksheets(i + 1).Name = mydateを
Worksheets(i + 1).Name = Format(mydate, "m月d日")に

換えたらシート名、コピー先のセルの日付が加算できました。
ありがとうございます。

投稿日時 - 2011-09-19 13:10:49

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

何処の行でエラーになったかぐらい質問に書くこと。
そうすればおおよそのエラーの事態はわかるはず。
シートの名前付けでエラーが出ているのでは。
また標題の「日付の加算について」でエラーではなかろう。標題がおかしい。
Sub test02()
mydate = DateAdd("ww", 1, Worksheets(1).Range("A1"))
MsgBox mydate
End Sub
などでどういう結果になるか分かるだろう。
Sub test02()
mydate = DateAdd("ww", 1, Worksheets(1).Range("A1"))
MsgBox mydate
Sheets(4).Name = mydate
End Sub
をやると相応食え悪しくエラーメッセージが出る。だから判ると思うが、判らなければそういう主旨の質問をすること。
ーー
名前の受け方が禁止事項のようで
Sub test03()
i = 4
mydate = DateAdd("ww", 1, Worksheets(1).Range("A1"))
mydates = Replace(mydate, "/", "")
MsgBox mydates
Sheets(4).Name = mydates
End Sub
で旨くいくだろう。
ーー
(余談)日付数字だけでも文字列となり、OKのようだが、普通はシート名の前部分に報告20110919のように内容暗示文句を入れるのでは。
ーー
直ぐ自分の作ったコードを貼り付けて他人に頼むのではなく、自分で色々変えたりしてやってみて、焦点を絞ること。
それが勉強になる。

投稿日時 - 2011-09-19 12:41:27

お礼

imogasi様

いつもご回答ありがとうございます。
コードの記述及びプログラム作成時のコツについても
教えていただきありがとうございます。

今後のVBA学習の参考とさせていただきます。

投稿日時 - 2011-09-19 13:15:26

ANo.1

変数iってそのブックが持つワークシートの数を一番最初に入れてますよね。
それに1をたしたらブックが持っているワークシートの数以上になってしまってエラーになってるんじゃないんですか?
ワークシートを追加するコードをその前に入れておけば良いのでは?

投稿日時 - 2011-09-19 11:54:36

お礼

suzukikun様
ご回答ありがとうございます。
suzukikun様のアドバイスは、
今後VBAの学習の参考とさせていただきます。

投稿日時 - 2011-09-19 13:13:13

あなたにオススメの質問