質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1497閲覧

シート名を日付に従って変更

somechan1

総合スコア17

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/08 04:40

毎週作成しているシートをVBAで自動作成できるようにしています。
その際シート名を日付に従って変更したいです。

具体的には「予定表0913-0917」です。
※9/13(月)~9/17(金)の予定という意味

そこで下記のコードを書きました。

Sub 新規作成()

Dim M As String '月曜日
Dim F As String '金曜日

M = Format(Date, yyyymmdd)
F = DateAdd("d", 4, M)

ThisWorkbook.Worksheets(1).Copy before:=Worksheets(1)
ThisWorkbook.Worksheets(1).Cells(1, 2).Value = ThisWorkbook.Worksheets(1).Cells(1, 2).Value + 7
ActiveSheet.Name = "予定表(" & M & "~" & F & ")"

これだとエラーが出てしまいます。
※可能であれば0913-0917にしたいですが、上記で9/13に走らせると20210913になることは承知しています。
具体的にどこが悪いか教えて頂けると幸いです。
宜しくお願い致します。

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VBA

1Dim M As String '月曜日 2Dim F As String '金曜日 3Dim N As String 'シート名 4 5M = Format(Date, "mmdd") 6F = Format(DateAdd("d", 4, Date), "mmdd") 7N = "予定表(" & M & "-" & F & ")"

投稿2021/09/08 04:57

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

somechan1

2021/09/08 05:36

ご回答ありがとうございます。 上記参考に実施すると、一番最後の ActiveSheet.Name = N でエラー1004になってしまいます。 Thisworkbook.worksheet(1)などに変更してもエラーになってしまいます。 最終行の書き方で誤った箇所を御指摘頂けると幸いです。
jinoji

2021/09/08 05:45

最初に確認するとしたら、同じシート名が既にあるとかですかね。
somechan1

2021/09/08 05:54

今一度見直した結果無事動かせることが出来ました。 具体的にはF = Format(DateAdd("d", 4, Date), "mmdd")の最後の"が抜けていました。 本当にありがとうございました。
guest

0

ベストアンサー

まず、以下ですが、2番目の引数は「"yyyymmdd"」のようにダブルクォーテーションで囲む必要があります。

VBA

1M = Format(Date, yyyymmdd)

また、変数Mの日付の「4日後」を求めたいのでしょうかれど、この時点で、変数Mには「20210908」のような、日付ではなく「文字」が入っているので、DateAdd関数はエラーになります(3番目の引数には日付を指定しなくてはなりません)。

VBA

1F = DateAdd("d", 4, M)

ですので、仮にこのプログラムを月曜日に実行するとすると、上記の2行は次のようになります。

VBA

1M = Format(Date, "yyyymmdd") 2F = Format(DateAdd("d", 4, Date), "yyyymmdd")

※変数Fの方もFormat関数で書式を指定している点に注意してください。

なお、ご希望の「0913-0917」にしたいのであれば、上記の「"yyyymmdd"」を2箇所とも「"mmdd"」にしていただければ。

投稿2021/09/08 04:51

hex309

総合スコア761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

somechan1

2021/09/08 05:37

ご回答ありがとうございます。 上記参考に実施すると、一番最後の ActiveSheet.Name = N でエラー1004になってしまいます。 Thisworkbook.worksheet(1)などに変更してもエラーになってしまいます。 最終行の書き方で誤った箇所を御指摘頂けると幸いです。
hex309

2021/09/08 05:46 編集

ご提示頂いたコードは、以下ですよね。 ActiveSheet.Name = "予定表(" & M & "~" & F & ")" 「ActiveSheet.Name = N」は、私ではなく、jinojiさんのコードを参考にされたのでは? もとのコードでもエラーになりますか?
somechan1

2021/09/08 05:53

最終行はhex309さんが記載頂いたコードを使用しています。 また今一度hex309さんのアドバイスを参考にコードを記載しなおした結果 無事動かせることが出来ました。 誤りの個所はF = Format(DateAdd("d", 4, Date), "yyyymmdd") の一番最後の"が抜けていました。 今回は本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問