VBAサンプル集
Excelファイルを開かずにシート名を取得

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2016-10-05 最終更新日:2020-11-13

Excelファイルを開かずにシート名を取得


Excelファイルを開くときは、ファイルサイズに比して、とても遅い場合があります、
ファイルを開かずに、Excelの情報を取得したいという要望は少なからずあるようです、


そこで、処理の基本となるシート名を取得する方法になります。

もちろん、開かないと言っても、厳密には必ず開いているわけですが、
Excelのブックとして開かないという事です。
また、
そもそも、ファイルサイズに比して読込が遅い場合は、本来は各種書式等を見直すべきではあります。
単なる文字数値が大量に入っていてサイズが大きいだけなら、それほど遅いとは感じないはずです。


ブックを開かずに、セル値を取得する方法としては、
ExecuteExcel4Macro
があります。
以下を参照してください。
ExecuteExcel4Macroについて
・ ・ ・ExecuteExcel4Macroの使用例 ・ExecuteExcel4Macroの最後に
ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)

この時、問題になるのがシート名になります。
ExecuteExcel4Macroでは、シート名を固定で記述しなければならないためです。

以下の方法と、ExecuteExcel4Macroを組み合わせることで、
任意のブックの任意のシートのセル値も取得できるようになります。



Sub getSheet()
  Dim objCn As New ADODB.Connection
  Dim objRS As ADODB.Recordset
  Dim sFile As String
  Dim sSheet As String
  Dim i   As Long
  
  sFile = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*")
  If sFile = "False" Then
    Exit Sub
  End If
  
  With objCn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Properties("Extended Properties") = "Excel 12.0"
    .Open sFile
    Set objRS = .OpenSchema(ADODB.adSchemaTables)
  End With
  
  i = 1
  Do Until objRS.EOF
    sSheet = objRS.Fields("TABLE_NAME").Value
    If Right(sSheet, 1) = "$" Or Right(sSheet, 2) = "$'" Then
      If Right(sSheet, 1) = "$" Then
        sSheet = Left(sSheet, Len(sSheet) - 1)
      End If
      If Right(sSheet, 2) = "$'" Then
        sSheet = Left(sSheet, Len(sSheet) - 2)
      End If
      If Left(sSheet, 1) = "'" Then
        sSheet = Mid(sSheet, 2)
      End If
      sSheet = Replace(sSheet, "''", "'")
      Cells(i, 1) = sSheet
      i = i + 1
    End If
    objRS.MoveNext
  Loop
  objRS.Close
  objCn.Close
  Set objRS = Nothing
  Set objCn = Nothing
End Sub

※「参照設定」で「Microsoft ActiveX Data Objects 2.X Library」を追加して下さい。


※Excel2003以前の場合は

.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties") = "Excel 8.0"
こちらを使用してください。

結果の出力については、きわめて単純に、アクティブシートのA1から順に出力しています。
アクティブシートの初期クリアも入れていませんので、適宜追加してください。
さすがに、この手のVBAを使う人なら、このあたりはご自由にどうぞ、という事で記述しています。


実際に、ExecuteExcel4Macroと組み合わせて、
特定のシート名(シート名に○○を含む等)を見つけて、そのシートの特定セル値を取得するといった場合は、
ADOで取得したシート名を配列に入れて、ExecuteExcel4Macroで順に処理するといった事になると思います。
これは、シート名さえ取得できていれば、簡単に書けるものです。

ただし、
ExecuteExcel4Macroの記事にも書いていますが、基本的にはお勧めするような技術ではありません。
Excelファイルを適切に作成(無用な書式設定等はしない)し、適切なファイルに分割して管理する。
これが原則であり、そうなっていれば、このような方法をとる必要性はあまりないはずです。


※後日追記

シート名の変換に不足がありました。
VBAコードの赤字部分が追加の変換となっています。
さらに、
シート名に、!(エクスクラメーション)がある場合は、_(アンダースコア)に変換されてしまいます。
しかし、元々のシート名の_(アンダースコア)はそのままなので、両者の区別がつきません。
同様に、.(ピリオド)がある場合は、#(シャープ)に変換されてしまいます。
しかし、元々のシート名の#(シャープ)はそのままなので、両者の区別がつきません。

上記も含めて、本記事の応用として、
Excelファイルを開かずにシート名をチェック
多くのExcelファイルから、特定のシート名のデータを取得する場合、当該シートが存在していないブックがあるならば、ブックを開く前にシートの存在をチェックしたくなります。このような、ファイルを開かずにExcelの情報を取得したいという要望は多くあります。




同じテーマ「マクロVBAサンプル集」の記事

CSVの読み込み方法(改の改)
CSVの読み込み方法(ジャグ配列)
CSVの読み込み方法(ジャグ配列)(改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでマスタ更新(SQL)
ADOでCSVの読み込み(SQL)
ADOでテキストデータを集計する
Excelファイルを開かずにシート名を取得
Excelファイルを開かずにシート名をチェック


新着記事NEW ・・・新着記事一覧を見る

「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)
ListBox・ComboBoxをマウスホイール対応させる|ユーザーフォーム入門(2026-08-09)
VBA モジュールエクスポートツール|モジュールを選別して一括出力|VBAサンプル集(2026-08-06)
「SUMIFSで動くのにXLOOKUPでエラー?」型不一致の関数別挙動|エクセル関数応用(2026-08-03)
生成AIが暴いた「VBAオワコン説」の盲点|問われるのは言語ではなく評価軸|エクセル雑感(2026-07-04)
【ITとは何か】Excel・VBAを学ぶ前に知っておきたい「4つの本質」|エクセル雑感(2026-06-24)
2つのシート名を交換するVBAをGeminiに作らせてみた。|VBA技術解説(2026-05-22)
ヘッダーに合わせて列をソートして値貼り付けするスマートな方法|VBAサンプル集(2026-05-20)
4大分岐関数の使い分け(IF/IFS/SWITCH/CHOOSE)|エクセル入門(2026-05-19)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