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



最終更新日:2017-03-23

Excelファイルを開かずにシート名をチェック

多くのExcelファイルから、特定のシート名のデータを取得する場合、

当該シートが存在してないブックがあるならば、ブックを開く前にシートの存在をチェックしたくなります。

このような、ファイルを開かずにExcelの情報を取得したいという要望は多くあります。


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

こちらでの掲載コードの応用版になります。

指定の名称のシートがあるかどうかを判定するFunctionを作成します。

Private Function SheetExist(ByVal sFile As String, ByVal sName As String) As Boolean
  Dim objCn As New ADODB.Connection
  Dim objRS As ADODB.Recordset
  Dim sSheet As String
  
  SheetExist = False
  
  On Error Resume Next
  With objCn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Properties("Extended Properties") = "Excel 12.0"
    .Open sFile
    Set objRS = .OpenSchema(ADODB.adSchemaTables)
  End With
  If Err.Number = 0 Then
    sName = Replace(sName, "!", "_")
    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, "''", "'")
        If sName = sSheet Then
          SheetExist = True
          Exit Do
        End If
      End If
      objRS.MoveNext
    Loop
  End If
 
  objRS.Close
  objCn.Close
  Set objRS = Nothing
  Set objCn = Nothing
  On Error GoTo 0
End Function

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

特にVBAコードの解説はしませんが、
シート名の取得には、ADOでテーブル名を取得する方法を使っています。

気を付けるところは、記号の変換だけです。
取得したシート名は、
シート名$
'シート名$'
このようになっているので、'$を削除します。
また、
シート名に'がある場合は、'がエスケープ処理されていますので、'''に変換しています。
さらに、
シート名の!は、_に変換されているので、!_としてシート名を判定しています。

使い方も示しておきます。

Sub sample()
  Dim sTemp As String
  sTemp = "フルパスを指定"
  If SheetExist(sTemp, "シート名") = False Then
    MsgBox "シートはありません"
  End If
End Sub


Excelファイルを開かずにシート名を取得
上のページでも書きましたが、
基本的にはお勧めするような技術ではありません。
Excelファイルを適切に作成し、適切なファイルに分割して管理する。
適切に管理されていれば、このような方法をとる必要性はあまりないはずです。




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

CSVの読み込み方法
CSVの読み込み方法(改)
CSVの読み込み方法(改の改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでCSVの読み込み(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