質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2880閲覧

テキストファイルから欲しい文字列を抽出したいのですが、その処理がうまくできません。

pluto1024

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/03/18 06:12

編集2021/03/18 06:52

前提・実現したいこと

vbaでフォルダの中にある複数のログファイルから特定の文字を検索し、
その文字がある行をその文字からエクセルに書き出すというツールを作成していますが、特定の文字列を検索してエクセルに書き出すという処理が
上手くできません。

どなたかご教授いただけないでしょうか。
下記にコードを記載しますので
コードの下部あたりの【任意行の値を取得する】に
付け加えていただければと思います。
お手数ですがお願いいたします。

【以下詳細条件】
検索したい文字:UR

ログに記載されている行:・( 711,36 ): 2021/03/11 10:23:36.824[PC->]T0S1T1UR00571061DT0UI0003RP01PI1000000000PM山田 太郎

エクセルに書き出したい文字:UR00561059DT0UI0001RP01PI9999999999PM山田 太郎

該当のソースコード()

''''''''''''''''''フォルダ選択処理''''''''''''''''''' '指定フォルダの全テキストの任意行を取得 Sub GetAllTextData() 'フォルダ指定用のダイアログを表示 With Application.FileDialog(msoFileDialogFolderPicker) 'カレントディレクトリを指定 .InitialFileName = ThisWorkbook.Path '設定しなかったら終了 If .Show = False Then Exit Sub '設定したフォルダを表示 Dim Fname Fname = .SelectedItems(1) End With ''''''''''''''''''フォルダ選択処理完了''''''''''''''' ''''''''''''''''''ログファイル選択処理''''''''''''''''''' '参照設定 Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") Dim FilePath As Variant ReDim FilePath(1 To 100) As Variant '指定フォルダ内の.logファイルを探索 i = 0 For Each File In FSO.GetFolder(Fname).Files If InStr(File.Name, ".log") > 0 Then i = i + 1 FilePath(i) = File.Path 'ファイルのフルパスを取得 End If Next '配列の大きさは状況に応じ変更 '現コードは100テキストファイルを読み込む配列 Dim Hozon, GetData As Variant ReDim GetData(1 To 100, 1 To 100) As Variant '全テキストファイルの任意行のデータを取得 m = 0 For k = 1 To UBound(FilePath, 1) 'テキストファイルが存在する場合に実行 If IsEmpty(FilePath(k)) = False Then '保存する配列を空にする ReDim Hozon(1 To 100, 1 To 100) As Variant ''''''''''''''''''ログファイル選択処理完了''''''''''''''' ''''''''''''''''ログファイル内容保存処理''''''''''''''''' 'テキストを開いて配列にデータを保存 Open FilePath(k) For Input As #1 i = 0 'テキストをすべて取得 Do Until EOF(1) Line Input #1, buf i = i + 1 Close #1 ''''''''''''''''ログファイル内容保存処理完了''''''''''''' '▼取得したいデータに応じ変更してください '任意行の値を取得する End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yo_u

2021/03/18 06:38

検索したい文字が同じ行に2つ以上あるというケースは絶対ないのでしょうか。 それによって考え方とか、ルールとか変わるかなと。
pluto1024

2021/03/18 06:44

そのケースは設計上のルールとして原則ないものとしています。 よろしくお願いいたします。
yo_u

2021/03/18 06:53

であれば、jinojiさんの回答でよいかと思います。
guest

回答2

0

こんなのもあります。

vba

1Dim 欲しい文字列, 元の文字列 2欲しい文字列 = "UR" & Split(元の文字列,"UR")(1)

投稿2021/03/18 07:21

hatena19

総合スコア33759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pluto1024

2021/03/18 08:34

ありがとうございます! 参考にさせていただいたところ期待通りの文字列を抜き出せました。
guest

0

ベストアンサー

こうですかね。

VBA

1Dim 欲しい文字列, 元の文字列 2欲しい文字列 = Mid(元の文字列, InStr(元の文字列, "UR"))

投稿2021/03/18 06:36

jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pluto1024

2021/03/18 08:33

ありがとうございます! 参考にさせていただいたところ期待通りの文字列を抜き出せました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問