んと、
If flg = True Then
ここが、
あれば(True)何もしない
無ければ(False)新規シート挿入
なので、
If flg = false Then
ですかね。。。。
僕ならこう書くかな。。。
ExcelVBA
1Sub Sheet作成()
2 Dim i
3 Dim s As Worksheet
4 Dim find_name As String
5
6 For i = 1 To 10
7 find_name = Worksheets("入力").Cells(i, 1)
8 For Each s In ThisWorkbook.Worksheets
9 If s.Name <> find_name Then
10 Exit For
11 End If
12 Next
13
14 If s Is Nothing Then
15 Worksheets.Add after:=Worksheets(Worksheets.Count)
16 Worksheets(Worksheets.Count).Name = find_name
17 End If
18 Next i
19End Sub
もう少し真面目に考えたら、こうかな。
(ついでに並び順もリスト順に並べ替えしてみました^^;)
ExcelVBA
1Option Explicit
2
3Sub test()
4 Dim wsh As Worksheet
5 Dim rngList As Range
6 Dim c As Range
7 Dim sName As String
8 Dim ix As Long
9
10 Set rngList = Worksheets("入力").Range("A1:A10")
11 ix = 1
12 For Each c In rngList
13 sName = c.Value
14 If ChkName(sName) Then
15 On Error GoTo ErrHandler
16 Set wsh = Worksheets(sName)
17 On Error GoTo 0
18 If wsh.Index <> ix + 1 Then wsh.Move after:=Worksheets(ix)
19 ix = ix + 1
20 Else
21 sName = IIf(Len(sName), sName, "空白セル")
22 MsgBox c.Address(False, False) & ":" & sName & " NG! スキップします。"
23 End If
24 Next
25
26 Exit Sub
27
28ErrHandler:
29 With Worksheets
30 .Add(after:=.Item(ix)).Name = sName
31 End With
32 Resume
33End Sub
34
35Function ChkName(ByVal s As String) As Boolean
36 Dim v
37
38 Select Case Len(s)
39 Case 1 To 31
40 For Each v In Split(":,\,/,?,*,[,]", ",")
41 If InStr(s, v) Then Exit Function
42 Next
43 Case Else
44 Exit Function
45 End Select
46 ChkName = True
47End Function
参考になれば。
※バグがあるかも知れませんので自己責任で。
ちゃんとしようと思ったら何度見直してもきりがない><
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/16 00:17
2020/02/16 00:38