• 締切済み

excelでシートの存在を確認するには...

Sheet1のB2から下のセルにaaa1,aa2,aa3...と入力されていたとします。 そのセルの文字列の名前が同じエクセルのワークシート名として、存在するかどうかをC2から下に「OK」、「NG」と記載できるようなマクロを検討しています。 わかる方いらっしゃいますか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 あまり、難しいコードにしなくても、こんな風にすればよいのではありませんか? シートがなければ、エラーが返ります。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)
回答No.3

一例です。 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)
回答No.2

>わかる方いらっしゃいますか? マクロを書いて欲しいというご依頼でしょうか? 丸投げはいかがものでしょう(^^: 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)
回答No.1

例えばこんな感じでしょうか? 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

関連するQ&A