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



最終更新日:2016-10-07

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
      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ファイルを適切に作成(無用な書式設定等はしない)し、適切なファイルに分割して管理する。
これが原則であり、そうなっていれば、このような方法をとる必要性はあまりないはずです。




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

CSVの読み込み方法
CSVの読み込み方法(改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでマスタ更新(SQL)

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

メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)
セルのコピー&各種ペースト|Google Apps Script入門(11月22日)
Twitter Bot 作成|Google Apps Script応用(11月6日)
Excel流の最終行の取得|Google Apps Script応用(11月6日)
方眼紙Excelが楽に入力できるVBA|ExcelマクロVBAサンプル集(11月5日)
「ポケモンを確実に見つける方法」をExcelで数学してみた|エクセル雑感(11月4日)
スプレッドシート(ブック)の作成・名前変更|Google Apps Script入門(11月4日)
シートの挿入・削除・名前変更|Google Apps Script入門(11月3日)

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

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



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

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


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



    ↑ PAGE TOP