いつも勉強させていただいております。
質問させていただきます。どうぞよろしくお願いいたします。
ため込んだ(結構量ありますorz)ファイル(*.doc、*.txt)の中身の、
ある文字をすべて別の文字にVBAで検索→置換したく、今日ずっと
調べておりました。*.xlsについてはやり方が見つかったのですべて
うまく置換できたのですが、Word文書とText文書についてのやり方が
分かりませんでした。
多分Filesystemobject(?)を使うのだと思うのですが、
もし参考になりそうなページやコード等ございましたら、
ぜひお教えいただけませんでしょうか。
もしお詳しい方がいらっしゃいましたら、どうぞよろしくお願いいたします。
No.1
- 回答日時:
試しにコードを考えてみました。
Wordの場合です。
Sub test1()
Dim mywd As Object
Dim mydoc As Object
Set mywd = CreateObject("Word.Application")
mywd.Visible = True
mywd.Documents.Open ("D:\test.doc")
mywd.Application.Activate
With mywd.Application.Selection.Find
.Text = "あ"
.Replacement.Text = "A"
End With
mywd.Application.Selection.Find.Execute Replace:=wdReplaceAll
mywd.Windows("test.doc").Close True
mywd.Quit
Set mywd = Nothing
End Sub
この回答への補足
xls88様
Docファイルすべて置換できました!どうもありがとうございます!
SaveじゃなくてCloseなんですねー。。。Saveが出てこないわけですorz
xls88様のようにコードを自分で考えて作れる方って、
数多くあるメソッドやプロパティは覚えてらっしゃるんでしょうか???
それともネットとかである程度検索方法を決めてらっしゃるんでしょうか?
自分は必死にSaveで検索かけておりました。。。
このたびはどうもありがとうございました!
ありがとうございます!!
早速今から試します!
まずお礼だけになってしまいますが、後で
ご報告だけでもさせていただきます。m(_ _)m
No.2ベストアンサー
- 回答日時:
テキストファイルを正規表現を用いて置換するコード例を挙げておきます。
Replace関数による方法(簡単)もありますが、私の勉強のためもあって、やってみました。
(1)エキストファイルの読み書きのコード
(2)正規表現置換関係のコード
(2)はhttp://codezine.jp/article/detail/1655?p=1を参考にした。(1)と組み合わせての処理だが、(2)でははっきりしない点があって、それを試行錯誤で何とか下記になった。
下記では具体的文字列→具体的文字列で単純だが、正規表現の機能を
生かすと、VBAの関数などでは出来ないことが出来る。大文字を小文字にするとか。
ーーー
Sub test01()
Dim re As RegExp
Dim mc As MatchCollection
Dim m As Match
Dim i As Integer
MsgBox CurDir
'f = """" & CurDir & "\ccc.txt" & """"
'MsgBox f
Open "IEno.txt" For Input As #1
Open "IEnoB.txt" For Output As #2
While Not EOF(1)
Line Input #1, x
'---
Set re = New RegExp
re.Pattern = "検索" 'アルファベット(大文字)の連続を表す正規表現
re.Global = True '複数マッチを有効にする
Set mc = re.Execute(x)
If mc.Count <> 0 Then
'MsgBox "x=" & x
'MsgBox "mc.Count = " & mc.Count
For i = 0 To mc.Count - 1
re.Global = True
Set m = mc.Item(i)
'MsgBox "FirstIndex = " & m.FirstIndex & " Length = " _
& m.Length & " Value = " & m.Value
y = re.Replace(x, "置換")
'MsgBox "y=" & y
Print #2, y
Next i
End If
Wend
Close #1
Close #2
End Sub
ー
テストは、「検索」という言葉を数箇所含んだ、複数行の文章のテキストファイルを作る。名前は、上記のままで動くよう、IEno.txtにする。
実行してIEnoB.txtをメモ帳で開くと、「検索」という語ー>置換に置換された文章が見える。なおテキストファイルは変更したものは、別ファイルに作らなければならないことを覚えておくこと。
ーー
テキストファイルを読んでxという変数で文章を捉えて
Sub test02()
a = "Happy Day"
b = "Day"
C = "BirthDay"
x = Replace(a, b, C)
MsgBox x
End Sub
のような関数の追加たでやる方法もある。
上の例では
y=Replace(x,"検索","置換")
でyを書き出せば、コードは簡単だが、今後応用のきく、正規表現の方を上記に挙げた。
ーー
ワードは>「Excel VBA」でではなく、ワードVBAで、置換操作のマクロの記録をとって、あれこれ修正箇所を考えるのが良いと思う。
ワードVBAは情報が少ないが。
ーーー
こんなの質問者にとって背伸びしすぎではないか。丸投げにしないと出来ないのではないか。テキストエディタは多種あって、置換機能の付いているものは多い。メモ帳にもある。
ワードやテキストエディタでの置換で辛抱すべきではないか。
この回答への補足
どうもありがとうございます!なんと正規表現まで。
今VBAでやってみると一瞬で動きました!
VB.NETだと大分コードが違うようですねー。。。
今からテキストの書き換・確認作業と並行して、
勉強させていただきます!まずはお礼だけになってしまいますが、
後ほどご報告させていただきますm(_ _)m
imogasi様
さっきテキストファイルの全置換が終わりました!
なんとReplace()が使えるんですね~!^^
.NETでもテキストのreplaceで検索かけたら、StreamReaderと
StreamWriterっちゅーのが出てきたので、自分でアプリ作成できました!!
アドバイスいただけたおかげでございますm(_ _)m
てっきりExcelやWord同様、CreateObject使って特別なやり方があるものだと
思いこんでおりましたので、まさか全部読み込んで書き換えたものを
吐き出せるとは。。。。
正規表現のほうのコード理解は今からですorz
上側のコードで(VBAと.NET両方使って)置換作業を完了できたので、
今から集中して後半のコード理解をさせていただきます!
勉強になりました。本当にどうもありがとうございました!!!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- その他(IT・Webサービス) 少し複雑なテキスト置換がしたいです。 2 2022/10/13 14:42
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名に空白がある時、一...
-
ファイル名を特定の文字までを...
-
ワードを使用した特定かつ複数...
-
Flexible Renamerでの一括編集...
-
二重の拡張子の一部を消す。
-
正規表現で最初にマッチしたも...
-
PS4コントローラーをPCでゲーム...
-
wordの何も書かれていない2ペー...
-
友人とのラインで 「~MBと書く...
-
詳しくないので、どなたかお教...
-
4Kの外部モニターに出力すると...
-
VBA レジストリの値の読み方に...
-
[C言語]fputsとfprintfの違い
-
セル内の文字列が日本語か英語...
-
MMDでavi出力が出来ない
-
「彡」って文字はなんという文...
-
VBAでbmp画像をASCIIデータとし...
-
エクセルでアルファベットか数...
-
英数字を含む文字列(0-9,A-Z)...
-
10分で500~600文字っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleスプレッドシートでワイ...
-
《》で囲まれた文字をすべて削...
-
TeraPadでの置換方法
-
IME 郵便番号辞書 で 都道府...
-
ファイル名を特定の文字までを...
-
正規表現で完全一致したキーワ...
-
正規表現で最初にマッチしたも...
-
ファイル名に空白がある時、一...
-
メモ帳の置換機能で特定の文字...
-
【正規表現に詳しい方】ダブル...
-
秀丸で置換かマクロで括弧をと...
-
Flexible Renamerの検索と置換...
-
CSVファイルの文字列を置換...
-
Flexible Renamer 半角スペー...
-
WinMergeにて置換の際に、文字...
-
(*)を_【*】に一括変換したいの...
-
Flexible Renamerの正規表現に...
-
EmEditorでの置換方法
-
ワードを使用した特定かつ複数...
-
二重の拡張子の一部を消す。
おすすめ情報