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

ログファイルのようなテキストファイルの中から、条件を指定してEXCELに抽出することは可能でしょうか。
まず、test.txtというファイルがあります。
中身は

読み込み開始
日付xxxxxxxxx
仕様xxxxxxxxx
エラーxxxxxxxx
TAGxxxxxxxxxx
IDxxxxxxxxxxx

読み込み開始
日時xxxxxxxxx
仕様xxxxxxxxx
TAGxxxxxxxx
IDxxxxxxxxxx

読み込み開始
日付xxxxxxxx
仕様xxxxxxxx
エラーxxxxxxx
TAGxxxxxxxx
IDxxxxxxxxxx




以上のようなテキストファイルから読み込み開始からIDまでを一区切りとして、EXCELのA列にID、B列にエラーを抽出し、エラーが無い場合はセルの中を空欄にするようにし、数千行を処理したいです。VBAで対応したいです。
良い方法がありましたらご教示いただければ幸いです。

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

  • 返答ありがとうございます。
    「読み込み開始」という文字列が実際にあります。
    内容説明の為に簡易的にしましたが、実際は通常読み込みが正常の時は「読み込み開始」行からID行まで、他に数十行文字列があり、エラーが表示された時の区画は「読み込み開始」からID行まで3行程度の表示になります。ですので、テキストを順に読んでいくだけだと表示がバラバラになってしまうと思っています。
    説明が上手くなくてすみません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/08/09 15:17

A 回答 (4件)

No3です



横からですが、No2様のコードが動かないとも思えないので・・

>上記コードでは上手く動作しませんでした。
のような二者択一的な情報だけでは進展しないと思いますが、ありそうなのは文字コードが違っているとか。

試しに、エクセルから直接テキストファイルを開いてみたときに、A列にご質問のような形でテキストの内容が読み込めるのでしょうか?
    • good
    • 0

No1です。



>テキストを順に読んでいくだけだと表示がバラバラになってしまうと思っています。
何も処理をせずに文字通り読み込だままを吐き出せばそうなっちゃいますけれど、読込みながらご質問のような処理を行えばよいのでは?

読みながら処理をするのが複雑に感じるのであれば、簡単な方法として以下のような方法もあります。
(いずれにしろ、テキストファイルを一度は全部読むので、速度等に大きな違いは無いものと推測します)
1)まず、OpenTextメソッドでテキストファイルを(文字通り)そのまま読み込みます。
 (新しいブックのA列に質問文にご提示のような形で読み込まれます)
2)そのシートを元データとして、なさりたいように編集しながら目的のシートに記入してゆき
3)処理が終わったら、元データのブックは保存せずに閉してしまう。

2)~3)は普通に「セルの値の参照と条件分岐処理」を含むループで実現可能と思います。
1)に関しては、以下を参照なさればよろしいかと。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/a …

動作が確認できたなら、ScreenUpdating = False で処理するようにすれば、処理中の画面が見えることは無くなりますし、全体の速度も向上するはずです。
    • good
    • 0

こんな感じで如何でしょうか。


アクティヴなシートの1行目から結果を表示するはずです。

※テキストファイルの文字コードがS-JISという前提です。

Sub test()
  Dim buf As String
  Dim id As String
  Dim er As String
  Dim row As Long
  
  row = 0 ' 1行目から結果を出力
  Open "C:\○○\test.txt" For Input As #1 ' 実際のファイル場所を記述
  Do Until EOF(1)
    Line Input #1, buf
    Select Case True
    Case (Left(buf, 6) = "読み込み開始")
      row = row + 1
      id = ""
      er = ""
    Case (Left(buf, 3) = "エラー")
      er = Mid(buf, 4)
    Case (Left(buf, 2) = "ID")
      id = Mid(buf, 3)
      Cells(row, 1).Value = id
      Cells(row, 2).Value = er
    End Select
  Loop
  Close #1
End Sub
    • good
    • 0
この回答へのお礼

返答ありがとうございます。
上記コードでは上手く動作しませんでした。
もう少し勉強してみます。

お礼日時:2018/08/11 14:29

こんにちは



>良い方法がありましたらご教示いただければ幸いです。
普通にテキストファイルを読んでいって、順に処理すればよさそうに思いますが・・・

フォーマットがいまいち確信を持てませんが、「読み込み開始」とある行には、実際に「読み込み開始」というテキストがあるということでしょうか?
また、空白行も存在するということでしょうか?

とりあえず、テキストファイルを読み込んで処理する例を以下に挙げておきます。
(CSVファイル等の例が多いので、そのままというわけにはいきませんが…)
まぁ、一旦、シートに書き出してからシート上で処理するという方法もありますけれど
http://officetanaka.net/excel/vba/file/file08b.htm
https://www.excel-prog.com/entry/2018/01/23/204018
この回答への補足あり
    • good
    • 0

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