【Excelマクロ(VBa)】Excel情報取得


 Excelブックの情報取得


現在アクティブになっているExcelブックのパス・ブック名の取得方法をご紹介します。

Dim BookPath As String
Dim BookName As String

BookPath = ActiveWorkbook.Path   'パスの取得
BookName = ActiveWorkbook.Name   'ブック名の取得

現在オープンしているExcelブックのパス・ブック名の取得方法をご紹介します。
Workbooks.Count は 現在オープンしているExcel数を取得します。

'■ 変数定義・・数が未定なため動的配列とする
Dim AllBookPath() As String
Dim AllBookName() As String
Dim i As Integer

'配列の要素数を定義
ReDim AllBookPath(Workbooks.Count)
ReDim AllBookName(Workbooks.Count)

For i = 1 To Workbooks.Count
  AllBookPath(i - 1) = Workbooks(i).Path   'パスの取得
  AllBookName(i - 1) = Workbooks(i).Name   'ブック名の取得
Next i



 Excelワークシートの情報取得


現在アクティブになっているExcelワークシート名の取得方法をご紹介します。

'■ 変数定義
Dim WorkSheetName As String

WorkSheetName = ActiveWorkbook.ActiveSheet.Name   'ワークシート名の取得

1ブック中の全Excelワークシート名の取得方法をご紹介します。
Worksheets.Count は 1ブック中のワークシート数を取得します。

'■ 変数定義・・数が未定なため動的配列とする
Dim AllWorksheetName() As String
Dim i As Integer

'配列の要素数を定義
ReDim AllWorksheetName(Worksheets.Count)

For i = 1 To Worksheets.Count
  AllWorksheetName(i - 1) = Worksheets(i).Name   'ワークシート名の取得
Next i




 Excelブック・ワークシートの情報を取得し一元管理する


変数はグローバル変数として下記のように構造体を作成すると良いと思います。

'Excel情報の構造体
Type ExcelData
  BookPath As String    'ブックのパス
  BookName As String    'ブック名
  WorksheetCnt As Integer    'ワークシートの件数
  WorksheetName() As String    'ワークシート名
End Type

Global ExcelInfo() As ExcelData    'Excel情報の配列
Global ExcelInfoCnt As Integer    '件数

下記のように関数化して GetExcelInfo を call してはいかがでしょうか。

'Excelブック・ワークシートの情報を取得
Sub GetExcelInfo()

  'カウンター
  Dim i As Integer
  Dim j As Integer

  '構造体の初期化
  Erase ExcelInfo

  'オープンしているブック数を取得
  ExcelInfoCnt = Workbooks.Count
  '構造体の配列を動的にブック数に変更する
  ReDim ExcelInfo(Workbooks.Count)

  'ブック数分 ループする
  For i = 1 To ExcelInfoCnt
    'ブックのパス・ブック名を取得する
    ExcelInfo(i - 1).BookPath = Workbooks(i).Path
    ExcelInfo(i - 1).BookName = Workbooks(i).Name
  Next i

  'ブック数分 ループする
  For i = 1 To ExcelInfoCnt
    '該当のブックをアクティブにする
    Workbooks(ExcelInfo(i - 1).BookName).Activate
    'ワークシート数を取得する
    ExcelInfo(i - 1).WorksheetCnt = Worksheets.Count

    '構造体のワークシートの変数配列を動的にワークシート数に変更する
    ReDim ExcelInfo(i - 1).WorksheetName(ExcelInfo(i - 1).WorksheetCnt)

    'ワークシート数分 ループする
    For j = 1 To ExcelInfo(i - 1).WorksheetCnt
      'ワークシート名を取得する
      ExcelInfo(i - 1).WorksheetName(j - 1) = Worksheets(j).Name
    Next j
  Next i

End Sub

管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す