- 締切済み
excelでシートの存在を確認するには...
Sheet1のB2から下のセルにaaa1,aa2,aa3...と入力されていたとします。 そのセルの文字列の名前が同じエクセルのワークシート名として、存在するかどうかをC2から下に「OK」、「NG」と記載できるようなマクロを検討しています。 わかる方いらっしゃいますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 あまり、難しいコードにしなくても、こんな風にすればよいのではありませんか? シートがなければ、エラーが返ります。On Error という方法もありますが、その場合は、戻り値をクリアしないといけない分だけ、コードが増えます。 Sub FindSheet() Dim c As Variant With Worksheets("Sheet1") For Each c In .Range("B2", .Range("B65536").End(xlUp)) If IsError(Evaluate(c.Value & "!A1")) Then c.Offset(, 1).Value = "NG" Else c.Offset(, 1).Value = "OK" End If Next c End With End Sub
- ka_na_de
- ベストアンサー率56% (162/286)
一例です。 Sub test() Dim myWS As Worksheet Dim StartCell As Range, myCell As Range Dim Flag1 As Boolean Set StartCell = Range("B2") For Each myCell In Range(StartCell, Cells(Rows.Count, StartCell.Column).End(xlUp)) Flag1 = False For Each myWS In Worksheets If myWS.Name = myCell.Value Then Flag1 = True Exit For End If Next If Flag1 = True Then myCell.Offset(, 1).Value = "OK" Else myCell.Offset(, 1).Value = "NG" End If Next Set StartCell = Nothing End Sub
- zap35
- ベストアンサー率44% (1383/3079)
>わかる方いらっしゃいますか? マクロを書いて欲しいというご依頼でしょうか? 丸投げはいかがものでしょう(^^: Sub Macro1() Dim idx As Integer Dim ws As Worksheet Dim psw As Boolean For idx = 2 To Sheets("Sheet1").Range("B65536").End(xlUp).Row For Each ws In Worksheets If ws.Name = Cells(idx, "B").Value Then psw = True Exit For End If Next ws If psw Then Cells(idx, "C") = "OK" Else Cells(idx, "C") = "NG" End If psw = False Next idx End Sub
- n-jun
- ベストアンサー率33% (959/2873)
例えばこんな感じでしょうか? Sub test() Dim sh As Worksheet Dim r As Range For Each r In Range([B2], Cells(Rows.Count, "B").End(xlUp)) On Error Resume Next Set sh = Worksheets(r.Value) On Error GoTo 0 If sh Is Nothing Then r.Offset(, 1).Value = "NG" Else r.Offset(, 1).Value = "OK" End If Next End Sub