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読み込みVBAコード ・配列を使ってシートにまとめて出力する場合 ・QueryTablesを使ったCSV読み込みVBAコード ・本サイトにあるCSV関連記事一覧
CSVの読み込み方法(ジャグ配列)
・CSVの読み込み方法(改の改)での予告 ・CSV読み込みでのジャグ配列の使いどころ ・CSV読み込みVBAコード:ジャグ配列バージョン ・最後に ・本サイトにあるCSV関連記事一覧
CSVの読み込み方法(ジャグ配列)(改)
・CSV読み込みVBAコード:CSVの読み込み方法(ジャグ配列)(改) ・CSVの読み込み方法(ジャグ配列)(改)の使用例 ・本サイトにあるCSV関連記事一覧
CSVの出力(書き出し)方法
・エクセルの機能をそのまま利用します ・直接CSVを出力 ・本サイトにあるCSV関連記事一覧
UTF-8でCSVの読み書き(ADODB.Stream)
・アクティブシートの内容をUTF-8でCSV出力します ・UTF-8のCSVを読込、シートに出力します ・ADODB.Streamのメソッドとプロパティ ・本サイトにあるCSV関連記事一覧
ADOでマスタ付加と集計(SQL)
VBAでADOを使用し、マスターデータよりデータ付加します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身の他シートから、マスタ情報を付加し、さらに、集計をします。
ADOでマスタ更新(SQL)
VBAでADOを使用し、マスターデータを更新します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身のブックの、他シートを更新します。シート「顧客マスタ」の、A列が顧客番号、B列が顧客名で、1行目が見出しになっているものとします。
ADOでCSVの読み込み(SQL)
・CSVテストデータ ・ADOでCSV読込のVBA ・ADO使用時の注意点 ・ADOレコードセットをCSV出力 ・ADOでTSVの読み込み ・ADOでCSVの読み込みについて ・本サイトにあるCSV関連記事一覧
ADOでテキストデータを集計する
・#助けてVBA の元ツイート ・解答したツイート ・ADOとSQLの解説
Excelファイルを開かずにシート名を取得
Excelファイルを開かずにシート名をチェック
多くのExcelファイルから、特定のシート名のデータを取得する場合、当該シートが存在していないブックがあるならば、ブックを開く前にシートの存在をチェックしたくなります。このような、ファイルを開かずにExcelの情報を取得したいという要望は多くあります。


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

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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