回答編集履歴

3

内容追記

2018/04/06 08:21

投稿

kazto
kazto

スコア7196

test CHANGED
@@ -54,4 +54,30 @@
54
54
 
55
55
 
56
56
 
57
+ > 実行時エラー'1004':
58
+
59
+ シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。
60
+
61
+
62
+
63
+ 上記のエラーは、同じシート名のシートを二枚作ろうとした場合に発生します。
64
+
65
+ つまり、このマクロを2回実行すると、`Sheets("転記用リスト").Cells(i, 1).Value`で参照する名前のシートが1回目に作成され、二回目実行時にはすでにその名前のシートがあるため、エラーとなります。
66
+
67
+
68
+
69
+ まずは、マクロで作る予定のシート名のシートが全くない状態に手動で戻してやるのが最も簡単かと思います。
70
+
71
+ つぎに、"転記用マクロ"シートのシート名が列挙しているセルに、同じ名前が2個存在していないかチェックしてください。
72
+
73
+ ある場合は一意になるよう名前を調整する。無い場合は、2回マクロを実行したことがエラーの原因となります。
74
+
75
+
76
+
77
+ マクロの方針ですが、「同じシート名が存在したら、古いシートを削除して、新たにコピーする」くらいの流れにするのが良いかと思います。
78
+
79
+ 「同じ名前のシートの有無をチェックする」方法は、[このへんのページ](http://officetanaka.net/excel/vba/tips/tips10.htm)が参考になるかと思います。
80
+
81
+
82
+
57
- 続報をお待ちください。。。
83
+ 出張行ってらっしゃい。

2

内容訂正

2018/04/06 08:21

投稿

kazto
kazto

スコア7196

test CHANGED
@@ -14,9 +14,9 @@
14
14
 
15
15
 
16
16
 
17
- 警告が出ている箇所は、上記になるかと思います。Sheetsの名前を明記せず、Sheets.Countで単に末尾に追加するだけにしていることが原因です。
17
+ ~~警告が出ている箇所は、上記になるかと思います。Sheetsの名前を明記せず、Sheets.Countで単に末尾に追加するだけにしていることが原因です。~~
18
18
 
19
- その結果、"ひな形"というシートが二つでき、Excel側が自動で"ひな形 (2)"と重複を避けるべく連番を追加しています。
19
+ ~~その結果、"ひな形"というシートが二つでき、Excel側が自動で"ひな形 (2)"と重複を避けるべく連番を追加しています。~~
20
20
 
21
21
 
22
22
 
@@ -26,4 +26,32 @@
26
26
 
27
27
  ```
28
28
 
29
- と名前を指定してあげるとエラーを回避できると思われます。
29
+ ~~と名前を指定してあげるとエラーを回避できると思われます。~~
30
+
31
+
32
+
33
+ ---
34
+
35
+ 追記かつ訂正
36
+
37
+
38
+
39
+ > Sheets("ひな形").Copy After:=Sheets(Sheets.Count)
40
+
41
+
42
+
43
+ 私も誤解しておりました!
44
+
45
+
46
+
47
+ [https://kosapi.com/post-2983/](https://kosapi.com/post-2983/) によりますと、引数Afterは、既存シートの「後ろに」シートをコピーする、という意味だそうです。
48
+
49
+ ですので、既存のシートを指定しなければいけない。よって引数に`Sheets(Sheets.Count)`を指定することは間違いではなかったです。大変失礼しました。
50
+
51
+
52
+
53
+ では、何がいけないか。
54
+
55
+
56
+
57
+ 続報をお待ちください。。。

1

名前の付け方修正

2018/04/06 07:49

投稿

kazto
kazto

スコア7196

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  ```VBA
24
24
 
25
- Sheets("ひな形").Copy After:=Sheets("任意の名前")
25
+ Sheets("ひな形").Copy After:=Sheets(Sheets("転記用リスト").Cells(i, 1).Value)
26
26
 
27
27
  ```
28
28