
No.6ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。Grep が使えるツールを使うのがベストだと思いますが、なぜ Office でないと
いけないのですか?
という疑問が残りますが...
Excel VBA です。コマンドプロンプト findstr の結果をシートに展開してます。
このマクロが書かれたブックと同一フォルダ内のテキストファイルが対象です。
findstr は簡単な(制限の多い)正規表現が使えるようです。
http://www.atmarkit.co.jp/fwin2k/win2ktips/511fi …
また、VBA ならテキスト全文を読み込んでから VbCrLf で Split して配列にし、
Filter 関数で該当行を抽出する方法でも良いかも。
テストはほとんどしてませんので、エラーがあったら済みません。
Option Explicit
Sub 簡易テキスト検索()
Dim objShell As Object
Dim FSO As Object
Dim TXT_STREAM As Object
Dim strKeywrd As String, strOutput As String
Dim strFolder As String, strComand As String
Dim Buffer As Variant
Const SEARCH_FILE = "*.txt"
strKeywrd = Application.Trim(InputBox("検索文字を入力します"))
If strKeywrd = Empty Then
Exit Sub
End If
Set objShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
' 一時ファイル名生成
strFolder = ThisWorkbook.Path & "\"
Do
strOutput = FSO.BuildPath(strFolder, FSO.GetTempName)
Loop Until strOutput <> ""
' コマンド生成
strComand = "findstr /r /c:" _
& Chr(34) & strKeywrd & Chr(34) _
& " " & Chr(34) & strFolder & SEARCH_FILE & Chr(34) _
& " > " & Chr(34) & strOutput & Chr(34)
' Debug.Print strComand
' コマンド実行
objShell.Run "%ComSpec% /c " & strComand, 0, True
' コマンド実行で出力されたテキストから読み取る
If FSO.FileExists(strOutput) Then
Set TXT_STREAM = FSO.OpenTextFile(strOutput)
' 該当なし、または65536以上だとエラーになるのでトラップ
On Error GoTo ERROR_HANDLER
Buffer = TXT_STREAM.ReadAll ' <--- Comand Prompt の結果を取得
' Excel に転記
Buffer = Split(Buffer, vbCrLf)
With ThisWorkbook.Worksheets.Add
.Range("A1").Resize(UBound(Buffer)).Value = _
Application.Transpose(Buffer)
End With
End If
TERMINATE:
TXT_STREAM.Close
Kill strOutput ' <----- 一時ファイル削除
Set TXT_STREAM = Nothing
Set FSO = Nothing
Set objShell = Nothing
Exit Sub
ERROR_HANDLER:
MsgBox "該当件数が多すぎるか、該当なし", vbInformation
Resume TERMINATE
End Sub
すばらしいです!Excelでやってみました。
Officeソフトでも、かまわなかったのですが、なにぶん素人さんに使ってもらうことになるので、officeなら、使えるかな。。と思った次第です。
KenKen_SPさんには、以前にもご協力いただきまして、今回もまた、ありがとうございました。助かります。
No.7
- 回答日時:
#6 ですが、訂正します。
TERMINATE:
TXT_STREAM.Close
Kill strOutput ' <----- 一時ファイル削除
このTERMINATE:ラベル以下2行の位置がよくないので、次の場所に変更します。
すみません。
Buffer = TXT_STREAM.ReadAll ' <--- Comand Prompt の結果を取得
TXT_STREAM.Close ' <----- ココに移動
Kill strOutput ' <----- ココに移動
' Excel に転記
Buffer = Split(Buffer, vbCrLf)
With ThisWorkbook.Worksheets.Add
.Range("A1").Resize(UBound(Buffer)).Value = _
Application.Transpose(Buffer)
End With

