• ベストアンサー

エクセルVBAでシート名検索

エクセル2000です。 あるブックにAAAという名前のワークシートが存在するかどうかの判定方法の質問です。 現在はそのブックを開き、 Sub test() For Each sh In ActiveWorkbook.Worksheets If sh.Name = "AAA" Then flag = "ありまする。" Else flag = "ないでござる。" End If Next MsgBox flag End Sub のように判定しています。 質問は、 1.開かずに判定することは可能かどうか?可能ならその方法 2.上記コードのように各シート総当り以外にシート名を検索する方法があるか?あるならその方法 です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

それ以前に、このコードでは、 「ブックにAAAという名前のワークシートが存在するかどうかの判定」するのではなくて 一番右のシートが、"AAA" かどうかの判定です。  あっても、"ないでござる。" になるのでござる・・・ 何かが抜けているような・・・  

merlionXX
質問者

お礼

あははは!ほんとですねえ、何やってんだろ馬鹿だなあ。 テストしてるブックがみんな最後のシートだったので気付きませんでした。 Sub test() For Each sh In ActiveWorkbook.Worksheets If sh.Name = "AAA" Then flag = True Next MsgBox IIf(flag, "ありまする", "ないでござる。") End Sub ならいいですね。

その他の回答 (3)

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

こんにちは。 Wendy02です。 >> Excel VBAでは、IIf は、普通は使わないことになっていますが。 Access の一般関数にはありますが、ExcelのVBAでは、反応が遅いということでしょうね。

merlionXX
質問者

お礼

> Access の一般関数にはありますが、ExcelのVBAでは、反応が遅いということでしょうね。 わかりました。以後、注意します。 ありがとうございます。

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

こんにちは。 あえて、書くなら、以下のようになるかな? Sub testR() Dim sh As Worksheet Dim flag As Boolean For Each sh In ActiveWorkbook.Worksheets  If StrComp(sh.Name, "AAA", vbTextCompare) = 0 Then   flag = True: Exit For  End If Next MsgBox IIf(flag, "ありまする", "ないでござる。") End Sub Excel VBAでは、IIf は、普通は使わないことになっていますが。 私なら、以下のようになるかな? Sub TestShFind() Dim ret As Variant Dim ShName As String Dim msg As String  ShName = "AAA"   ret = Evaluate(ShName & "!A1")   If IsError(ret) Then    msg = ShName & "はありません。"   Else    msg = ShName & "は見つかりました。"   End If  MsgBox msg End Sub

merlionXX
質問者

お礼

いつもありがとうございます。 If IsError(ret) Then・・・やはりエラーで判定するわけですね。 わかりました。 > Excel VBAでは、IIf は、普通は使わないことになっていますが。 そうなんですか?どうしてでしょう?

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>1.開かずに判定することは可能かどうか? どこかのセルにブック(シートの任意のセル)へのリンク式(フルパス)を設定して、リンクの更新。 無ければエラーになる。 >2.上記コードのように各シート総当り以外にシート名を検索する方法があるか? シート名を指定してエラーになったら「無し」

merlionXX
質問者

お礼

2.シート名を指定してエラーになったら「無し」は思いついたのですが、ほかに方法がないかと思い質問しました。 1.はそういう方法があるんですね。有難うございます。 ただ、事前にリンクを設定しておくのは無理なので・・・・。

関連するQ&A