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サンプル集」の記事
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(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)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excelファイルを開かずにシート名をチェック
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。