アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで作成した置換シートを使用して、ワードの資料内の間違え語を一括置換えできるエクセルマクロを作りたいです。
置換えシートには、A列に間違え語、B列に正しい語が入力してあります。
色々やってみたのですが、うまくいきません。
分かる方、教えていただけませんか?

A 回答 (4件)

こんにちは。



質問には書かれていないのですが、本当は、複数のワードのドキュメントの文字を置換するものだと思います。一応、ご質問のままに、Excel用マクロにしましたが、置換データそのものは、ひとかたまりなのですから、一度Excelのファイルを読めば、後は、Excelを閉じてしまっても使えます。本来は、Wordマクロにすれば良かったかもしれません。

Excel側からWordを呼び出した場合は、エラーが発生したら、タスクマネージャーを立ち上げて、プロセスの中から、Word.Exe があるか確認して、あれば終了させてください。

-------------------------------------------
 現在は、Document ファイルは、ひとつのみ
 現在は、ワードのデフォルトパスにしています。
 wdPath = wdApp.Options.DefaultFilePath(0) & "\" 'wdDocumentsPath 
 シートは、アクティブシート
 シートのデータは、A列とB列 1行目から入れること。
'-------------------------------------------


'Option Explicit

Private wdApp As Object 'Word.Application 'Object
Private wdDoc As Object 'Word.Document 'Object
Sub ReplaceWordText()
  Dim RowsCount As Long
  Dim Datas() As String
  Dim i As Long, j As Long
  Dim wdPath As String
  Dim FileNames As String
  On Error GoTo EndLine
  
  'ファイル名
  FileNames = "Test2.doc"
  
  With ActiveSheet
    RowsCount = .Cells(Rows.Count, 1).End(xlUp).Row
    ReDim Datas(1, RowsCount - 1)
    For i = 1 To RowsCount
      If Len(.Cells(i, 1).Value) > 0 Then
        Datas(0, i - 1) = .Cells(i, 1).Value
        Datas(1, i - 1) = .Cells(i, 2).Value
      End If
    Next i
  End With
  'データがない場合、マクロを離脱
  If Datas(0, 0) = "" Then Exit Sub
  'ワードのオートメーションの取得
  On Error Resume Next
  Set wdApp = GetObject(, "Word.Application")
  On Error GoTo 0
  If wdApp Is Nothing Then
    Set wdApp = CreateObject("Word.Application")
  End If
  wdApp.Visible = True
  'ワードのデフォルトパス
  wdPath = wdApp.Options.DefaultFilePath(0) & "\" 'wdDocumentsPath
  'ファイル名
  
  If Dir(wdPath & FileNames) <> "" Then
    Set wdDoc = wdApp.Documents.Open(wdPath & FileNames)
    For j = 0 To RowsCount - 1
      Call CountReplacements(Datas(0, j), Datas(1, j))
    Next j
    wdDoc.Save
    wdDoc.Close False
  Else
    MsgBox FileNames & "が見つかりません。", vbExclamation
  End If
  wdApp.Quit
EndLine:
  Set wdApp = Nothing
  If Err.Number = 0 Then
    MsgBox "正常終了しました。", vbInformation
  Else
    MsgBox Err.Number & " : " & Err.Description, vbExclamation
  End If
End Sub
Private Sub CountReplacements(ByVal sSearchText As String, ByVal sReplaceText As String)
  With wdApp
    .Selection.Find.ClearFormatting
    .Selection.Find.Replacement.ClearFormatting
    With .Selection.Find
      .Text = sSearchText
      .Replacement.Text = sReplaceText
      .Forward = True
      .MatchFuzzy = True
      .MatchWholeWord = False '部分置換
      .MatchCase = True
      .MatchWildcards = False
      .Forward = True
      .Wrap = 1 'wdFindContinue
      .Format = False
      .Execute , , , , , , , , , , 2 'wdReplaceAll
    End With
  End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
使い方ですが、置換えしたいワードのドキュメントを開き、
マクロと置換えリストが入っているエクセルを開き、そのマクロを実行すればよろしいでしょうか?
>置換データそのものは、ひとかたまりなのですから、一度Excelのファイルを読めば、後は、Excelを閉じてしまっても使えます。
この文章がよくわからなかったのですが、
もう一度ご説明いただければ幸いです。

お礼日時:2010/01/01 13:20

こんにちは。



不明瞭な書き方ですみません。

>マクロと置換えリストが入っているエクセルを開き、そのマクロを実行すればよろしいでしょうか?

そのとおりです。なぜ、いろいろな注釈を入れたかというと、Excel側から実行すると、エラーかせ発見しにくく、スピードも遅いのではないか、という心配からです。


>>置換データそのものは、ひとかたまりなのですから、一度Excelのファイルを読めば、後は、Excelを閉じてしまっても使えます。

要するに、Word側から、実行出来れば、上記でも書いたような不具合の問題が減るのではないか、ということです。
Excel側からのマクロの実行が必須要件なら、これは無視しても構いません。ただ、Wordのドキュメントの別表で正誤リストを作るのが楽ではないかと思いました。

ところで、こういう話の前に、Excelの標準モジュールに置いた後、ご自分の環境に合わせた設定の仕方などは、分かっていらっしゃいますか?

Wordの標準フォルダとファイル名は、ご自身で設定してくださるようにお願いします。
    • good
    • 0

補足:



以前、このようなものを作っています。

ワードベーシックで、離れた二つの箇所の属性を取得する方法
http://oshiete1.goo.ne.jp/qa5059719.html

ここで、私が書いたものは、Wordの中で、リストを作るものです。
#4の画像が、文章の正誤リストのようなものです。それを別のDocument に反映しています。
ただ、気持ち的にのらないと、なかなか、そのようなコードは書けませんが。
    • good
    • 0
この回答へのお礼

何度も回答いただきありがとうございました。
下の回答にもお礼を書いたのですが、アップされておりませんで失礼しました。
自分の環境にあった設定の仕方もわからないのですが、
今日、会社で試してみました。
PCのデスクトップに貼ったファイルで文書名を文書2にしてみたのですが、文書2がみつかりませんというエラーになってしまいました。
どうしたらよろしいでしょうか?
エクセルのマクロにしたいのは、理由がありまして、業務上、同じエクセルの置換えリストを使ってワードとパワーポイントとエクセルの一括置換えをしたいからです。
よろしくお願いします。

お礼日時:2010/01/06 19:32

>>ワードベーシックで、離れた二つの箇所の属性を取得する方法


>どうしたらよろしいでしょうか?

これは、あくまでも、そうした例を挙げたものです。Wordの表の作成とその語彙の対比を作るサンプルです。今回のご質問よりも、はるかに複雑な内容で、その元のご質問者さんの環境にあった造りですから、その状況が読み取れていない状況では使いこなせないと思います。

>エクセルのマクロにしたいのは、理由がありまして、業務上、同じエクセルの置換えリストを使ってワードとパワーポイントとエクセルの一括置換えをしたいからです。

私が指摘していたのは、訂正する側のWordのファイルのOpen と Save が、同じWordから行う場合と、Excelから行うのでは、トラブルや処理スピードが違うということだけです。Excelで書こうが、Wordで書こうが、本質的には変わりありません。単に経験的なアドバイスとして書いたまでです。ご質問者んが、あくまで、こうしたいという主張を違えてまで、書いているわけではありません。すでにコードを作ってありますから、それをどうするか、続行するか、やめるかは、ご自身がお決めになってください。
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
無事に起動しました!
大変、参考になりました!

お礼日時:2010/01/19 20:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!