No.1
- 回答日時:
VBAを記述する、別のエクセルファイルは開いていて良いのでしょうか。
VBからですか。エクセルファイルを(エクセルを通さず)メモリに読み込んだとき、どこかに、シート名が記録されていることは間違いないが、アプリであるエクセルを介さず、シート名を取り出すのは、エクセルInside情報をご存知とか、もしあれば(ないと思いますが)シート名取得のAPIを知っている人しかわからないことではないでしょうか。
VBAを記述する、別のエクセルファイルは開いていて、対象エクセルファイルをVisible=Falseで開いて、For Each で探すのはダメでしょうか。
Sub test02()
fnm = "Book5"
Dim sh As Worksheet
Set exl = CreateObject("Excel.Application")
exl.Application.Visible = False
exl.Application.Workbooks.Open Filename:=fnm
For Each sh In exl.Worksheets
MsgBox sh.Name
Next
exl.Application.Quit
End Sub
上例ではBook5の全シート名が順次表示されますので、If文で聞くことはどうでしょうか。
この回答への補足
早速のご回答、ありがとうございます。
> VBAを記述する、別のエクセルファイルは開いていて良いのでしょうか。
はい。
検査を実行するコードを記述したエクセルファイルは開いた状態、
一方で検査対象となるエクセルファイルは閉じたままの状態で、
ある名前のシートがそのファイルに存在するかどうかを知りたいのです。
実はその検査するファイルがかなりあるので、検査時間を短縮すべく、
なるべくファイルを開かずに検査をしたいという訳です。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんばんは。
昨日、作ってあったのですが、「スマートさ」という言葉が、引っかかってしまって、アップロードできませんでした。あまり深く考える必要がないのですが、こういう言葉は、どうしても、掲示板内でのトラウマがあります。感性や感覚的なものを持ち出されると、まったくキリがないのです。それと、今回、パスワードロックしたブックを検索するために、バイナリ検索の方法も作ってみたものの、確実性が欠くので、それもブレーキになってしまいました。
以下は、私の考える中では、もっとも速い検索の部類に入るはずです。ブックのオープンをしていません。だいたい、ブック約500個でも、10秒以内で検索できます。ただし、ブックに共通するようなシート名(例:Sheet1)などは可能ですが、あまり賢明な検索ではありません。限界数は設けてありませんが、60個ぐらいまでで止めてください。あまり多いと、Msgbox (メッセージボックス)が、画面の高さを越えて、右上の「×」が利かなくなります。(終了できないわけではありません。)
・シート名のワイルドカードは使えません。
・CSVファイルなど、シート名のないものには検索できません。
・このマクロは、パスワード付きにブックは、パスワードを入力しないと検索できません。
・グラフシートなど、ワークシート以外のものは検索できません。
'------------------------------------------------------------
'<標準モジュール推奨>
Option Explicit
Sub SheetNameSearchInFiles()
Dim ShellFolder As Object
Dim ShellPath As String
Dim FileName As String
Dim FileNo As Integer
Dim Dummy As String
Dim BookNames As String
Dim OpenFlg As Boolean
Dim SearchSheetName As String
Dim i As Integer
Const XL_EXTENTION = "*.xls"
SearchSheetName = Application.InputBox("探すシート名を入力してください", Type:=2)
If SearchSheetName = "" Or SearchSheetName = "False" Then Exit Sub
Set ShellFolder = CreateObject("Shell.Application"). _
BrowseForFolder(0, "探すフォルダを選択してください", &H1, "c:\")
If Not ShellFolder Is Nothing Then
ShellPath = ShellFolder.Items.Item.Path
Else
Exit Sub
End If
Set ShellFolder = Nothing
FileName = Dir(ShellPath & "\" & XL_EXTENTION)
Do While FileName <> ""
FileNo = FreeFile()
On Error Resume Next
Open ShellPath & "\" & FileName For Binary Lock Read Write As #FileNo
Close #FileNo
If Err.Number = 0 Then
OpenFlg = True
End If
On Error GoTo 0
If OpenFlg Then
Dummy = ""
On Error Resume Next
Dummy = Application.ExecuteExcel4Macro("'" & ShellPath & "\[" & FileName & "]" & SearchSheetName & "'!R1C1")
If Err.Number = 0 Then
BookNames = BookNames & vbCrLf & FileName
i = i + 1
End If
On Error GoTo 0
End If
If i Mod 30 = 0 And i > 0 Then
If MsgBox("ヒット数が" & i & "個を越えましたが、継続しますか?", vbOKCancel) = vbCancel Then
Exit Do
End If
End If
FileName = Dir()
Loop
If Len(BookNames) > 1 Then
MsgBox SearchSheetName & "シートのあるブックは、以下のとおり" & vbCrLf & BookNames
Else
MsgBox SearchSheetName & "シートを含むブックは、見つかりませんでした。", vbInformation
End If
End Sub
.
この回答への補足
ご回答ありがとうございます。
最初の投稿で「スマート」という単語を使いましたが、深い意味はありません。
色々とお気を遣わせてしまったのであれば申し訳ないと思っております。
さて、ご回答いただきました内容ですが、これから検証をさせて頂きたいと思っております。とても期待の持てるご説明ですね。中には私の知らない表現も見受けられるので、勉強もさせて頂きたいと思います。
当方、多忙が続き、少し検証にお時間頂ければと思います。
貴重なお時間、ありがとうございます。
本日、プログラムの動作を確認させていただきました。
正しく、私の希望する内容そのものでした。
その他、フォルダを選択させるダイアログの出し方も判明し、大変勉強になりました。
今回は貴重なお時間を割いて対応して頂き、感謝しております。
またどうぞよろしくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Excel(エクセル) エクセル終了が遅くなった 7 2022/04/19 12:11
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでブックを非表示で開いて処...
-
エクセルの関数 ENTERを押...
-
エクセルで参照しているデータ...
-
エクセルを共有するとPCによっ...
-
フォルダ内の複数ファイルから...
-
エクセルの関数について教えて...
-
Excel(2010)のフィルターが保...
-
北九州市にあった「井筒屋ブッ...
-
リンク元ブックのPWが分からな...
-
アクセスvbaでエクセルブックを...
-
エクセルで開いていないbookの...
-
外部ブック参照が#REF!になって...
-
指定ファィルの指定シートをシ...
-
エクセルで「ディスクがいっぱ...
-
エクセルでウィンドウの枠固定...
-
フォルダ内の複数ブック・シー...
-
Excel起動時に特定のワークシー...
-
エクセルで別ブックをバックグ...
-
エクセルで50行ごとに区切った...
-
Excelでブックの共有を掛けると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
VBA バックグラウンドで別ブッ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルシートの一部を送りたい
-
エクセル2016です。「ブッ...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
複数ファイルから特定シートの...
おすすめ情報