• ベストアンサー

パワーポイントの置き換えマクロ

パワーポイントのたくさんの単語の文字の置き換えをしたく、自動のマクロ機能で記録したのですが、何度やってもVBAになりません。 どうやったらいいのでしょうか? 同じ用途のマクロをエクセルで作ったのですが、こちらをうまく利用できますか? 業務でいろいろな資料を翻訳ソフトを使って、他国語に翻訳しています。 すべてがうまく翻訳されるわけではなく、辞書登録してもいくつかの単語は毎回同じ言葉に訳されてしまうので、現在は、手作業で置き換え作業しています。 工数がかかってしまうので、マクロ機能で一括置き換えがしたいのです。 よろしくお願いします。

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

  • ベストアンサー
  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.3

そこからですか。では、もう一度修正コードを全部。 ●Excelのワークシートに 置換前 置換後 を下のように並べておいて    A   B 1 原油 石油 2 空白  白 3 生命 生活 ●ExcelでAlt+F11→挿入→標準モジュールに以下を貼り付け Dim myArr As Variant Dim VBReg As Object Dim Matches As Object Sub Chikann2() Dim cntRow As Long Dim myRng As Range Dim objPPT As Object 'PowerPoint.Application Dim myPre As Object 'PowerPoint.Presentation Dim Sld As Object 'PowerPoint.Slide Dim Shp As Object 'PowerPoint.Shape Dim myRow As Object 'PowerPoint.Row Dim myCell As Object 'PowerPoint.Cell Dim iShp As Object 'PowerPoint.Shape 'A,B列の置換パターン配列に  cntRow = Range("A" & Rows.Count).End(xlUp).Row  Set myRng = Range("A1:B" & cntRow)  myArr = myRng.Value 'パワポ起動  On Error GoTo Mikidou  Set objPPT = GetObject(, "PowerPoint.Application")  With objPPT   .Activate   Set myPre = .ActivePresentation  End With  On Error GoTo 0  Set VBReg = CreateObject("VBScript.RegExp") '図形ループ  For Each Sld In myPre.Slides   For Each Shp In Sld.Shapes    With Shp     ' 普通のオブジェクトの場合     If .HasTextFrame Then      Hennkann .TextFrame.TextRange     ' 表の場合     ElseIf .HasTable Then      For Each myRow In .Table.Rows       For Each myCell In myRow.Cells        Hennkann myCell.Shape.TextFrame.TextRange       Next      Next     ' グループオブジェクトの場合     ElseIf .Type = msoGroup Then      For Each iShp In .GroupItems       With iShp        If .HasTextFrame Then         Hennkann .TextFrame.TextRange        End If       End With      Next     End If    End With   Next  Next Set iShp = Nothing Set myCell = Nothing Set myRow = Nothing Set Shp = Nothing Set Sld = Nothing Set myPre = Nothing Set objPPT = Nothing Set Matches = Nothing Set VBReg = Nothing Exit Sub Mikidou: MsgBox "パワポファイル開いといて" End Sub Sub Hennkann(txtRng As Object) 'PowerPoint.TextRange Dim i As Long Dim m As Integer Dim j As Integer Dim txtRng2 As Object 'PowerPoint.TextRange  If txtRng.Text <> "" Then   '渡されたTextRangeの中から検索置換   For i = 1 To UBound(myArr, 1)    If Len(myArr(i, 1)) > 0 Then     With VBReg      .Pattern = myArr(i, 1)      .IgnoreCase = False      .Global = True      If .test(txtRng.Text) Then       For m = 1 To txtRng.Paragraphs.Count        Set txtRng2 = txtRng.Paragraphs(m)        If .test(txtRng2.Text) Then         Set Matches = .Execute(txtRng2.Text)         For j = Matches.Count - 1 To 0 Step -1          With Matches(j)           With txtRng2.Characters(.FirstIndex + 1, .Length)            .Text = VBReg.Replace(.Text, myArr(i, 2))           End With          End With         Next j        End If       Next m      End If     End With    End If   Next i  End If End Sub

jungoro
質問者

お礼

