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, "!", "_")
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」を追加して下さい。
シート名の取得には、ADOでテーブル名を取得する方法を使っています。
取得したシート名は、
シート名$
'シート名$'
このようになっているので、'と$を削除します。
また、
シート名に'がある場合は、'がエスケープ処理されていますので、''を'に変換しています。
さらに、
シート名の!は、_に変換されているので、!は_としてシート名を判定しています。
シート名の.は、#に変換されているので、.は#としてシート名を判定しています。
Sub sample()
Dim sTemp As String
sTemp = "フルパスを指定"
If SheetExist(sTemp, "シート名") = False Then
MsgBox "シートはありません"
End If
End Sub
基本的にはお勧めするような技術ではありません。
Excelファイルを適切に作成し、適切なファイルに分割して管理する。
適切に管理されていれば、このような方法をとる必要性はあまりないはずです。
同じテーマ「マクロVBAサンプル集」の記事
CSVの読み込み方法(改の改)
CSVの読み込み方法(ジャグ配列)
CSVの読み込み方法(ジャグ配列)(改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでマスタ更新(SQL)
ADOでCSVの読み込み(SQL)
ADOでテキストデータを集計する
Excelファイルを開かずにシート名を取得
Excelファイルを開かずにシート名をチェック
新着記事NEW ・・・新着記事一覧を見る
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excelファイルを開かずにシート名をチェック
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。