いつもお世話になっております。sako77です。
今回は置換?について質問させていただきます。
ファイルA(テキストファイル)に以下のような文章があります。
例)
おはようございます。今日も●●●です。こんにちは。今日も◆◆◆◆です。おやすみ今日も■■です。・・・
上記のようなテキスト文章から「今日も」から「です」の間の文字列を抽出し、別テキストファイルBに
●●●●
◆◆◆◆
■■
のように出力したいのですが、こんなことはできるのでしょうか?
エクセルかアクセス又はこんなことができるソフトがあれば教えてください。
よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
A No.1です。
subMatchが何個まで対応できるか気になったので、長いテキストで試験してみましたが、その際、このケースではsubMatchは常に1個だけである事に気付きました。今回、沢山できるのはMatchの方で、500個位あっても動作しました。下記は、テキストファイルを読む、修正版です。
Sub test2()
Dim regEX As Variant
Dim Matches As Variant
Dim match As Variant
Dim matchString As String
Dim targetString As String
Dim subMatch As Object
targetString = readTextFile("C:\Documents and Settings\??????\My Documents\hoge.txt")
matchString = "今日も([^。]*)です。"
Set regEX = CreateObject("VBScript.RegExp")
regEX.MultiLine = True
regEX.Pattern = matchString
regEX.ignorecase = True
regEX.Global = True
Set Matches = regEX.Execute(targetString)
For Each match In Matches
If match.submatches.Count > 0 Then
Debug.Print match.submatches.Item(0)
End If
Next match
Set Matches = Nothing
Set regEX = Nothing
End Sub
Private Function readTextFile(fileName As String) As String
Dim FSO As Object
Dim buf As String
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.getfile(fileName).OpenAsTextStream
buf = .ReadAll
readTextFile = buf
.Close
End With
Set FSO = Nothing
End Function
No.4
- 回答日時:
こんばんは。
すでに回答は出ていますが、こんな風な感じにしてみたらいかがでしょうか。なお、Excel2000などの下位バージョンでは、この方法は、処理行が大量の場合は、うまく行かないことがあります。
実際、
>エクセルかアクセス又はこんなことができるソフトがあれば教えてください。
テキスト -> テキストで、あえて、ExcelなどのVBAを使う必要性はないようには思います。
VBScript でも可能です。
なお、「今日もxxxx axxaxです。」の xxxx axxax は、抜き出せても、
「今日もxxxx axxaxです」は、抜き出せないようなパターンになっています。出力側が予め決められていて、アペンドモードになっています。入力側は、このマクロではダイアログ選択になっています。
--------------------------------------
Sub RegExpTest()
Dim Matches As Object 'MatchCollection
Dim Match As Object 'Match
Dim FileName As String
Dim TextLine As String
Dim buf As String
Dim inFno As Integer
Dim outFno As Integer
Dim outFname As String
'出力用ファイル名(要設定--質問中のテキストファイルB)
outFname = Application.DefaultFilePath & "\" & "OutTest.Txt"
If Dir(outFname) = "" Then
MsgBox outFname & vbCrLf & "出力ファイルがありません。", 48
Exit Sub
End If
'検索用ファイル(質問中のテキストファイルA)
FileName = Application.Application.GetOpenFilename _
("テキストファイル(*.txt),*.txt")
If FileName = "False" Then Exit Sub
If StrComp(FileName, outFname, 1) = 0 Then
MsgBox "出力ファイルは選べません。", 48
Exit Sub
End If
With CreateObject("VBScript.RegExp")
.Pattern = "今日も([^(です)]+)です。"
.Global = True
inFno = FreeFile()
Open FileName For Input As #inFno
Do While Not EOF(inFno)
Line Input #inFno, TextLine
If .Test(TextLine) Then
Set Matches = .Execute(TextLine)
For Each Match In Matches
buf = buf & vbCrLf & .Replace(Match, "$1")
Next
End If
Loop
Close #inFno
buf = Mid$(buf, 3)
outFno = FreeFile()
If Len(buf) > 1 Then
Open outFname For Append As #outFno
Print #outFno, buf
Close #outFno
Beep
End If
End With
End Sub
No.2
- 回答日時:
正規表現の練習問題みたいな感じですね。
テキスト編集で、丁度、同じような例題が以下にありましたので、参考にしてください。
(もちろん、エクセルやアクセスのVBAでも可能です。)
http://ukiya.sakura.ne.jp/index.php?%E6%AD%A3%E8 …
No.1
- 回答日時:
エクセルVBAの事例です。
(アクセスでも動くと思います)正規表現を使っています。もっとスマートなマッチングの仕方がありそうに思いますが、とりあえず出来たという事で回答とします。
テキストファイルへの出力はご自分でなさって下さい。FileSystemObjectを用いる事例を参考urlに記しました。
Sub test()
Dim regEX As Variant
Dim Matches As Variant
Dim match As Variant
Dim matchString As String
Dim targetString As String
Dim subMatch As Object
Dim i As Long
targetString = "おはようございます。今日も●●●です。こんにちは。今日も◆◆◆◆です。おやすみ今日も■■です。・・・"
matchString = "今日も([^。]*)です。"
Set regEX = CreateObject("VBScript.RegExp")
regEX.MultiLine = True
regEX.Pattern = matchString
regEX.ignorecase = True
regEX.Global = True
Set Matches = regEX.Execute(targetString)
i = 1
For Each match In Matches
If match.submatches.Count > 0 Then
For i = 0 To match.submatches.Count - 1
Debug.Print match.submatches.Item(i)
Next i
End If
Next match
Set Matches = Nothing
Set regEX = Nothing
End Sub
詳細は VBA 正規表現 で検索してください。
参考URL:http://officetanaka.net/excel/vba/filesystemobje …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(悩み相談・人生相談) 流暢に話すテキスト読み上げアプリ 1 2023/07/23 20:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Word(ワード) Windows11キーボードの調子が悪いので治し方を教えてください。 【症状】 1つ目 キーボードの 5 2022/07/03 14:51
- フリーソフト テキストファイル内を検索したい 1 2022/06/01 08:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
パワーポイントの表
-
音声マークを一括非表示にしたい。
-
パワーポイント「スライドショ...
-
Power pointって、スクリーンに...
-
パワーポイント2019 図の透...
-
PowerPointで、作成されたファ...
-
canvaでつくったプレゼン資料を...
-
パワーポイントで、プレゼン用...
-
この図を参照してください。 こ...
-
Powerpointを用いた論文の発表...
-
2016EXCEL→2016PowerPointにコ...
-
マイクロソフトアカウントのこ...
-
COUNTIFのやり方を教えてくださ...
-
パワーポイント、四角い枠の中...
-
【パワポ初心者の大学生におす...
-
Power point で、アニメって作...
-
パワポ初心者で申し訳ありませ...
-
Accessで Tabキーを押したとき...
-
パワーポイントで教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
パワーポイントの表
-
パワーポイント「スライドショ...
-
音声マークを一括非表示にしたい。
-
ホワイトボード 油性マジックの...
-
エクセル・パワーポイントなど...
-
パワーポイントで、プレゼン用...
-
PowerPointVBAでスライドマスタ...
-
PowerPointでスライドマスタの...
-
Power point で、アニメって作...
-
パワポ初心者で申し訳ありませ...
-
PowerPointで、作成されたファ...
-
パワーポイントで資料を作る時 ...
-
【パワーポイントのフォントが...
-
パワーポイントのアニメーショ...
-
ExcelのグラフをPowerPointに貼...
-
パワーポイント2019 図の透...
-
パワーポイントで、全てのスラ...
-
PowerPointのアニメーションで...
-
PowerPointで、線を点滅した感...
おすすめ情報