すみません、そんなレベルなんです…。 回答本当にありがとうございました! 貼り付けてみたらできて、涙ものの大感動でしたっ!! エクセルの置き換えマクロも手入力の置き換えを 自動で記録したレベルなんです。 まだまだ、お聞きしたいことがあるのですが、よかったら回答をお願いできないでしょうか? AとB行に置き換えたい文字を入れたデータファイルは作りました。 しかし、そのファイルには3枚シートがあり、そのうちの1枚が文字データ表になります。 そのシートを指定することはできますでしょうか? また、同シートを使って、エクセルで他のエクセルファイル内を 一括で置き換えるVBAもあるのでしょうか? さらに、同様にそのエクセル置き換えデータを使用した ワードのファイルも一括で置き換えはできるのでしょうか? 現在、ワードも手入力で置き換えしたものを自動で記録したマクロを使用しています。 たくさんの質問で申し訳ありません。 ぜひともよろしくお願いします。

その他の回答 (3)

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.4

●シートを指定するのは簡単です。 例えばシート名を指定する場合、以下のように変更します。 [変更前]  cntRow = Range("A" & Rows.Count).End(xlUp).Row  Set myRng = Range("A1:B" & cntRow) ↓ [変更後]  With Worksheets("Sheet1") 'シート名がSheet1の場合   cntRow = .Range("A" & Rows.Count).End(xlUp).Row   Set myRng = .Range("A1:B" & cntRow)  End With ●Excelの置換のコードは、各文字のフォントを気にする必要が ないので相当短くなります。 このサイトで別スレを立ててください。その場合は 必ず具体的に質問してください。 ●Wordの置換のコードの研究は、このサイトではないほうが いいような気がします。 ここのシステムはどうもコードを連続してアップしたりするのが 面倒なんです。

jungoro
質問者

お礼

再回答いただきありがとうございます! 早速明日やってみます。 エクセルやワードの件もありがとうございます。 コードを教えてくれるようなサイトもあるのですね。 知りませんでした!

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.2

Sub Hennkannの中の1行を訂正します。 参照設定不要にしたつもりだったのに.. 誤 Dim txtRng2 As TextRange ↓ 正 Dim txtRng2 As Object 'PowerPoint.TextRange でお願いします。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.1

Excel VBAから、現在開いているPowerPointファイルの置換を行う例です。 ●ExcelのA列に置換前、B列に置換後 [正規表現を使っていますので、正規表現のワイルドカードも 使用可能です。検索で調べてください。]    A   B 1 原油 石油 2 空白  白 3 生命 生活 ●Excel VBAで Dim myArr As Variant Dim VBReg As Object Dim Matches As Object Sub Chikann2() Dim cntRow As Long Dim myRng As Range Dim objPPT As Object 'PowerPoint.Application Dim myPre As Object 'PowerPoint.Presentation Dim Sld As Object 'PowerPoint.Slide Dim Shp As Object 'PowerPoint.Shape Dim myRow As Object 'PowerPoint.Row Dim myCell As Object 'PowerPoint.Cell Dim iShp As Object 'PowerPoint.Shape 'A,B列の置換パターン配列に  cntRow = Range("A" & Rows.Count).End(xlUp).Row  Set myRng = Range("A1:B" & cntRow)  myArr = myRng.Value 'パワポ起動  On Error GoTo Mikidou  Set objPPT = GetObject(, "PowerPoint.Application")  With objPPT   .Activate   Set myPre = .ActivePresentation  End With  On Error GoTo 0  Set VBReg = CreateObject("VBScript.RegExp") '図形ループ  For Each Sld In myPre.Slides   For Each Shp In Sld.Shapes    With Shp     ' 普通のオブジェクトの場合     If .HasTextFrame Then      Hennkann .TextFrame.TextRange     ' 表の場合     ElseIf .HasTable Then      For Each myRow In .Table.Rows       For Each myCell In myRow.Cells        Hennkann myCell.Shape.TextFrame.TextRange       Next      Next     ' グループオブジェクトの場合     ElseIf .Type = msoGroup Then      For Each iShp In .GroupItems       With iShp        If .HasTextFrame Then         Hennkann .TextFrame.TextRange        End If       End With      Next     End If    End With   Next  Next Set iShp = Nothing Set myCell = Nothing Set myRow = Nothing Set Shp = Nothing Set Sld = Nothing Set myPre = Nothing Set objPPT = Nothing Set Matches = Nothing Set VBReg = Nothing Exit Sub Mikidou: MsgBox "パワポファイル開いといて" End Sub Sub Hennkann(txtRng As Object) 'PowerPoint.TextRange Dim i As Long Dim m As Integer Dim j As Integer Dim txtRng2 As TextRange  If txtRng.Text <> "" Then   '渡されたTextRangeの中から検索置換   For i = 1 To UBound(myArr, 1)    If Len(myArr(i, 1)) > 0 Then     With VBReg      .Pattern = myArr(i, 1)      .IgnoreCase = False      .Global = True      If .test(txtRng.Text) Then       For m = 1 To txtRng.Paragraphs.Count        Set txtRng2 = txtRng.Paragraphs(m)        If .test(txtRng2.Text) Then         Set Matches = .Execute(txtRng2.Text)         For j = Matches.Count - 1 To 0 Step -1          With Matches(j)           With txtRng2.Characters(.FirstIndex + 1, _            .Length)            .Text = myArr(i, 2)           End With          End With         Next j        End If       Next m      End If     End With    End If   Next i  End If End Sub

