- ベストアンサー
エクセル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.上記コードのように各シート総当り以外にシート名を検索する方法があるか?あるならその方法 です。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
それ以前に、このコードでは、 「ブックにAAAという名前のワークシートが存在するかどうかの判定」するのではなくて 一番右のシートが、"AAA" かどうかの判定です。 あっても、"ないでござる。" になるのでござる・・・ 何かが抜けているような・・・
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Wendy02です。 >> Excel VBAでは、IIf は、普通は使わないことになっていますが。 Access の一般関数にはありますが、ExcelのVBAでは、反応が遅いということでしょうね。
お礼
> Access の一般関数にはありますが、ExcelのVBAでは、反応が遅いということでしょうね。 わかりました。以後、注意します。 ありがとうございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 あえて、書くなら、以下のようになるかな? 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
お礼
いつもありがとうございます。 If IsError(ret) Then・・・やはりエラーで判定するわけですね。 わかりました。 > Excel VBAでは、IIf は、普通は使わないことになっていますが。 そうなんですか?どうしてでしょう?
- hana-hana3
- ベストアンサー率31% (4940/15541)
>1.開かずに判定することは可能かどうか? どこかのセルにブック(シートの任意のセル)へのリンク式(フルパス)を設定して、リンクの更新。 無ければエラーになる。 >2.上記コードのように各シート総当り以外にシート名を検索する方法があるか? シート名を指定してエラーになったら「無し」
お礼
2.シート名を指定してエラーになったら「無し」は思いついたのですが、ほかに方法がないかと思い質問しました。 1.はそういう方法があるんですね。有難うございます。 ただ、事前にリンクを設定しておくのは無理なので・・・・。
お礼
あははは!ほんとですねえ、何やってんだろ馬鹿だなあ。 テストしてるブックがみんな最後のシートだったので気付きませんでした。 Sub test() For Each sh In ActiveWorkbook.Worksheets If sh.Name = "AAA" Then flag = True Next MsgBox IIf(flag, "ありまする", "ないでござる。") End Sub ならいいですね。