• ベストアンサー
  • 困ってます

置換?について

いつもお世話になっております。sako77です。 今回は置換?について質問させていただきます。 ファイルA(テキストファイル)に以下のような文章があります。 例) おはようございます。今日も●●●です。こんにちは。今日も◆◆◆◆です。おやすみ今日も■■です。・・・ 上記のようなテキスト文章から「今日も」から「です」の間の文字列を抽出し、別テキストファイルBに ●●●● ◆◆◆◆ ■■ のように出力したいのですが、こんなことはできるのでしょうか? エクセルかアクセス又はこんなことができるソフトがあれば教えてください。 よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数166
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

いろいろと検証して頂きありがとうございます。 是非参考にさせてもらいます。

関連するQ&A

  • エクセル 置換後の文字列について

    エクセル2003です 置換後の文字列について質問させてください 特定のセルに文字を入力し 例 C100に(9月)等 検索と置換にて 置換後の文字列を C100のテキストに 置換したいのですが 入力時にC100を選択する方法がわかりません  よろしくお願い致します

  • エクセル2003での置換について教えてください。

    エクセル2003での置換について教えてください。 こんにちは いつもお世話になっています エクセル2003での置換について教えてください。 特定の文字列以降の文字列を(特定文字列自身も含めて)削除したいのです。  特定の文字列は二つあります。【@】と【変化】です(【】も含みます)。  この二つの文字列はバラバラに出てきます。一方だけがでてくるセル、両方出てくるセル、両方出てこないセル、があるという意味です。  「*」を各特定文字の後ろに付けて、置換機能で削除していますが、二つの文字列に対して別々にやっています。 これを一度で置換して削除する方法を教えてください。  よろしくお願いします。

  • テキストエディタでの置換(正規表現チェック済)と同様のことを

    テキストエディタでの置換(正規表現チェック済)と同様のことを エクセルのマクロでもしたい。 画像を添付しましたが、秀丸で置換を選択し、 検索文字列と置換文字列を入れて、正規表現チェックのチェックボックスを 選択した状態で実行するのと同様のことをエクセルのマクロで行いたいです。 正規表現混みだととても難しいです。 やりたいことはマクロで、フォルダ内のテキストファイルを置換をかけていきたいです。(テキストファイルは複数ある状態)そのテキストファイルを更新できればいいです。(別テキストで出力されてもいいです。) どなたか詳しい方、教えていただけませんでしょうか? よろしくお願いいたします。 --- 検索エディタ【秀丸】【置換】 検索【.*item1=(.*) item2=(.*) .*】 置換【\1\t\2】 正規表現チェック

その他の回答 (4)

  • 回答No.5

一応、関数案です。 A1に おはようございます。今日も●●●です。こんにちは。今日も◆◆◆◆です。おやすみ今日も■■です。・・・ として A2に =MID(A1,FIND("今日も",A1)+3,255) 下フィル B2に =LEFT(A2,FIND("です",A2)-1)    下フィル では? 但し、文字数 255文字まで

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 文字数は長いものも多々あるので上限がちょっとわからないですね。 けど、こういう方法もあるんだと勉強になりました。

  • 回答No.4
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんばんは。 すでに回答は出ていますが、こんな風な感じにしてみたらいかがでしょうか。なお、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
  • fujillin
  • ベストアンサー率61% (1594/2576)

