• ベストアンサー

Word2003でマクロを使って特定文字列の大きさを調整したい

現在Word2003で文書を作っているのですが、本文中(脚注は対象外)の「()」と「〈〉」内の文字列(カッコそのものを含む)の大きさを一括で変換したいと思っています。 今のところ9ptで固定してよいだろうと思いますが、あとあと変更できるように、「カッコ内文字列」など任意のスタイルに変換してくれるとより望ましいです。 そういった作業にはマクロが便利だと聞いたのですが、マクロの知識はほとんどないため作り方が分かりません。 どなたか作り方やサンプルを示してくださいませんでしょうか。 お願いします。 ちなみに、カッコは当然すべて閉じられていますが、あるいは閉じ忘れのカッコが1つか2つくらいあるかも知れません。 そういった場合も考慮してくださると大変ありがたいですが、無理なら構いません。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 最初に、Wordのマクロの質問は、内容はどのようなものにしても、書く人の絶対数が少ないし、マニュアルもありませんので、勉強のしようがありません。どのような質問でも、回答する人にとって「挑戦的(Challenging)」なんです。---Challengingは、別の意味があります。(^^; それに、Wordは、マクロよりも難しい、フィールドコードがあります。 ThisDocument に登録してください。 ただ、今の段階では、 「()」と「〈〉」とは書かれていますが、このマクロは、全角・半角の区別をしてしまいますので、「〈〉」側の半角に相当するものがありません。 ここで、増やせば、他のパターンも入ります。 myPat = Array("\([^\)]+\)", "([^\)]+)", "\<[^\>]+\>") たぶん、その行中に、閉じ括弧がない場合や、中が何もない括弧・括弧閉じは選択されないはずです。あまり、大きなファイルは、もしかしたら、うまくいかない可能性があります。 --------------------------------------------------------- 'Option Explicit 'ここで換えます。 Const MYFONTSIZE As Double = 9 'フォントサイズ Sub FontsizeChangeMacro() Dim objRegExp As Object 'RegularExpression Dim mySelection As Selection Dim myPat As Variant Dim pt As Variant Dim Matches As Object Dim Match Dim mData() Dim v As Variant Dim i As Long 'オブジェクトの設定 Set objRegExp = CreateObject("VBScript.RegExp") myPat = Array("\([^\)]+\)", "([^\)]+)", "\<[^\>]+\>") Application.ScreenUpdating = False Selection.HomeKey Unit:=wdStory Selection.EndKey Unit:=wdStory, Extend:=wdExtend Set mySelection = Selection   With objRegExp   For Each pt In myPat     .Global = True     .IgnoreCase = False     .Pattern = pt     Set Matches = .Execute(mySelection)      For Each Match In Matches        ReDim Preserve mData(i)        mData(i) = Match.Value        i = i + 1   Next Match   Next pt   End With   If i = 0 Then     MsgBox "フォントを変える対象がありません。"     Exit Sub   End If   For Each v In mData    SearchWordProc v   Next   Application.ScreenUpdating = True   Selection.HomeKey Unit:=wdStory   Set objRegExp = Nothing End Sub Sub SearchWordProc(ByVal myStr As String) Selection.Find.ClearFormatting  With Selection.Find   .Text = myStr   .Replacement.Text = ""   .Forward = True   .Wrap = wdFindContinue   .Format = False   .MatchCase = False   .MatchWholeWord = False   .MatchByte = False   .MatchAllWordForms = False   .MatchSoundsLike = False   .MatchWildcards = False   .MatchFuzzy = False  End With    Selection.Find.Execute    Selection.MoveStart Unit:=wdCharacter, Count:=1    Selection.MoveRight Unit:=wdCharacter, Count:=-1, Extend:=wdExtend    Selection.Font.Size = MYFONTSIZE    Selection.Collapse End Sub

world0621
質問者

お礼

ありがとうございます。 マクロを完全な形でお示しくださり、感謝の言葉もありません。 お蔭様でカッコ内文字列の一括変換に成功しました。 ただ、このマクロですとカッコ内の文字列だけが9ptに変換され、カッコそのものは変換の対象外になってしまっているようです。 カッコそのものを含めて変換するにはどうすればよいのでしょうか。 恐らく myPat = Array("\([^\)]+\)", "([^\)]+)", "\<[^\>]+\>") の行を少し修正すればよいのではないかと思いますが、不勉強なものでその修正の仕方すら分かりません。 できましたら、その点についてもご教授願えませんでしょうか。 宜しくお願いいたします。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 #2の回答者です。 >このマクロですとカッコ内の文字列だけが9ptに変換され、カッコそのものは変換の対象外になってしまっているようです。 すみません、気を回してしまったのです。 本来は、括弧付きのほうが簡単です。(^^; >myPat = Array("\([^\)]+\)", "([^\)]+)", "\<[^\>]+\>") ここでは、括弧と中の文字を取得しています。そのほうが簡単ですからね。 中身だけだと、一般の文章の中で、同じ文字があるとヒットしてしまうからです。 最後から、5行目・6行目 >   Selection.MoveStart Unit:=wdCharacter, Count:=1 >   Selection.MoveRight Unit:=wdCharacter, Count:=-1, Extend:=wdExtend を削除すれば、括弧も一緒に変換されます。 なお、Excelとは違い、マクロがうまく行かなかった場合は、Ctrl + Z (戻す)で戻してくれます。 以下は、余談(よけいな話) ------------------------------------------------------- #1の方のお話は、ここでも良く聞く話で、驚かされことがあります。 Wordマクロは、掲示板でも、あまり解決していないようです。海外の掲示板には、この2 バイト文字の問題がないので、あまり応用できるものが少ないです。まして、未だに、日本では、JISが主流で、Unicode との整合性で、ややこしくさせています。 Office VBAでは、Excel、Word、Outlook, Access の四つは、一通り使いこなせない、出来ると認められないのですが、それにしては、マニュアルが少なすぎます。特に、Word VBAの日本で出版された過去の書籍は、プレミアがついてしまい、元値の4倍ぐらいの値段がします。今、流通している書籍は、2冊のテクニック集だけです。このひとつの本の書籍の著者は、マクロを作ってくれるけれども、有料のようです。 もし、勉強したいとなると、今のところ、英語版になってしまうのではないかと思います。それと、困った問題が、今、発展しつつあるのは、Word VBAは、オブジェクト指向というわけでもないのですが、どうやら、Excelよりも先に、クラス・インスタンスを必要とされるようで、最初に、クラス側に作ってやらないと動かないものがあります。ますます、一般のVBAプログラマには手の届かない存在になってしまうようです。すでに、ここの掲示板でも、Wordマクロで、私の回答した中に1件出てしまいました。

world0621
質問者

お礼

ありがとうございます。 お蔭様でカッコそのものもちゃんと変換されるようになりました。 今後はなるべく皆さんのお手を煩わせないようにしたいのですが、Wordマクロの勉強は思ったよりも大変そうで、少し戸惑っています。 何はともあれ、今回は本当にありがとうございます。 重ねてお礼申し上げます。

  • assault852
  • ベストアンサー率48% (1364/2797)
回答No.3

回答1の者です。失礼します。 ちゃんと回答してくれる方がいてよかったです。 VBA(マクロ)の知識がない方に、VBAを使わないと解決できないような仕事を頼むことになる、それも期限が迫っているような状態で。 そんな仕事の進め方をされている職場があるということが、私自身とても信じ難かったので、回答1のような回答をしてしまいました。

world0621
質問者

お礼

ご心配くださりありがとうございます。 実は職場でなく、大学院の研究室で今回のようなマクロが必要になったのです。

  • assault852
  • ベストアンサー率48% (1364/2797)
回答No.1

回答にならないのですが。 VBA(マクロ)に関する質問は、はじめから教えてもらうのではなく、ご自分である程度学習されてから、要点を絞って質問された方が宜しいと思います。基礎がない方にご説明してもあまり身にならないのではないかと思います。

world0621
質問者

お礼

すみません。 現在急いでいるもので、マクロについてちゃんと勉強するだけの余裕がありません。 後日落ち着いたらちゃんと勉強してみようと思います。 ご忠告ありがとうございます。

関連するQ&A