好きなおでんの具材ドラフト会議しましょう

エクセル2010.VBAで
開いているテキストファイルが複数あるとして、
それらの中に、
任意のテキストファイル名が含まれているかどうかを
調べるにはどうしたらいいですか?

たとえば、エクセルワークシートなら

  For Each s In ActiveWorkbook.Worksheets

という感じで網羅的に調べられますが、
テキストファイルの場合はどうしたらいいのでしょうか?

A 回答 (3件)

こんにちは。



>すでにエクセルがopenしているテキストファイルをあらためてエクセルでopenしようとしたら、「開いています。閉じてから実行してください」と警告を出すプログラムが必要です。

Excelでオープンしているということですね。それが分かりませんでした。
普通に、Excelのメニューから「ファイルを『開く』」で、テキストファイルを選択し、そのまま実行し、テキストファイルを開こうとすれば、「テキストウィザード」が出てくるはずです。

既にテキストファイルを開いた状態で、再度開こうとしても、テキストファイルままでは、再度、読み込まれるだけで、二重に開くことは出来ないようです。

仮に、テキストファイルが編集中でしたら、以下のようなダイアログが出てきます。
  ---------------------------------------------------------
  ****.txtは、既に開いています。2重に開くと、これまでの変更内容は破棄されます。
  ****.txt を開きますか? はい(Y), いいえ(N)
  ---------------------------------------------------------

その時に、「いいえ」選択すれば、再度開くことは防止されます。
今のところ、Excel 2010は手元にありませんが、仕様としては同じはずです。
    • good
    • 0
この回答へのお礼

分かりました。ありがとうございます。

お礼日時:2013/12/08 11:55

こんばんは。



>「杏果物.txt」という名前のファイルがあったとして、このファイルが現在openしているのかcloseしているのかを知りたかったのです。

Textファイルは、別に開いていても、ソフトウェアで排他的モードで開いているのかどうかの問題で、エラーそのものはソフトウェアに依存するはずだと思いましたが……。それは、なんのソフトウェアを使っているかによっても違うはずです。

>openしているファイルをopenするよう指示したらエラーになりますから「閉じてください」と表示してプログラム終了。そして、closeしているならopenして中身をシートに読み出すというプログラムです。

Textファイルに対してという意味ですよね。念のために、今、調べてみしたが、例えば、テキスト・エディタで開いているテキストファイルは、別途Openしてみても、エラーは出ませんね。

もちろん、開いているファイル名を調べることは可能ですが、それを、排他的に開いているプログラムのハンドルを取得し、そのプログラムを閉じるという作業になるはずです。しかし、今までよりも、ずっと複雑なコードになると思います。もしかしたら、それはExcel上の話ということでしょうか?しかし、排他モードということは、他人が開いているという意味になるはずですが、それ自体は、Openは回避するだけで、強制Closeは不可能だったと思います。

もう少し、詳しく説明をお願いします。
    • good
    • 0
この回答へのお礼

すでにopenしているテキストファイルをあらためてopenしてもエラーにはならないのですね。勉強になりました。
エクセルVBAで株の分析を行い、各社に1ずつのテキストファイルを対応させて、そこに分析データを保存したり、逆に、保存してあったデータをエクセルシートに読み込んで分析し直したりします。
完成したら第三者に配布するので、エラーが出てプログラムが途中で止まるのがいやだったのです。(私だけが使うならエラーが出てもいいのですが)
しかし、エラーが出ないとなると、データを保存するテキストファイルの二重編集を防止できれば充分です。
すでにエクセルがopenしているテキストファイルをあらためてエクセルでopenしようとしたら、「開いています。閉じてから実行してください」と警告を出すプログラムが必要です。
どういうアプローチにしたらいいのか分からず手詰まっています。

お礼日時:2013/11/25 08:00

こんばんは。



なぜ、VBAを使わなくてはならないのでしょうか?
一般のツールを外部からインストールしてはいけないのでしょうか?

出来ないとは言いませんが、面倒だと思います。

JGREP(Windows用)は、便利だと思います。
ただし、標準が、JISになっているので、[文字コードを自動判別する]にチェックをいれないといけません。

JGREP2.05
http://www.vector.co.jp/soft/win95/util/se174779 …

スクリーンショット
http://www.hi-ho.ne.jp/jun_miura/jgrep.htm

上記よりも、劣るものですが、考えてみました。

'//
Sub TextSearch_Macro()
 Dim myDirs() As Variant
 Dim i As Long, j As Long, k As Long
 Dim myFName As String
 Dim TextLine As String
 Dim f As Long
 '--------検索ディレクトリ-----
 Const MYPATH As String = "C:\Users\[XXXX]\My Documents\Text\"
 '--------検索語------------
 Const SRCH As String = "杏果"
 '---------------------------
 myFName = Dir(MYPATH & "*.txt")
 Do While myFName <> ""
  ReDim Preserve myDirs(i)
  myDirs(i) = myFName
  myFName = Dir()
  i = i + 1
  If i > 10000 Then '検索数リミット
   Exit Do
  End If
 Loop
 For j = 0 To UBound(myDirs)
  f = FreeFile()
  Open MYPATH & myDirs(j) For Input As #f
  Do While Not EOF(f)
   Line Input #f, TextLine
   If InStr(1, TextLine, SRCH, vbTextCompare) > 0 Then
    k = k + 1
    Cells(k, 1).Value = myDirs(j)
    Exit Do
   Else
    TextLine = StrConv(TextLine, vbFromUnicode) 'Unicode 対策
    If InStr(1, TextLine, SRCH, vbTextCompare) > 0 Then
     k = k + 1
     Cells(k, 1).Value = myDirs(j)
     Exit Do
    End If
   End If
  Loop
  Close #f
 Next j
 If j = 0 Then
  MsgBox SRCH & "は見つかりませんでした。", vbInformation
 End If
End Sub
'//
    • good
    • 0
この回答へのお礼

全てのテキストファイルの中身を全部検索して、任意の語句が含まれるテキストファイル名を返すプログラムですね。
大変勉強になりました。
言葉足らずでしたが、やりたいと思っていたのは、
たとえば「杏果物.txt」という名前のファイルがあったとして、このファイルが現在openしているのかcloseしているのかを知りたかったのです。
openしているファイルをopenするよう指示したらエラーになりますから「閉じてください」と表示してプログラム終了。そして、closeしているならopenして中身をシートに読み出すというプログラムです。
どういうプログラムにすると、任意の名前のテキストファイルがopenしているかcloseしているか分かるでしょうか?

お礼日時:2013/11/24 21:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報