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

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

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

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

Q&A

3回答

856閲覧

VBAの.Nameについて

rotai_miju

総合スコア3

VBA

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

0グッド

0クリップ

投稿2020/05/26 02:45

前提・実現したいこと

VBAで動的なシート追加を作成しております。
12か月分作成したいのでボタンを押すと12枚シートが作成されるような仕様にしています。

発生している問題・エラーメッセージ

シート名を2020年1月、2020年2月、2020年3月……
のように設定したいのですが、エラーが出てしまい出来ません。

該当のソースコード

Dim i As Long For i = 1 To 3 '新しいエクセルファイルの最後にシートをコピーする Worksheets("2020年10月お試し").Copy _ After:=Worksheets(Worksheets.Count) 'シート名は連番をセット ActiveSheet.Name = i Next

試したこと

ActiveSheet.Name = i
上記の分をActiveSheet.Name = "2020年"+i+"月"
ActiveSheet.Name = "2020年"&i&"月"
などにして試してみましたがエラーが出てしまいました。

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

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

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

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

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

meg_

2020/05/26 03:04

どんなエラーなのかを追記してください。
ttyp03

2020/05/26 04:05

こちらでは問題なく動きました。シート名1~3が作成されました。 エラーの情報を追記してください。
ttyp03

2020/05/26 04:07

ん?違うのか。 iはいいけど"2020年"&i&"月"がダメだったって話?
guest

回答3

0

&演算子の話は適切な回答があるので、別案。

ExcelVBA

1Sub test() 2 Dim i As Long 3 Dim n As Long 4 5 n = Worksheets.Count 6 7 For i = 1 To 12 8 With Worksheets 9 .Item(1).Copy After:=.Item(n + i - 1) 10 .Item(n + i).Name = Format(DateSerial(2020, i, 1), "yyyy年m月") 11 End With 12 Next 13End Sub

ExcelVBA

1Sub test2() 2 Dim i As Long 3 Dim wsh As Worksheet 4 5 Set wsh = Worksheets(Worksheets.Count) 6 wsh.Name = "2020年10月" 'お試しのシート名を仮につける 7 8 For i = 1 To 12 9 With wsh 10 .Copy after:=Worksheets(.Index) 11 .Next.Name = Format(DateAdd("m", 1, DateValue(.Name & "1日")), "yyyy年m月") 12 Set wsh = wsh.Next 13 End With 14 Next 15End Sub

日付関連の関数もいろいろあるので覚えるといいと思います。

投稿2020/05/26 05:30

mattuwan

総合スコア2136

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

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

0

Sheets("2020年10月お試し").Copy After:=Sheets(Worksheets.Count)

後は、マクロの記録を動かしてVBAを自動作成して見てください。(参考URL)
https://teratail.com/questions/264447#reply-379107
p.s.
追記:依頼者のコードでも問題無い様な感じはしますが、文字列など違っているのかも知れません。
マクロの記録文字と見比べて下さい。

投稿2020/05/26 03:48

編集2020/05/26 05:39
tosi

総合スコア553

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

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

0

>ActiveSheet.Name = "2020年"&i&"月"

文字間の空白が重要な意味を持ちます。
ActiveSheet.Name = "2020年" & i & "月"

投稿2020/05/26 03:34

iruyas

総合スコア1067

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問