teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

内容追記

2018/04/06 08:21

投稿

kazto
kazto

スコア7196

answer CHANGED
@@ -26,4 +26,17 @@
26
26
 
27
27
  では、何がいけないか。
28
28
 
29
+ > 実行時エラー'1004':
30
+ シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。
31
+
32
+ 上記のエラーは、同じシート名のシートを二枚作ろうとした場合に発生します。
33
+ つまり、このマクロを2回実行すると、`Sheets("転記用リスト").Cells(i, 1).Value`で参照する名前のシートが1回目に作成され、二回目実行時にはすでにその名前のシートがあるため、エラーとなります。
34
+
35
+ まずは、マクロで作る予定のシート名のシートが全くない状態に手動で戻してやるのが最も簡単かと思います。
36
+ つぎに、"転記用マクロ"シートのシート名が列挙しているセルに、同じ名前が2個存在していないかチェックしてください。
37
+ ある場合は一意になるよう名前を調整する。無い場合は、2回マクロを実行したことがエラーの原因となります。
38
+
39
+ マクロの方針ですが、「同じシート名が存在したら、古いシートを削除して、新たにコピーする」くらいの流れにするのが良いかと思います。
40
+ 「同じ名前のシートの有無をチェックする」方法は、[このへんのページ](http://officetanaka.net/excel/vba/tips/tips10.htm)が参考になるかと思います。
41
+
29
- 続報をお待ちください。。。
42
+ 出張行ってらっしゃい。

2

内容訂正

2018/04/06 08:21

投稿

kazto
kazto

スコア7196

answer CHANGED
@@ -6,10 +6,24 @@
6
6
 
7
7
  > Sheets("ひな形").Copy After:=Sheets(Sheets.Count)
8
8
 
9
- 警告が出ている箇所は、上記になるかと思います。Sheetsの名前を明記せず、Sheets.Countで単に末尾に追加するだけにしていることが原因です。
9
+ ~~警告が出ている箇所は、上記になるかと思います。Sheetsの名前を明記せず、Sheets.Countで単に末尾に追加するだけにしていることが原因です。~~
10
- その結果、"ひな形"というシートが二つでき、Excel側が自動で"ひな形 (2)"と重複を避けるべく連番を追加しています。
10
+ ~~その結果、"ひな形"というシートが二つでき、Excel側が自動で"ひな形 (2)"と重複を避けるべく連番を追加しています。~~
11
11
 
12
12
  ```VBA
13
13
  Sheets("ひな形").Copy After:=Sheets(Sheets("転記用リスト").Cells(i, 1).Value)
14
14
  ```
15
- と名前を指定してあげるとエラーを回避できると思われます。
15
+ ~~と名前を指定してあげるとエラーを回避できると思われます。~~
16
+
17
+ ---
18
+ 追記かつ訂正
19
+
20
+ > Sheets("ひな形").Copy After:=Sheets(Sheets.Count)
21
+
22
+ 私も誤解しておりました!
23
+
24
+ [https://kosapi.com/post-2983/](https://kosapi.com/post-2983/) によりますと、引数Afterは、既存シートの「後ろに」シートをコピーする、という意味だそうです。
25
+ ですので、既存のシートを指定しなければいけない。よって引数に`Sheets(Sheets.Count)`を指定することは間違いではなかったです。大変失礼しました。
26
+
27
+ では、何がいけないか。
28
+
29
+ 続報をお待ちください。。。

1

名前の付け方修正

2018/04/06 07:49

投稿

kazto
kazto

スコア7196

answer CHANGED
@@ -10,6 +10,6 @@
10
10
  その結果、"ひな形"というシートが二つでき、Excel側が自動で"ひな形 (2)"と重複を避けるべく連番を追加しています。
11
11
 
12
12
  ```VBA
13
- Sheets("ひな形").Copy After:=Sheets("任意の名前")
13
+ Sheets("ひな形").Copy After:=Sheets(Sheets("転記用リスト").Cells(i, 1).Value)
14
14
  ```
15
15
  と名前を指定してあげるとエラーを回避できると思われます。