- ベストアンサー
Word2003でマクロを使って特定文字列の大きさを調整したい
現在Word2003で文書を作っているのですが、本文中(脚注は対象外)の「()」と「〈〉」内の文字列(カッコそのものを含む)の大きさを一括で変換したいと思っています。 今のところ9ptで固定してよいだろうと思いますが、あとあと変更できるように、「カッコ内文字列」など任意のスタイルに変換してくれるとより望ましいです。 そういった作業にはマクロが便利だと聞いたのですが、マクロの知識はほとんどないため作り方が分かりません。 どなたか作り方やサンプルを示してくださいませんでしょうか。 お願いします。 ちなみに、カッコは当然すべて閉じられていますが、あるいは閉じ忘れのカッコが1つか2つくらいあるかも知れません。 そういった場合も考慮してくださると大変ありがたいですが、無理なら構いません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 最初に、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
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #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件出てしまいました。
お礼
ありがとうございます。 お蔭様でカッコそのものもちゃんと変換されるようになりました。 今後はなるべく皆さんのお手を煩わせないようにしたいのですが、Wordマクロの勉強は思ったよりも大変そうで、少し戸惑っています。 何はともあれ、今回は本当にありがとうございます。 重ねてお礼申し上げます。
- assault852
- ベストアンサー率48% (1364/2797)
回答1の者です。失礼します。 ちゃんと回答してくれる方がいてよかったです。 VBA(マクロ)の知識がない方に、VBAを使わないと解決できないような仕事を頼むことになる、それも期限が迫っているような状態で。 そんな仕事の進め方をされている職場があるということが、私自身とても信じ難かったので、回答1のような回答をしてしまいました。
お礼
ご心配くださりありがとうございます。 実は職場でなく、大学院の研究室で今回のようなマクロが必要になったのです。
- assault852
- ベストアンサー率48% (1364/2797)
回答にならないのですが。 VBA(マクロ)に関する質問は、はじめから教えてもらうのではなく、ご自分である程度学習されてから、要点を絞って質問された方が宜しいと思います。基礎がない方にご説明してもあまり身にならないのではないかと思います。
お礼
すみません。 現在急いでいるもので、マクロについてちゃんと勉強するだけの余裕がありません。 後日落ち着いたらちゃんと勉強してみようと思います。 ご忠告ありがとうございます。
お礼
ありがとうございます。 マクロを完全な形でお示しくださり、感謝の言葉もありません。 お蔭様でカッコ内文字列の一括変換に成功しました。 ただ、このマクロですとカッコ内の文字列だけが9ptに変換され、カッコそのものは変換の対象外になってしまっているようです。 カッコそのものを含めて変換するにはどうすればよいのでしょうか。 恐らく myPat = Array("\([^\)]+\)", "([^\)]+)", "\<[^\>]+\>") の行を少し修正すればよいのではないかと思いますが、不勉強なものでその修正の仕方すら分かりません。 できましたら、その点についてもご教授願えませんでしょうか。 宜しくお願いいたします。