ここから本文です

複数人で分担してWord文書を作っていて、書き癖が出ます。 統一したルールで、単...

アバター

ID非公開さん

2019/3/1713:00:03

複数人で分担してWord文書を作っていて、書き癖が出ます。
統一したルールで、単語を置換して修正しています。

何度も置換するのが面倒なので、Wordでまとめて置換する
ツールはありませんか?

EXCELのA列に置き換え対象、B列に置き換え後の単語
を書いておけば、代行してくれるような。

VBScriptで書けばできると思いました。

閲覧数:
56
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

unk********さん

2019/3/1713:30:29

WordでもVBAはありますよ。
マクロの記録で置換を行い、それをいじればいいかと。

  • アバター

    質問者

    ID非公開さん

    2019/3/1714:20:13

    あ゛・・・・。

    Wordでもあるんですね。
    EXCELでしかVBAはないと思ってました。


    試してみます。
    ありがとうございます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

lin********さん

2019/3/1714:18:53

プログラムファイルの存在するフォルダ内の「doc」、「docx」、「docm」が処理対象です(実験では、「docx」でしか試していませんが・・・)。

置換リストのエクセルブックは開いておき、リストが記述してあるシートが前面に出ている状態にしておいてください。

それから★★★ここが重要★★★なのですが、他のエクセルブックやワードの文書ファイルを開いておかないでください。

どうなるか保証できません。

最後に「Finished!」と表示しますので、「OK」を押して、終了してください。

「マクロの記録」で一括置換を実際にワードで行って、その記述を「VBScript」に書き換えただけなので、よく分かっていませんので、説明は省略します。

「半角と全角を区別する」と「大文字と小文字を区別する」にチェックを入れた状態で実行しました。

Option Explicit
Dim dc, e, ex, f, gf, i, sh, so, wd
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
Set wd = CreateObject("Word.Application")
wd.Application.DisplayAlerts = False
wd.Visible = False
Set ex = GetObject(, "Excel.Application")
Set sh = ex.Workbooks(1).ActiveSheet
For Each f In gf.Files
e = LCase(so.GetExtensionName(f.Name))
If (e = "doc" or e = "docx" or e = "docm") and Left(f.Name, 2) <> "~$" Then
Set dc = wd.Documents.Open(gf & "\" & f.Name)
For i = 1 to sh.Range("A1").End(-4121).Row
wd.Selection.Find.ClearFormatting
wd.Selection.Find.Replacement.ClearFormatting
With wd.Selection.Find
.Text = sh.Cells(i, "A").Text
.Replacement.Text = sh.Cells(i, "B").Text
.Forward = True
.Wrap = 1
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchByte = True
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
wd.Selection.Find.Execute ,,,,,,,,,, 2
Next
dc.Save
dc.Close
Set dc = Nothing
End If
Next
wd.Quit
Set wd = Nothing
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

これだけは、ちょっと。

.Wrap = 1

の「1」は、「wdFindContinue」です。

wd.Selection.Find.Execute ,,,,,,,,,, 2

の「2」は、「VBA」では、「Replace:=wdReplaceAll」です(「wdReplaceAll」が「2」です)。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる