dポイントプレゼントキャンペーン実施中!

エクセルVBAで指定したテキストファイルを開いて特定のキーワード(ツール本体に設定してあり複数有)があるかチェックする方法。
キーワードの書かれている行や桁位置はテキストファイルによって異なり位置は決まっていません。
1件でも有った場合ツールにキーワードの値を別シートに書き込み、なかった場合はテキストを閉じて次のテキストファイルをチェックするものを作成したいです。

アドバイス宜しくお願いします。

質問者からの補足コメント

  • 2014itochan さん有難うございます。
    Word Document オブジェクトは組み込んだことがないので出来れば下記のようなやり方でやりたいです。いい方法があれば教えて下さい。

    例 キーワード1 ”ABC001” ワイルドカードでさがす
      キーワード2 ”ABC002” ワイルドカードでさがす
    Open "ファイル名" For Input As #1 でファイルを開き
     キーワード1がテキストファイルにあるかチェック
     <有の場合> 有りとエクセルに記入してファイルを閉じて次のファイルを読み込む
     <無の場合> キーワード2があるかチェック
           <有の場合> 有りとエクセルに記入してファイルを閉じて次のファイルを読み込む
           <無の場合> 無しとエクセルに記入してファイルを閉じて次のファイルを読み込む

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/06/11 02:32
  • 有難う御座います。情報不足でしたね。
    1.変数で”INPASS”と設定してます。
    2.シート名"結果"B列の2行目移行記載。
      例    A列    B列
       1行目 管理番号  プログラム名
       2行目 △     PRG00001
       3行目 △      PRG00002
    3.シフトJISです。
    4.テキストの中身の例。
      ***************************
      * 修正履歴:XXX001   1/10 *
      *  XXX002   3/10 *
      *   (ABC002)  5/10 *
      ***************************
    01 XXXXX.
    05 XXXXX PIX(10).

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/06/11 17:49
  • 続き
    5.メインシートのB列で設定され、2行目以降から記載。
      例     B列
        1行目 管理番号
        2行目 ABC001
        3行目 ABC002
        4行目 △
    6.キーワードの数は変動しますが、最低1個あって次の行が△なら以降キーワード無。
    7.シート名"結果"のA列の2行目にヒットしたキーワードを転記します。
     例    PRG00001読み込み後の結果
           A列     B列
        1行目 管理番号  プログラム名
        2行目 ABC002  PRG00001
        3行目 △     PRG00002
     
     対象のプログラムを開いた後にチェックしてヒットした管理番号を転記するのが上手くいきません。
     アドバイス宜しくお願いします。

      補足日時:2017/06/11 17:53

A 回答 (4件)

>補足:2017/06/11 17:53



その補足説明でも、余計に疑問が増えて、とてもマクロにはならないと思います。

>1.変数で”INPASS”と設定してます。
コードはあるのですか?

>RG00001読み込み後の結果
別の質問で、Excelファイル(.xls)と言った人が、結果的には、拡張子ナシで取り扱っていたのと同じような気がします。そもそも、RG00001て何?プログラム名は、ファイルなのですか?

>チェックしてヒットした管理番号を転記するのが上手くいきません。

管理番号とか、プログラム名とか、読み手側では分からないのです。
何を対象として、どこにあるものなのかとか、補足説明が、逆に混乱させられてしまうのです。前提のない人に、説明するには無理があります。

私からすれば、要は、ファイルの中の、二つの番号を検索すればよいのでは?
検索するなら、1行目とか2行目とか関係ありませんし、行数が必要なら、少し手を加えれば済みます。
その検索値を「キーワード」と呼んでいるようですが、最初の質問とは整合性が合いません。

>例 キーワード1 ”ABC001” ワイルドカードでさがす
>  キーワード2 ”ABC002” ワイルドカードでさがす
>Open "ファイル名" For Input As #1 でファイルを開き

そもそも、ファイル群のそれぞれのファイルを、Dir 関数で取って一覧にして、そこで二つのキーワードがあれば、ありとするなら、Open For Input も必要ないと思います。
TextStream で、ファイルの中身を取得して、検索を二回すれば済む話です。

方法を指定するなら、ご自身でネットで検索して開発すればできると思います。それならそれで、みなさんがアドバイスしてくれるはずです。#3さんの書いている内容と、私が思惑とは、違っています。

