EXCEL VBA ワークシート(Worksheets)の使い方・存在チェック・別ブック・検索(テクニック)

 

EXCEL VBA ワークシート(Worksheets)の使い方・存在チェック・別ブック・検索(テクニック)

 

 

●はじめに

今回は、ワークシート(Worksheet)に関する内容で4つのサンプルプログラムを作成しました。プログラムの内容としては、シート名を検索してシートの存在チェック・他のブックのシート名を取得するなどのテクニックを交えたサンプルプログラムになります。シート(Worksheet)は、セル(cells)と同様にプログラムの作成で頻繁に利用するので、使い方が広まるとプログラム作成の幅も広がります。それでは、順番に説明いたします。

ワークシート(Worksheet)に関する他のページも参考になると思いますので参照して下さい。(一部抜粋)】

 

 

 

EXCEL VBA ワークシートの使い方(シートの存在チェック・シート検索)

 

 

●プログラム説明 サンプルプログラム①

下記のサンプルプログラムは、ワークシート名を入力して、フック内に該当するシート名が有るか調べます。検索結果をメッセージボックスにて表示します。

 

'
''******** AKIRA55.COM ******* https://akira55.com/sheets_check/
'
Sub Worksheets_Check()''EXCEL VBA ワークシートの使い方(シートの存在チェック・シート検索)

    Dim ws As Worksheet
    Dim ws_Name As String
    
    ws_Name = Application.InputBox(Prompt:="シート名を入力", Title:="検索するワークシート名を入力", Default:="サッカー", Left:=100, Top:=200, Type:=3)      'InputBoxメゾット設定します。(戻り値をType:=1 数値に設定
    '検索するワークシート名を入力します。
    
    If ws_Name <> "False" Then  '
    
        For Each ws In Worksheets  'ワークシート全てを調べます
    
            If ws.Name = ws_Name Then  '入力したシート名と登録されているシート名が有るか調べます。
                MsgBox "シート名:" & ws.Name & "が有りました"
                Exit Sub  'シート名が有れば、シート名を表示して終了します。
            End If
            
        Next ws
    
    Else
    
        MsgBox "キャンセルしました。"
        Exit Sub

    End If
    
    MsgBox "シート名:" & ws_Name & "は、有りませんでした"
    
    
End Sub

 

 

●実行前~実行後  ※プログラム実行後、 検索するワークシート名を入力します。入力後にワークシート内に、存在するか検索します。結果をメッセージボックスにて表示されます。
(画面クリックして拡大)

 

 

 

EXCEL VBA ワークシートの使い方(シートがなければ追加作成・シートの追加)

 

●プログラム説明 サンプルプログラム②

下記のサンプルプログラムは、ブック内のシート名「マスター」に【シート名一覧】がA列に作成されています。このデータを元に、現在作成されているワークシート名をチェックして【シート名一覧】に作成されていないシート名を追加作成するサンプルプログラムです。

 

 

'
''******** AKIRA55.COM ******* https://akira55.com/sheets_check/
'
Sub Worksheets_Check02()   'EXCEL VBA ワークシートの使い方(シートの存在チェック・無い場合はシートに追加する)

    Dim ws, ws01 As Worksheet
    Dim ws_Name, ws_Addname As String
    Dim I, lRow As Long
    
    Set ws01 = Worksheets("マスター")
    
    lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'ワークシート「マスター」A列の最終行を取得
    
    ws_Addname = ""

    For I = 2 To lRow  'ワークシート「マスター」A列の最終行まで繰り返します。
        
        ws_Name = ws01.Cells(I, "A") 'ワークシート「マスター」のA列のシート一覧データを順番に【ws_Name】へ代入します。
        
        
        For Each ws In Worksheets  'ワークシート全てを調べます
    
            If ws.Name = ws_Name Then  'ワークシート「マスター」のA列のシート一覧データと既に登録されているか調べます。
                ws_Name = ""
                Exit For  '既にワークシートが登録されていれば抜け出す。
            End If
            
        Next ws
    
    If ws_Name <> "" Then
            Worksheets.Add After:=Sheets(Worksheets.Count) '空のワークシートを最後尾に追加(登録されていないシート名を追加します。)
            ActiveSheet.Name = ws_Name  '追加したワークシートの名前を変更します。
            ws_Addname = ws_Addname + ws_Name & vbCrLf
    End If
    
    Next I

    If ws_Addname <> "" Then  'シートを追加したか調べます
                MsgBox "追加したシート名は、:" & vbCrLf & ws_Addname & "を追加しました。"
            Else
                MsgBox "シートは追加しませんでした。"  '追加するシートが無い場合
    End If
    
