
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAで、ある指定した文字を含む行だけを選択したいのですが、、 例えば、1〜20行目までに"2312352"
Excel(エクセル)
-
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
-
4
条件にマッチする行を抽出するVBAを教えてください
経営情報システム
-
5
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
6
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
7
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
8
エクセルVBA C列に特定の文字列を含む行のみを抽出し、一つのExcelにまとめたい。
Excel(エクセル)
-
9
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
10
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
11
ExcelVBA テキストファイルから特定行を抽出し、エクセルファイルのテキストボックスに張り付ける
その他(コンピューター・テクノロジー)
-
12
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
13
【excelVBA】Findメソッドで検索対象を複数列
Excel(エクセル)
-
14
EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法
Visual Basic(VBA)
-
15
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
16
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
17
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
18
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
19
複数のマクロボタンをまとめて一つのマクロボタンにするということ。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定フォルダ内のテキストファ...
-
VBAで新しい日付順にファイルを...
-
アンケート結果をcsv出力できる...
-
コマンドプロンプトの「%1」と...
-
エクセルのVBAについて とある...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
「win11-23H2」を「win11-24H2...
-
バッチでテキストファイルから...
-
Thunderbirdで社内共有フォルダ...
-
チームズのチャット画面にファ...
-
#include <Windows.h>というヘ...
-
[teraterm] waitコマンドで停止...
-
アクセス 壊れた? 「ファイ...
-
EXCELをバッチコマンドで...
-
xcopyで特定のファイルのみをコ...
-
バッチファイル 文字列にスペ...
-
「営業秘密の漏洩」について
-
ExcelのVBAが特定のPC上でのみ...
-
exeファイルを実行するとコマン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelにテキストファイルの指定...
-
Excel.VBA テキストファイルを...
-
特定フォルダ内のテキストファ...
-
テキストファイルを読み込んで...
-
BCPユーティリティの使用法_...
-
VBAで新しい日付順にファイルを...
-
ある文字列を含む行の抽出
-
複数行の文字列を変数として使...
-
VBAでPowerPointからExcelにデ...
-
アンケート結果をcsv出力できる...
-
テキストファイルを直接置換す...
-
VBSを用いてIPアドレスを取得し...
-
VBAでテキストの一部の文字を書...
-
秀丸の正規表現
-
テキストファイルの行頭に文字...
-
unicode文字列(日本語)のファイ...
-
ExcelVBAで以下のマクロを作成...
-
access vbaでCSVファイルを文...
-
VBAで任意のフォルダ内のファイ...
-
VB6側からテキストファイルをク...
おすすめ情報