- ベストアンサー
テキストから文字列の抽出法
テキストから文字列を抽出して、比較したいのですが、良いアプリケーションをご存じないでしょうか? 具体的には2つの異なるフォーマットのファイルがあり、それぞれに(同一の文字列かどうか)比較したい文字列は1行ずつソートされた形で含まれています。しかしその同じ行に時刻などの付加情報が含まれているため、行単位で比較することができないのです(行単位で比較できるアプリは知っています)。 文字列とはファイル名ですので、*.* の形で指定して、抽出できればと思うのですが... もしご存知の方がいらっしゃいましたら、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エクセルのマクロで可能です。 下にあるものをエクセルにセットします。 1.エクセルを開きます。 2.ツール-マクロ-新しいマクロの記録 を選びます。 3.メーセージをOK 4.表示された四角いボタンをクリック 5.消えたら、ツール-マクロ-マクロ を選びます。 6.Macro1を選んで、編集をクリック 7.下のものが表示されたら、全て消去 Sub Macro1() この上から、この下まで End Sub 8.ここへ下のものを貼付ける 9.エクセルに戻ってツール-マクロ-マクロ を選びます。 10.中にある「テキスト検索比較」 を選んで、実行 以上で準備完了です。 中身についてですが 1.検索する文字を指定します。 2.2つのファイルのうち1つ目を指定 3.2つ目を指定 4.検索結果を表示して終了 というものです。 結果は、ある時はその場所、無ければ0です。 text.txtを探したい時はそのまま入力 *.txtのようにワイルドカードは使えません。 .txtと指定してください。 2ファイルまでです。 開いた2ファイルを閉じても良ければ 処理を追加します。今は閉じません。 続けて処理する場合は2ファイルを 閉じてからにしてください。 (一番上の手順9からです。) (もっと簡単にもなります。) 機能追加でディレクトリにある 全てのファイルを一括検査することは可能です。 その他要望があれば。 使ってみておかしいところなどあればそちらも。 この下をコピーしてください。 Sub テキスト検索比較() Dim ファイル名1 As String, filenum As Integer, _ 現在行 As Integer, 現在列 As Integer, _ 最終行 As Integer, I As Integer, _ 現在行退避 As Integer, 比較結果2 As Variant, _ 比較結果3 As Variant 比較文字 = InputBox("比較する文字を入力してください。", "比較する文字", "") ファイル名1 = Application.GetOpenFilename(filefilter:="テキスト,*.txt") ファイル名2 = Application.GetOpenFilename(filefilter:="テキスト,*.txt") Workbooks.OpenText FileName:=ファイル名1, StartRow:=1, DataType:= _ xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=True, Semicolon:=False, Comma:=False, _ Space:=False, Other:=False _ , FieldInfo:=Array(1, 1) Workbooks.OpenText FileName:=ファイル名2, StartRow:=1, DataType:= _ xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=True, Semicolon:=False, Comma:=False, _ Space:=False, Other:=False _ , FieldInfo:=Array(1, 1) Windows(1).Activate Range("A1").Select 現在行 = ActiveCell.Row 現在列 = ActiveCell.Column 最終行 = ActiveCell.SpecialCells(xlLastCell).Row 最終列 = ActiveCell.SpecialCells(xlLastCell).Column For I = 現在行 To 最終行 For I2 = 現在列 To 最終列 比較結果1 = InStrB(Cells(I, I2), 比較文字) If 比較結果1 > 0 Then 比較結果1 = I2 & "列" & I & "行目" I2 = 最終列 I = 最終行 End If Next 現在列 = 1 Next Windows(2).Activate Range("A1").Select 現在行 = ActiveCell.Row 現在列 = ActiveCell.Column 最終行 = ActiveCell.SpecialCells(xlLastCell).Row 最終列 = ActiveCell.SpecialCells(xlLastCell).Column For I = 現在行 To 最終行 For I2 = 現在列 To 最終列 比較結果2 = InStrB(Cells(I, I2), 比較文字) If 比較結果2 > 0 Then 比較結果2 = I2 & "列" & I & "行目" I2 = 最終列 I = 最終行 End If Next 現在列 = 1 Next MsgBox "ファイル1は: " & 比較結果2 & " ファイル2は: " & 比較結果1 End Sub
その他の回答 (1)
- kenken0001
- ベストアンサー率69% (51/73)
2つのファイルの形式は何ですか。 .xls .doc .txt .csv .html は比較可能です。 MS-Excelです。 他、エクセルで読み取り可能なもの。 OSやバージョンなども 教えていただければ何か分かることもあるかもしれません。 同じ文字(ファイル名)が、比較する互いのファイルに 含まれているか?が分かればいいのでしょうか。 (回答は、「含む」「含まない」) 処理内容も教えてもらえますか。
補足
はい、ファイル形式は 2 つとも txt です。 おっしゃられるように、同じ文字(ファイル名)が、 比較する互いのファイルに含まれているか?を知 りたいのです。 2 つのファイルが A, B とすると、 ・ A にしか含まれない ・ B にしか含まれない ・ A, B 共に含む を得たいのです。 私は Excel の知識は全くないのですが、簡単に実 現できるのでしょうか? よろしくお願いします。