正規表現の練習問題みたいな感じですね。 テキスト編集で、丁度、同じような例題が以下にありましたので、参考にしてください。 (もちろん、エクセルやアクセスのVBAでも可能です。) http://ukiya.sakura.ne.jp/index.php?%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E8%AC%9B%E5%BA%A7%2F1

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 参考にさせてもらいます。

  • 回答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/filesystemobject/textstream.htm

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセル置換・検索

    エクセル(バージョン2000)で オブジェクト(オートシェイプ)内の テキスト文章(文字列)を 検索及び置換したいのですが、方法があれば ご教示いただけますでしょうか? すみません、宜しくお願いいたします。

  • エクセルの置換について

    すぐ教えていただきたいんです! エクセルの文字列(この文字列は行ごとにいろんな文字列なんですがその前にある決まった文字列を付け加えたい場合はどのようにしたらいいでしょうか? たとえば置換だと、行に入力したその文字列1パターンしか置換してくれないんですよね? なんだかつたない説明ですいませんが、お分かりになる方教えてください!

  • 文字列の置換で・・・

    Javaでの文字列の置換についてなんですが ある文字を任意の文字に置換し表示させるとともに 何個の文字を置換したかも同時に知らせたい場合は どのような処理をしたらよいでしょうか? ぜひご協力よろしくお願いします!! (例)入力した文字列に"a"が含まれる場合は"b"に置換し   その際に変換した文字数も表示してください。     basic→出力結果: "bbsic" 置換した文字数は1です。

    • ベストアンサー
    • Java
  • 数字のみを置換するバッチファイル

    いまテキストファイル内の文字列を置換するbatファイル(VBScript)を作成しているのですが、少し困っています。 ファイル内に英文字と数字が入り混じってる中(1000行くらい)で5文字以上連続する数字のみを置換したいのですが、どなたかアドバイス頂けないでしょうか?? ----------------------------------------------------------------- 例:以下のような文字列があって5文字以上連続した数字を全て■で置換 『iedds0123456ecefafa03223』  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 『iedds■■■■■■■ecefafa■■■■■』 -----------------------------------------------------------------

  • Excelの置換がうまく出来ません。

     Excelである文字列を検索しようとすると、ちゃんと検索できるのですが、それを別の文字列に「置換」しようとすると「一致するデータが見つかりません」のメッセージが出て置換できません。「一致するデータ」がちゃんと存在するにもかかわらずにです。  ところが「すべて置換」にするとちゃんとすべてその文字列が指定の文字列に置換出来てしまいます。  即ち、ちゃんと置換すべき文字列が存在するにもかかわらず「置換」だけが実行されないのです。  これってどうゆうわけでしょうか?  私としては、「すべて置換」ではなく、一つ一つ確認しながら文字列の置換を行いたいのですが・・・私のやり方が悪いのでしょうか?  尚、ここで言う「文字列」とは狭い意味のそれではなく、数値・記号を含む全ての文字と言う意味です。

  • PowerShellでの文字列置換ができない

    PowerShellで「\」を含む文字列が変換できません。たぶん正規表現とかで問題があると思うのですが・・・ あとテキストファイル内の文字列置換で指定された文字列がある行があった場合、その行を削除するといったことは出来るのでしょうか? 詳しい方いらっしゃいましたらよろしくお願いいたします。 <テキスト> BBBB AAAA NNNN AAAAあああA NNNN AAAA <検索文字列> あああ ※行内に「あああ」をみつけたらその行を丸ごと削除したい・・・

  • ハテナのみ置換するには

    A1→あ?う A2→あうう と文字列が入ってるのですが 「?」を「い」に変換したいのですが 検索する文字列→「あ?う」 置換後の文字列→「あいう」 だと A2→あうう も「あいう」になってしまいます。 「?」だけを置換する方法を教えてください。 エクセル2010です。

  • < >を含む文字列のエクセルでの置換について

    < >を含む文字列のエクセルでの置換についておしえてください。 < や >を含むhtmlの文字列のSUBSTITUTE置換で悩んでいます。 < や >は数式の大なり、小なりと認識されるので置換ができないということですよね? これを置換するいい方法はないのでしょうか? たとえばhtmlテキストに含まれる<table width="800">という文字を <table width="600"><h1>時計</h1>に置き換えたいというような感じです。 エクセルに詳しくないもので出来るのかどうかよくわかりませんが とても困っているので教えていただけましたら助かります(>_<) よろしくお願いいたします。

  • テキスト置換ツールについて

    あらかじめExcelで作成した置換表(置換前文字列、置換後文字列の一覧)に基づいて、指定したファイル群のテキストを一括置換してくれるようなツールはないでしょうか。

  • 1文字だけ置換したい

    エクセル2002を使用しています。 「あ」一文字で存在する文字列を 「え」に置換しようと考えています。 しかし表中には「あ」だけでなく「かあか」「けけああ」 といったように「あ」が含まれる文字列が存在します。 これらは置換の対象外としたいのです。 あくまでも「あ」一文字を置換したいのですが…… どのように置換設定すればよいでしょう? ご意見ください。よろしくお願いします