回答編集履歴

2

コード修正

2020/02/15 23:56

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -102,11 +102,7 @@
102
102
 
103
103
  If Not SheetExists(r.Text) Then
104
104
 
105
- With Worksheets.Add(after:=Worksheets(Worksheets.Count))
105
+ Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = r.Text
106
-
107
- .Name = r.Text
108
-
109
- End With
110
106
 
111
107
  End If
112
108
 

1

コード追加

2020/02/15 23:55

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -79,3 +79,59 @@
79
79
  End Sub
80
80
 
81
81
  ```
82
+
83
+
84
+
85
+ 別案
86
+
87
+ ---
88
+
89
+ シートの存在チェックは他でも使えそうなので関数にします。
90
+
91
+ ループですべてのシート名をチェックしてもいいのですがシート数が多いと重くなりますので、例外処理で存在チェックします。(シートにアクセスしてエラーがでたら存在しない)
92
+
93
+
94
+
95
+ ```VBA
96
+
97
+ Sub Sheet作成2()
98
+
99
+ Dim r As Range
100
+
101
+ For Each r In Worksheets("入力").Range("A1:A10")
102
+
103
+ If Not SheetExists(r.Text) Then
104
+
105
+ With Worksheets.Add(after:=Worksheets(Worksheets.Count))
106
+
107
+ .Name = r.Text
108
+
109
+ End With
110
+
111
+ End If
112
+
113
+ Next
114
+
115
+ End Sub
116
+
117
+
118
+
119
+ 'シートの存在チェック関数
120
+
121
+ '指定した名前のシートが存在したらTrue、しなかったらFalseを返す
122
+
123
+ Function SheetExists(SheetName As String) As Boolean
124
+
125
+ Dim ws As Worksheet
126
+
127
+ On Error Resume Next
128
+
129
+ Set ws = ThisWorkbook.Worksheets(SheetName)
130
+
131
+ On Error GoTo 0
132
+
133
+ SheetExists = Not (ws Is Nothing)
134
+
135
+ End Function
136
+
137
+ ```