jungoro
質問者

お礼

回答ありがとうございます。 早速、試してみます。 この言語を、日本語部分も含めて、全部貼り付けたらマクロが動くということでしょうか?

関連するQ&A

  • 単語の置き換え

    非常にシンプルな翻訳機能(文字の置き換え機能)ソフトを探しています。 フリーソフトでそのようなものがあればベストですが、なければExcelなどで、自分で作れないものかと思っています。 必要な機能は本当にシンプルで、セルに入っている複数の単語を一括して別に作成した対応リストにある単語に置き換える、というものです。vlookupを使おうかと考えたのですが、vlookupは、セル対セルで単語を置き換えることはできますが、一つのセルに複数の単語があると対応できません。 通常の辞書ソフトは、一度にひとつの単語の訳しかできず、また、翻訳ソフトは本当に翻訳してしまうので、単語を単語としてではなく文章として解釈するようなので、希望する使用目的にあまり合いません。 もし、自分でプログラミングを行う場合、当方、プログラミングは素人ですが、参考になる書籍など紹介していただければ、がんばれるのではないかと思っています。 以上、よろしくお願いいたします。

  • パワーポイントのマクロ

    クライアントから依頼され作業するファイルがあるのですが、全角を全て半角に直す作業に手間取っています、これがマクロとかなにかで一括で出来ればいいと思ってますクライアントからくるファイルにマクロを埋め込みはしたくないです、なにか他の方法知恵があれば、教えてください。 半角全角は数字です、もしオフィス製品(ワード、エクセル、パワーポイントで共通な物が出来ればと思っているのですが。。。

  • エクセルでの文字置き換え

    みなさんこんにちは。 質問ですが、編集→置き換えではなく、VBAで同様の 操作をしたいのですが、どの様に記述すればよいのでしょうか? また、マクロの記録を使って、同様の処理をした場合との処理速度の差はあるのでしょうか? 置き換えたい文字が多くある為、編集→置き換えは面倒くさいので・・・

  • これはマクロでできるのでしょうか

    現在IT系の運用業務に携わっています。 私は海外ベンダに業務を発注することが多いのですが、その際には英語の業務委託仕様書を 作成する必要があります。 しかし、私が取り扱う仕様書は日本語で書かれたものばかりなので、翻訳する必要があります。 私独自に専門用語/よく使う用語の単語帳は作成していますが、いちいち参照することが面倒です。 そこで、マクロを使用して単語帳に完全一致する単語があれば、自動で英単語に変換する操作ができないか検討しています。 (勿論、正確な仕様書作成のためには、一括変換後に文の再構成を行います) そういったことが可能かどうか、可能であればどのような手順を踏めばよいのかご教示いただけますと幸いです。 -------------------------------------- 単語帳:エクセル2003 翻訳対象仕様書:パワーポイント2003 私のスペック:VBA、マクロの経験全くなし          C言語でのプログラミングは少しあり --------------------------------------

  • Wordで複数の単語を一括置換するマクロはありませんか?

    Wordで複数の単語を一括置換するマクロはありませんか? 産業翻訳をしています。 現在は、自作の辞書を使ってテキスト文書内の登録単語を一括置換しています。 水野麻子さんのブログhttp://ameblo.jp/saglasie/entry-10519224366.htmlによると、 この作業をWordでできて、さらに置換部分をハイライト表示したり、置換した単語のリストが自動的に作成されるマクロがあるようなのですが、ネット上で検索しても見つかりません。 無料公開はされていないのでしょうか? こうした一括置換機能はどんなソフトにも標準装備されている、といった記述もネット上で見つかるのですが、どこにあるのかわかりません。 もし無料公開がないのでしたら、このマクロの電子版や本の購入も考えています。 このマクロの入手経路をご存知の方おられませんか?

  • なぜ「マクロの記録」はaccessにはないのでしょうか?

    私はオフィス2003を使用していますが エクセル、ワード、パワーポイントには「マクロの記録」と言う機能があるのに accessにはないのでしょうか? この機能のおかげでものすごくVBAの学習ができてると思うのです。 もし理由を知っているからがいらっしゃったら教えてください。 よろしくお願いします。

  • Wordで複数の単語を一括置換するマクロはありませんか?

    Wordで複数の単語を一括置換するマクロはありませんか? 産業翻訳をしています。 現在は、テキスト文書に対し、手作業では不可能な大量の単語を、自作の辞書を使って一括置換しています。 水野麻子さんのブログhttp://ameblo.jp/saglasie/entry-10519224366.htmlによると、 この作業をWordでできて、さらに置換部分をハイライト表示したり、置換した単語のリストが自動的に作成されるマクロがあるようなのですが、ネット上で検索しても見つかりません。 無料公開はされていないのでしょうか? こうした一括置換機能はどんなソフトにも標準装備されている、といった記述もネット上で見つかるのですが、どこにあるのかわかりません。 簡易版なら同サイトで公開されていますが、ハイライト表示やリスト自動作成は付加されていません。 もし無料公開がないのでしたら、このマクロの電子版や本の購入も考えています。 このマクロの入手経路をご存知の方おられませんか?

  • パワーポイントで、どんなことまで可能か知りたいです。

    パワーポイントで、どんなことまで可能か知りたいです。 今、パワーポイントを使用して、いろいろな教育資料等を作成したいと考えています。 その中で、一番の問題は、私が、パワーポイントを使ったことがないことです・・・・・ 初心者のぶんざいですが、いろいろと凝ったものを作りたいと考えています。 そこで、パワーポイントで、どこまでのことが可能なのかを示した書籍やサイトがあれば紹介していただけないでしょうか?(できれば、そのやり方も説明してくれている方がいいです) 本屋にいって、何冊か読んだのですが、なんか一般的で物足りないです。 VBAを使えば、ゲームとか複雑なものをつくれると聞きました。 私は、例えば、人間の絵や画像を張り付けて、その人の手をクリックすれば、違うページに移動するとか してみたいです。(要は、画面上の座標を選択して、マクロで 違うアクションに移動できるかですかね) 別のソフトより、できれば 簡単そうなパワーポイントを使いたいのです。 すいませんがよろしくお願いします。

  • パワーポイントの翻訳について

    最近パワーポイントにて資料を作成することが多いのですが、 日英両方のバージョンを作っており、 非常に手間がかかっております。 もちろん日本語から先に作成するのですが、 英語版を作成するに当たって、 あらかじめエクセルか何かにリストアップした、 単語リストを元に一気に単語を置き換える事はできないものでしょうか? 業界で慣習的に使う単語が多いので、 いつも同じように訳せば良いのですが、 一つ一つ変えてるのが煩雑なので、 最初に一気に反映して、 後は手直しで済めば助かるなぁと思っています。 対訳表を元に置き換えを一単語ずつ行うのは、 既にやっているので、一気に変える方法を探しています。 ご存知の方いらっしゃいましたら、 アドバイスいただけませんでしょうか?

  • VBAコードの書き換え?置き換え?

    いつもお世話になっております。 VBAの超初心者です。 VBEでコードの置き換えは出来るのでしょうか? 例えば、コード内にある”マクロ”という文字列をVBAという変数に置き換えたい場合、現在は一つ一つコピペで置き換えています。エクセルの置換みたいな機能はないのでしょうか? どなたかよろしくお願いいたします。

専門家に質問してみよう