End Sub
'

 

 

 ●実行前~実行後  ※プログラム実行後、ワークシート「マスター」にある「シート名一覧」と既存のシート名を比較して、「シート名一覧」に無いシート名を追加しました。
(画面クリックして拡大)

 

 

 

EXCEL VBA ワークシートの使い方(特定条件に指定したシートを削除)

 

 

●プログラム説明 サンプルプログラム③

下記のサンプルプログラムは、ある特定条件(文字列)に指定したシートを削除するサンプルプログラムです。既存のワークシート名に「削除」の文字列が記入されている場合は、シートの削除対象になり該当するシートが削除されます。

【プログラムの説明】
①シートの削除対象にするには、シート名に【削除】の文字列を追記します。
②プログラム実行後、削除対象のシート名が有る場合は、対象のシート名がメッセージボックスで表示されます。
③【はい】・・・対象のシートが削除されます。 【いいえ】・・・シートの削除がキャンセルされます。(削除されません)

 

 

'
''******** AKIRA55.COM ******* https://akira55.com/sheets_check/
'
Sub Worksheets_Check03() 'EXCEL VBA ワークシートの使い方(シートの存在チェック・条件によるシート削除)

    Dim ws As Worksheet
    Dim ws_Name, ws_Addname As String
    Dim Hantei As Integer
    
    ws_Name = "*[削除]*"  'シート名に【削除】の文字列はあるものが対象になります。

    
    ws_Addname = ""
    
    For Each ws In Worksheets  'シートの削除対象をリスト化
        If ws.Name Like ws_Name Then
            ws_Addname = ws_Addname + vbCrLf & ws.Name 'シート削除対象をリスト化します。
        End If
    Next ws

    If ws_Addname = "" Then
            MsgBox "削除対象のシートは、有りませんでした"  'シート削除対象が1件もない場合
        Else
            Hantei = MsgBox("削除対象のシート名:" & ws_Addname & "が有ります削除しますか?", vbYesNo)
                If Hantei = vbYes Then  '「はい」・・削除
                    
                    Application.DisplayAlerts = False 'シートを削除する際の警告メッセージ非表示(警告を無視)
            
                        For Each ws In Worksheets
                            If ws.Name Like ws_Name Then
                                ws.Delete  '削除対象のシートを削除します。
                            End If
                        Next ws
            
                    Application.DisplayAlerts = True  'シートを削除する際の警告メッセージの表示(既定値)
        
                    Else
                        MsgBox "シート削除をキャンセルしました。"

                End If
    End If
    
End Sub
'

 

 

 ●実行前~実行後  ※プログラム実行後、削除対象のシート名がメッセージボックスに表示されます。削除確認して【はい】の選択で、削除対象のシートが削除されました。
(画面クリックして拡大)

 

 

 

 

EXCEL VBA ワークシートの使い方(別ブックからシート名を取得します・別シート名検索)

 

 

●プログラム説明  サンプルプログラム④

下記のサンプルプログラムは、別ブックからシート名を取得するサンプルプログラムです。ダイアログボックスからEXCELファイルを選択して、そのファイル内の全シート名を取得するサンプルプログラムです。シート単位で情報を管理している場合は、いちいちファイルを開いてシート名を確認するよりも、ファイルを選択するたけで、シート名を自動的に取得するので、とても便利です。

 

 

'
''******** AKIRA55.COM ******* https://akira55.com/sheets_check/
'
Sub Worksheets_Check04() 'EXCEL VBA ワークシートの使い方(他のブックからシート名を取得します。)

    Dim Wb As Workbook
    Dim Ws01, Ws02 As Worksheet
    Dim FilePath As String
    Dim I As Long
    
    FilePath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
    'ダイアログボックスが表示されシート名を取得するEXCELファイルを選択します。
    
    If FilePath = "False" Then    'ダイアログボックスのファイル選択をキャンセルした場合
        MsgBox "処理を中断します"
        Exit Sub '処理を中断します
    End If
    
    Set Ws02 = Worksheets("マスター")

    I = 2 'シート(マスター)の2行目からシート名を転記するため
    
    Set Wb = Workbooks.Open(FileName:=FilePath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)
            '選択したEXCELファイルを読み取り専用で開きます。

    For Each Ws01 In Wb.Worksheets  '選択したEXCELファイルの全シート分繰り返します。
        Ws02.Cells(I, "A") = Ws01.Name  'シート名を取得して、シート名を転記します。
        I = I + 1  '転記する行を+1し加算します。
    Next Ws01
    
    Wb.Close  '選択したEXCELファイルを閉じます


End Sub
'

 

 

●実行前~実行後  ※プログラム実行後、ダイアログボックスからEXCELファイルを選択します。選択したEXCELファイル(ブック)のシート名全てを取得して、シート(マスター)のA列に一覧表として転記されました。
(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

 

AKIRA