■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#18404-0シートがない場合匿名184042001-10-23(火) 15:10
     #18406-0RE#18404:シートがない場合Duck2001-10-23(火) 17:46
     #18415-0RE#18406:シートがない場合匿名184152001-10-24(水) 13:25
     #18416-0RE#18415:シートがない場合Duck2001-10-24(水) 14:00
     #18419-0RE#18406:シートがない場合匿名184192001-10-24(水) 17:01
     #18420-0RE#18419:シートがない場合魔界の仮面弁士2001-10-24(水) 17:08
     #18422-0RE#18420:シートがない場合LESIA2001-10-24(水) 17:54
     #18446-0RE#18419:シートがない場合Duck2001-10-25(木) 16:09
#18404-0
シートがない場合
お世話様です。

エクセルについてです。
あらかじめ作成されているファイルを開きsheet5をアクティブにするような
マクロを書きました。ファイルによってはsheet5がない場合があるので
if文”でもしsheet5がない場合〜”というコードを書きたいのですが
どのように記述すればよいのでしょうか?
ブール型にしてFalseのとき、としたいのですがうまくいきません。
お手数ですがよろしくお願いします。
#18406-0
RE#18404:シートがない場合
> お世話様です。
> 
> エクセルについてです。
> あらかじめ作成されているファイルを開きsheet5をアクティブにするような
> マクロを書きました。ファイルによってはsheet5がない場合があるので
> if文”でもしsheet5がない場合〜”というコードを書きたいのですが
> どのように記述すればよいのでしょうか?
> ブール型にしてFalseのとき、としたいのですがうまくいきません。
> お手数ですがよろしくお願いします。
現在のブックにその名前のシートがあるかチェックして、Bool値を返す関数を自作しては?

Public Function CheckSheet(SheetName As String) As Boolean
    Dim myWorkSheet As Worksheet

    For Each myWorkSheet In Worksheets
        strName = myWorkSheet.Name
        If myWorkSheet.Name = SheetName Then
            CheckSheet = True
        End If
    Next
    CheckSheet = False

End Function
#18415-0
RE#18406:シートがない場合
> 現在のブックにその名前のシートがあるかチェックして、Bool値を返す関数を自作しては?
> 
> Public Function CheckSheet(SheetName As String) As Boolean
>     Dim myWorkSheet As Worksheet
> 
>     For Each myWorkSheet In Worksheets
>         strName = myWorkSheet.Name
>         If myWorkSheet.Name = SheetName Then
>             CheckSheet = True
>         End If
>     Next
>     CheckSheet = False
> 
> End Function