No.5
- 回答日時:
No2です。
とりあえず、ざっとした流れをVBAで書いてみました。 ちょっと時間がないので、詳しく書いていませんが少しでも参考になれば幸いです。strCheckが特定の文字列
strSourceが検索対象のパス及び、ファイル名
strResultが書き出す別ファイルになります。
Private Sub コマンド0_Click()
Dim strText As String
Dim strCheck As String
Dim strSource As String
Dim strResult As String
strCheck = "foobar"
strSource = "C:\Program Files\Test\testfile.txt"
strResult = "C:\Program Files\Test\output.txt"
'Kill strResult
'killの行は、ファイル消して作り直すためにあります
Open strSource For Input As #1
Open strResult For Append As #2
Do While Not EOF(1)
Line Input #1, strText
If InStr(strText, strCheck) <> 0 Then
Print #2, strText
End If
Loop
Close #1
Close #2
End Sub
お忙しい中、おそれいります。
WORDで試してみたところ、うまくできました!
あとはこれを、GUIでファイル選択や、文字列入力などができれば、最高なのですが。。
またお時間ありましたら、お願いいたします。
ありがとうございました。
No.4
- 回答日時:
こんにちわ
以下のようなフリーソフトがあります。
PDFも検索可能ですよ。
http://ohju.cside4.jp/software/kwisp/index.html
参考URL:http://ohju.cside4.jp/software/kwisp/index.html
No.1
- 回答日時:
秀丸などの、テキストエディタの機能で「grepの実行」が近いかも
しれません。
キーワードを含む行を抽出できますので、それをファイルに保存すれば
いいでしょう。自動化するのであれば、それをuwscなどのキー操作自動化ツールに組み込めば可能です。
もしくは、フリーソフトで、「grep」で検索すれば、お望みのようなツールが入手できるかもしれません。
または、Excelなどのマクロでプログラムする方法もありますが、それなりの知識が必要です。
秀丸は持っていますので、grepでやってみました
あとは、この操作を自動化できれば、望みどおりのものができます。
grepでググって見ようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- フリーソフト テキストファイル内を検索したい 1 2022/06/01 08:33
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- 画像編集・動画編集・音楽編集 inkscapeで作成した図の保存の仕方とその保存したファイルの編集の仕方 1 2022/09/22 09:33
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAで、ある指定した文字を含む行だけを選択したいのですが、、 例えば、1〜20行目までに"2312352"
Excel(エクセル)
-
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
エクセルVBA C列に特定の文字列を含む行のみを抽出し、一つのExcelにまとめたい。
Excel(エクセル)
-
-
4
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
5
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
6
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
7
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
8
ExcelVBA テキストファイルから特定行を抽出し、エクセルファイルのテキストボックスに張り付ける
その他(コンピューター・テクノロジー)
-
9
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
10
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
11
テキストファイル内の文字列検索
Windows Vista・XP
-
12
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
13
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
14
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
15
条件にマッチする行を抽出するVBAを教えてください
経営情報システム
-
16
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
17
ApplicationとWorksheetFunctionの違い
Visual Basic(VBA)
-
18
テキストファイルの途中行から読み込む方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ある文字列を含む行の抽出
-
iniファイルとの比較(iniファイ...
-
BCPユーティリティの使用法_...
-
VBのファイル処理について
-
VBAで新しい日付順にファイルを...
-
VBAでPowerPointからExcelにデ...
-
Excel.VBA テキストファイルを...
-
C#でのファイル編集と上書き保...
-
特定フォルダ内のテキストファ...
-
CFile Openで開いたファイルに...
-
ExcelVBAで以下のマクロを作成...
-
時間短縮のために、テキストフ...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
[teraterm] waitコマンドで停止...
-
VBAでワークシートを引数として...
-
バッチファイル 文字列にスペ...
-
バッチ処理でファイルの中身を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ある文字列を含む行の抽出
-
特定フォルダ内のテキストファ...
-
VBAでPowerPointからExcelにデ...
-
VB6側からテキストファイルをク...
-
BCPユーティリティの使用法_...
-
Excel.VBA テキストファイルを...
-
unicode文字列(日本語)のファイ...
-
テキストファイルの行頭に文字...
-
access vbaでCSVファイルを文...
-
複数行の文字列を変数として使...
-
バッチでiniファイルの編集
-
excelにテキストファイルの指定...
-
RandomとBinaryモードの違い
-
時間短縮のために、テキストフ...
-
テキストファイルを直接置換す...
-
VB.NETでテキストファイルからH...
-
C#でのファイル編集と上書き保...
-
ExcelVBAで以下のマクロを作成...
-
VBSを用いてIPアドレスを取得し...
-
VBAで新しい日付順にファイルを...
おすすめ情報