- ベストアンサー
テキストファイルを自動で置換する方法
- VBA初心者でもテキストファイルの置換作業を効率化する方法をご紹介します。
- Excelを使ってテキストファイルの内容を一括で置換する方法を解説します。
- 指定フォルダ内のテキストファイルを自動的に置換するVBAコードの作り方をご紹介します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
VBA です ①対象は A フォルダの中の全テキストファイルが対象なのか、 B フォルダの中からテキストファイルを選択するのか ②変換したい文字は A 複数 B 1つだけ ③文字コードは A ANSI(シフトジス) B それ以外。 取りあえず、A で作りました。 画像の様に B1、入力フォルダ B2、出力フォルダ A5以下、痴漢前の文字 B4以下、痴漢後の文字 を入力して実行して下さい。 ※必ず文字コードを確認して下さい。文字コードはメモ帳で開いて、ファイル、名前を付けて保存の画面を出せば、下の方に出てきます。ANSI以外だったら文字化けします。 \ はコピペすると半角¥になります。 Option Explicit ' Sub Macro1() Dim FileName As Variant Dim RInp As Long Dim Find As String Dim Repl As String Dim FileData As String ' FileName = Dir([B1] & "\*.txt") If FileName = "" Then MsgBox "該当ファイルがありません", vbCritical End If ' On Error Resume Next MkDir [B2] On Error GoTo 0 ' Do While FileName > "" Open [B1] & "\" & FileName For Input As #1 Open [B2] & "\" & FileName For Output As #2 ' Do Until EOF(1) Line Input #1, FileData ' For RInp = 5 To Cells(Rows.Count, "A").End(xlUp).Row Find = Cells(RInp, "A") Repl = Cells(RInp, "B") FileData = Replace(FileData, Find, Repl) Next RInp Print #2, FileData Loop Close FileName = Dir Loop MsgBox "終了しました" End Sub ①~③を変身して下さい。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
自動で、とか、対象が多数で面倒というなら、色々言わず、質問文に、「プログラムでやりたい」、と率直に書くべきだ。それ以外は既製ソフトを使うしかないが、簡単には見つからないものだ。 >VBA初心者なので説明不足な部分・・ 別の問題だろう。やりたいことを、過不足なく表現する技術こそ、コード作成以上に 人生で大切と思う。個人的に、これの訓練をしてないような質問者が多いと思う。 ファイル名やレコードの内容の、模擬実例を、質問するなら、少数例あげるべきだと思う。 >ファイル数が多く であれば、ファイルパスの(文字列です)リストを持つか、または同一フォルダー内にそれら対象のファイルに集めて、処理の繰り返しに持ち込むことになろう。 ーー こういうのは、FSOを使うのがよいでしょう。 (1)VBAとの親和性 (2)テキストファイルのレコード的に、Read,Writeができる (3)置換かVBAコードで出来る (4)For Eachがファイル内のファイル補足に使える。 (5)WEBで、解説記事が多い。 参考に 標準モジュールに Sub test01() '参考WEB記事 'http://officetanaka.net/excel/vba/filesystemobject/filesystemobject25.htm 'http://www2.tokai.or.jp/mother/newhtm2/acvba/av09/av005.htm '--- Set FSO = CreateObject("Scripting.FileSystemObject") 'テキストストリームオブジェクトの取得(読み込みモード) 'ーーーインプット・ファイルパス strPath = "C:\Users\惇\ドキュメント\Documents\テスト5.txt" Set tso = FSO.OpenTextFile(strPath) '---アウトプット・ファイルパス ofilename = "C:\Users\惇\ドキュメント\Documents\テスト7.txt" Set outTxt = FSO.CreateTextFile(ofilename, True) 'ーーー With tso Do Until .AtEndOfStream 'ファイル末尾まで繰り返し 'イミディエイトウィンドウへ読み込み位置と値を表示 buf = .Readline MsgBox buf '---置換 2箇所置換の例。置換箇所が、多い場合は重ねを増やせる。 repAfter = Replace(buf, "府中市", "稲城市") repAfter = Replace(repAfter, "東灘区", "灘区") MsgBox repAfter outTxt.Write repAfter Loop '-------ファイルクーロズ tso.Close 'ファイルのクローズ outTxt.Close 'ファイルのクローズ End With End Sub 小生は、テスト不十分なので、少数例でテストからはじめてください。 多数のファイルやレコード数になったら、Msgbox行は削除のこと。Debug.printでやるとか。
お礼
ご回答いただきありがとうございます たしかに自動などと書かず率直に書くべきでした 貴重なご意見と解決策を明記していただきありがとうございました
- SI299792
- ベストアンサー率47% (772/1616)
- M_Sato
- ベストアンサー率54% (550/1003)
ストリームエディターというテキストファイルを読み込んで加工するソフトがあります。 Vectorのサイトで探せばいろいろなバージョンがありますが、とりあえず「Sed LOGOS版」でいいと思います。 これを解凍してsed.exeをC:¥のルートドライブにおいておきます。 次に置換するためのバッチファイルを、指定フォルダ内に作ります。 手順は、以下のように記述をしたテキストファイルを作り、その拡張子を.txtから.batに変えるだけです。 ここでは対象ファイル名をfileA.txt、fileB.txtとしています。 ------------------------------- C:\sed -e "s/【 ,F1 】/【 ,A2 】/g" fileA.txt > fileA2.txt C:\sed -e "s/【 ,F1 】/【 ,A2 】/g" fileB.txt > fileB2.txt (以下、指定フォルダ内の対象ファイルすべてを記述) ------------------------------- このバッチファイルをクリックすれば、すべてのファイルが一瞬で置換されます。 (上の記述で「C:」のあとに逆スラッシュが表示されていたら半角の¥と読み替えてください)
お礼
ご回答いただきありがとうございます フリーソフトなどを使用できない環境下という補足を忘れておりました 調べていただいたのに大変申し訳ございません ありがとうございました
- Ultra-Hetare
- ベストアンサー率38% (204/526)
セルを介する必要はないですよ。 テキストを読み込んで、 メモリ内で置換し、 それを別のテキストに書き出せば 一丁上がりです。 参考サイト https://kenko-keep.com/vba-cnv-file/ よく読んで頑張って下さい。
お礼
ご回答いただきありがとうございます 理解できるかわかりませんがゆっくり読んで挑戦してみます
お礼
①A ②A ③A(右下ANSIでした) 先程動作確認を行い無事置換することができました 率直な質問内容でなかったにも関わらず貴重なお時間を割いて このような素晴らしいプログラムを作っていただきありがとうございました