Excel

【Excel】VBAマクロでシート数を取得(開かずに、非表示は含まない、表示されているシートのみ、条件、フォルダ内)する方法【GetOpenFilename、Cells、Visible】

当サイトでは記事内に広告を含みます

この記事では、ExcelのVBAマクロを利用して、特定の条件下でシート数を取得する方法について解説していきます。

ポイントとしては、GetOpenFilename関数、Cellsメソッド、Visibleプロパティを使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

VBAマクロでシート数を取得しメッセージボックスで表示する方法【開かずに、ダイヤログ使用】【GetOpenFilename】

それではまず、1ファイルのシート数を取得しメッセージボックスで表示する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub SheetKazuHyouji()
    Dim filePath As String
    Dim hensuu As Workbook
    Dim sheetKazu As Integer

    filePath = Application.GetOpenFilename("Excelファイル, *.xls; *.xlsx")
    If filePath = "False" Then Exit Sub

    Set hensuu = Workbooks.Open(filePath, UpdateLinks:=False, ReadOnly:=True)
    sheetKazu = hensuu.Sheets.Count
    hensuu.Close SaveChanges:=False

    MsgBox filePath & " のシート数は " & sheetKazu & " です。"
End Sub

コードのAlt+F8を押し、マクロ選択画面でSheetKazuHyouji関数を実行します。

このコードでは、GetOpenFilename関数でファイルを選択し、選択したファイルのシート数を取得して、メッセージボックスで表示しています。

 VBAマクロでフォルダの全てブックのシート数を取得し、ファイル名と共に別ブックに表示する方法【Cells】

続いては、フォルダの全てのブックのシート数を取得し、ファイル名と共に別のブックに表示する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub AllSheetKazuHyouji()
    Dim folderPath As String
    Dim fileName As String
    Dim outputBook As Workbook
    Dim hensuu As Workbook
    Dim rowKazu As Integer
    Dim sheetKazu As Integer

    folderPath = ThisWorkbook.Path
    Set outputBook = Workbooks.Add

    fileName = Dir(folderPath & "\*.xls*")
    rowKazu = 1

    Do While fileName <> ""
        Set hensuu = Workbooks.Open(folderPath & "\" & fileName, UpdateLinks:=False, ReadOnly:=True)
        sheetKazu = hensuu.Sheets.Count
        hensuu.Close SaveChanges:=False
        
        outputBook.Cells(rowKazu, 1).Value = fileName
        outputBook.Cells(rowKazu, 2).Value = sheetKazu
        rowKazu = rowKazu + 1
        
        fileName = Dir
    Loop
End Sub

コードのAlt+F8を押し、マクロ選択画面でAllSheetKazuHyouji関数を実行します。

このコードでは、指定したフォルダ内のすべてのExcelファイル名と、それぞれのシート数を新しいワークブックに出力します。

VBAマクロで非表示セルシートは含めないでシート数を表示する方法【表示シートのみ】【Visible】

続いては、非表示のセルシートを除外してシート数を表示する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub VisibleSheetKazuHyouji()
    Dim hensuu As Worksheet
    Dim visibleKazu As Integer
    visibleKazu = 0

    For Each hensuu In ThisWorkbook.Sheets
        If hensuu.Visible = xlSheetVisible Then
            visibleKazu = visibleKazu + 1
        End If
    Next hensuu

    MsgBox "表示されているシート数は " & visibleKazu & " です。"
End Sub

コードのAlt+F8を押し、マクロ選択画面でVisibleSheetKazuHyouji関数を実行します。

このコードでは、Visibleプロパティを使用して、非表示のシートを除外し、表示しているシートだけの数を取得し、メッセージボックスで表示しています。

まとめ

以上、VBAマクロを使用してExcelのシート数を特定の条件下で取得する方法について解説しました。

初心者の方でも理解しやすいように変数名を独特なものにしていますので、実際の使用時は適切なものに変えてご使用ください。