しかし、今の状態では、こちらの思惑のまま進めたほうが良いように思います。それは、やぶ蛇になる可能性がありますが。

たぶん、解答にはなっていないかとは思いますが、サンプルとして掲げておきます。意味は、分かるはずです。

'//標準モジュール
Sub CheckFilesInside()
Dim FName As String
Dim WShell As Object
Dim myPath As String
Dim s1 As String, s2 As String
Dim objFS As Object
Dim objText As Object
Dim i As Long, j As Long, x As Long
Dim buf
Const ForReading = 1
Const TriStateTrue = -1

ActiveSheet.Range("A1").CurrentRegion.ClearContents
Set WShell = CreateObject("Wscript.Shell")
myPath = WShell.SpecialFolders("MyDocuments") & "\Text\"
s1 = "ABC001"  '検索値1
s2 = "ABC002"  '検索値2
Set objFS = CreateObject("Scripting.FilesystemObject")
ActiveSheet.Range("A1:C1").Value = Array("ファイル名", s1, s2)
x = 2
FName = Dir(myPath & "*.txt", vbNormal)  'ファイル名
Do While FName <> ""
  If FName <> "." And FName <> ".." Then
  'SJISの場合
  Set objText = objFS.OpenTextFile(myPath & FName)
  ''Unicodeの場合
  ''Set objText = objFS.OpenTextFile(myPath & FName, ForReading, False, TriStateTrue)
   ActiveSheet.Cells(x, 1).Value = FName
   buf = objText.ReadAll
   i = InStr(1, buf, s1, vbTextCompare)
   j = InStr(1, buf, s2, vbTextCompare)
   If i > 0 Then
    ActiveSheet.Cells(x, 2).Value = "●"
   End If
   If j > 0 Then
    ActiveSheet.Cells(x, 3).Value = "●"
   End If
  End If
  x = x + 1
  buf = "": i = 0: j = 0
  FName = Dir
Loop
End Sub
    • good
    • 0
この回答へのお礼

参考にしたいと思います。有難うございます。
今後、質問するときも聞き手にわかりやすいように具体的な内容や目的を伝わるように記載したいと思います。

お礼日時:2017/06/11 23:09

私が回答できる訳ではありませんが、もし私がそのようなマクロを作ってほしいなら、


1.テキストファイルの格納されている箇所(1つのフォルダ内なのか、いろいろ分かれているのか等)
2.テキストファイルのファイル名
3.テキストファイルの文字コード(シフトJISかどうか)
4.テキストファイルに書かれている内容のサンプル

5.キーワードが書かれているシート名はなにか、キーワードはExcelの何行目の何列に書かれているのか。
6.キーワードの数はいくつあるのか。
7.結果を別シートにどのように格納するのか。別シートのシート名は何か。

等の情報を提供します。今のままでは、漠然とした要求なので、No1,No2の方のような一般論の回答だけしか得られないかと。
この回答への補足あり
    • good
    • 2
この回答へのお礼

内容がアバウト過ぎましたね。アドバイス有難う御座います。
補足内容を記載しました。よろしくお願いします。

お礼日時:2017/06/11 18:13

テキストファイルの構造が不明なので


一般的なファイルの開き方
http://officetanaka.net/excel/vba/file/file08.htm

と、読んだファイルを セルに落とす
http://officetanaka.net/excel/vba/file/file08b.htm

セルの検索
http://qiita.com/rohinomiya/items/24c89984206d7e …

http://www.moug.net/tech/exopr/0090052.html

http://www.tipsfound.com/excel/02104

ひとつのファイルに対して手順が出来たら DO-LOOPで EOFまで回すだけ
    • good
    • 2
この回答へのお礼

有難うございます。

お礼日時:2017/06/11 18:14

レスが付かないので


基本、VBAから WORDを 起こして、オブジェクトを操作することになります。

オブジェクトの宣言
ワードを開く
終わるまでのループに入る
テキストファイルの読み込む
ワードオブジェクトのテキストから 目的のキーワードを探す
一致すれば・・・・
しなければ・・・・
検索キーワードが終われば・・・アウト
ループに戻る
オブジェクトの終了

こんな感じ


Word Document オブジェクト
https://msdn.microsoft.com/ja-jp/library/aa28862 …

方法 : Word 文書でテキストを検索する
https://msdn.microsoft.com/ja-jp/library/aa28900 …
この回答への補足あり
    • good
    • 1

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