ExcelマクロVBAサンプル集 | Excelファイルを開かずにシート名を取得 | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2017-03-22

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

Excelファイルを開くときは、ファイルサイズに比して、とても遅い場合があります、

ファイルを開かずに、Excelの情報を取得したいという要望は少なからずあるようです、

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

もちろん、開かないと言っても、厳密には必ず開いているわけですが、
Excelのブックとして開かないという事です。

また、
そもそも、ファイルサイズに比して読込が遅い場合は、本来は各種書式等を見直すべきではあります。
単なる文字数値が大量に入っていてサイズが大きいだけなら、それほど遅いとは感じないはずです。


ブックを開かずに、セル値を取得する方法としては、
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マクロVBAサンプル集」の記事

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

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

フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)
ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
5.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
8.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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




    ↑ PAGE TOP