ありがとうございます。使い慣れない関数がありますが、トライしてみます。
#18416-0
RE#18415:シートがない場合
ごめんなさい。
これバグってます(^^;

> > Public Function CheckSheet(SheetName As String) As Boolean
> >     Dim myWorkSheet As Worksheet
> > 
> >     For Each myWorkSheet In Worksheets
> >         strName = myWorkSheet.Name
> >         If myWorkSheet.Name = SheetName Then
> >             CheckSheet = True
                Exit Function    ← これ忘れた。
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >         End If
> >     Next
> >     CheckSheet = False
> > 
> > End Function
> 
> ありがとうございます。使い慣れない関数がありますが、トライしてみます。

このままじゃ必ずFalseを返します。

気づいてくれるといいのですが・・・(^^;
#18419-0
RE#18406:シートがない場合
> 現在のブックにその名前のシートがあるかチェックして、Bool値を返す関数を自作しては?
> 
> Public Function CheckSheet(SheetName As String) As Boolean
>     Dim myWorkSheet As Worksheet
> 
>     For Each myWorkSheet In Worksheets
>         strName = myWorkSheet.Name
>         If myWorkSheet.Name = SheetName Then
>             CheckSheet = True
>         End If
>     Next
>     CheckSheet = False
> 
> End Function

上記コードは理解しました。
追加の質問なのですが、このコードでは目的のシートが見つかっても
全てのシートの名前をチェックしないとFor each - nextから抜け出せません。
目的のシートが見つかった段階で抜けるにはどうしたらよいでしょうか?

For Each myWorkSheet In Worksheets

この部分のIn Worksheetsの変え方が解りませんでした。
お手数ですがよろしくお願いします。
#18420-0
RE#18419:シートがない場合
> 全てのシートの名前をチェックしないとFor each - nextから抜け出せません。
> 目的のシートが見つかった段階で抜けるにはどうしたらよいでしょうか?
Exit Forしましょう。


> For Each myWorkSheet In Worksheets
> この部分のIn Worksheetsの変え方が解りませんでした。
これは、
 「Worksheetsコレクション」に含まれている
 「Worksheetオブジェクト」を列挙する
という意味です。

似たものとして、For〜Nextというものもあり、こちらを使った場合は
   For I = 1 To Worksheets.Count
       If WorkSheets(I).Name = SheetName Then
          CheckSheet = True
          Exit For    
       End If
   Next
のような書き方も出来ますが、For Eachの方が若干高速です。
#18422-0
RE#18420:シートがない場合
> > 全てのシートの名前をチェックしないとFor each - nextから抜け出せません。
> > 目的のシートが見つかった段階で抜けるにはどうしたらよいでしょうか?
> Exit Forしましょう。

ちょっと、つっこみ
Exit Forをいれるだけでは、ループを抜けた時点で、CheckSheet = Falseを
実行してしまうので、#18416に書いてあるようにExit Functionにしましょう(^^)

また、こうすればExit ForでもOKです。

Public Function CheckSheet(SheetName As String) As Boolean
    Dim myWorkSheet As Worksheet

    CheckSheet = False
    For Each myWorkSheet In Worksheets
        strName = myWorkSheet.Name
        If myWorkSheet.Name = SheetName Then
            CheckSheet = True
            Exit For
        End If
    Next myWorkSheet
End Function
#18446-0
RE#18419:シートがない場合
> 上記コードは理解しました。
> 追加の質問なのですが、このコードでは目的のシートが見つかっても
> 全てのシートの名前をチェックしないとFor each - nextから抜け出せません。
> 目的のシートが見つかった段階で抜けるにはどうしたらよいでしょうか?
この部分は解決しているとして・・・

> For Each myWorkSheet In Worksheets
> 
> この部分のIn Worksheetsの変え方が解りませんでした。
> お手数ですがよろしくお願いします。
For Each...Nextのヘルプを見ると分かりますが、コレクションのオブジェクトまたは配列の各要素を
変数にセットします。

Worksheetsは、コレクションです。
アクティブなブックの中のWorksheetがすべて集まった集合体と思ってください。

このコードはループを実行するたびにWorksheetsコレクションの中から1シートずつ取り出して
myWorkSheet変数にセットしています。

要は、全シートを先頭から順にとってきて、myWorkSheet変数に格納しますよって事です。

コレクションとはどういうものか、For Each...Nextステートメントはどうやって使うか、
もうちょっと調べてみると良いですよ。(^^)
このページと関連する記事:
#18662-0セル範囲内のデータの有無2001-11-08(木) 10:50
#23-2複数シートをCSV形式で出力したい2003-04-18(金) 11:24
#4234-2エクセルファイルからPDFファイルを作成する2002-01-23(水) 12:27
#18969-0同名のモジュールがあるか検索する方法2001-11-29(木) 10:15
#4033-0VBからエクセルの操作する方法2002-01-19(土) 02:35
#4033-2VBからエクセルの操作する方法2002-01-18(金) 17:35
#46447-0Excelシートの存在チェック2001-09-02(日) 17:07
#45335-0Excel出力時のページ数表示2001-07-25(水) 14:36
#470-2Excelデータの空セルチェックの高速化2001-10-25(木) 01:28
#17587-0For...nextについて。2001-09-05(水) 11:55
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)