• ベストアンサー

wordマクロで条件に合う文のみフォント変更

wordの文章で、“(1)”という文字列を検索して次に現れる改行(vbCr)までの文章をゴシック体&ボールド体にしたいと思っています。 ファイル中に“(1)”から始まる文はいくつもあります。そのすべてを一括変換したいのですが、どのようなコードで出来るのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.9

なんか、、#7 が2重投稿になってますね(汗) > (1)テスト見出し1 > (2)テスト見出し2 > の部分のみがゴシック+太字の書式になれば良いのです。 結果の認識についてすれ違いはないですね。Word2002 では縦書きでも問題 ありませんでした。どうも、環境の違いが原因ぽいのですけど、断定できる だけの確証がありません。 では、#3 のコードで次のように修正したらどうなりますか?   .EndOf Unit:=wdParagraph, Extend:=wdExtend            ↓   .EndOf Unit:=wdSentence, Extend:=wdExtend

tanatetsu
質問者

お礼

思い通りの処理が出来るようになりました。 ありがとうございました。

tanatetsu
質問者

補足

出来ました!ありがとうございます。 コードの修正できちんと処理されました。 しかも、処理にかかる時間もほんの一瞬ですね。 とりあえず処理したい文字列のパターンがすべて正規表現できるかやってみます。

その他の回答 (9)

回答No.10

> (1)テスト見出し1 > (2)テスト見出し2 > の部分のみがゴシック+太字の書式になれば良いのです。 いまさら、ですが、試行錯誤してみたら、一般機能の置換処理でもできますね。  (Word2000) 置換ダイアログの[オプション]を開いて、ワイルドカード使用 にチェックを入れ、  検索する文字列: ^13[((【○◎]*^13               [ ] の中には、見出しの文頭に使っている記号や文字を入れます。  置換後の文字列: ^&               更に、[書式]-[フォント] から ゴシック体と太字を指定。 で [すべて置換] をクリックします。 (1)あああああ (2)いいいいい のように、置換対象となる文字列が2行続くと置換されないものがありますが、見出しの 次に必ず本文があるのでしたら、問題ないと思います。

tanatetsu
質問者

お礼

ありがとうございます。 なるほど、そういう方法もあるんですね。 それだったらマクロを自動記録するだけですね。 ですがよく見たら、置換対象となる文字列は2行続く事がありました…

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

うーーん。。すれ違いがあるようですね。 こちらが想定しているのは、例えば、下記のサンプルデータを Word にコピペ して、マクロを実行すると、 (1)テスト見出し1 (2)テスト見出し2 の部分だけが、ゴシック+太字の書式になり、本文はそのままのはずです。 【サンプルデータ】 (1)テスト見出し1  本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル。  本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル。 (2)テスト見出し2 SampleData SampleData SampleData SampleData SampleData SampleData SampleData SampleData SampleData. 【サンプルデータ ここまで】 意図したものとは違ってますか? 補足頂いた内容は、 (1)テスト見出し1 本文サンプル本文サンプル.... のように改行が入らないとそうなるかもしれませんが、これだとご質問の仕様 と違いますから.... > “(1)”という文字列を検索して次に現れる改行(vbCr)までの文章を > ゴシック体&ボールド体にしたい どこが食い違ってますか?

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

うーーん。。すれ違いがあるようですね。 こちらが想定しているのは、例えば、下記のサンプルデータを Word にコピペ して、マクロを実行すると、 (1)テスト見出し1 (2)テスト見出し2 の部分だけが、ゴシック+太字の書式になり、本文はそのままのはずです。 【サンプルデータ】 (1)テスト見出し1  本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル。  本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル本文サンプル。 (2)テスト見出し2 SampleData SampleData SampleData SampleData SampleData SampleData SampleData SampleData SampleData. 【サンプルデータ ここまで】 意図したものとは違ってますか? 補足頂いた内容は、 (1)テスト見出し1 本文サンプル本文サンプル.... のように改行が入らないとそうなるかもしれませんが、これだとご質問の仕様 と違いますから.... > “(1)”という文字列を検索して次に現れる改行(vbCr)までの文章を > ゴシック体&ボールド体にしたい どこが食い違ってますか?

tanatetsu
質問者

補足

仰るとおり、上のサンプルでいきますと、 (1)テスト見出し1 (2)テスト見出し2 の部分のみがゴシック+太字の書式になれば良いのです。 コピペしてマクロを実行しましたところやはり前回と同じように文章すべてがゴシック+太字になってしまいます。 となると、環境の違いでしょうか。改行がおかしいのかも知れません。 WORD2000の縦書きですが、これは問題ないですよね?

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

> ...改行されたときに元に戻りません。 すみません。意味がわからないです。具体的にどういうことなのでしょうか? 普通、書式は自動では元に戻らないと思いますが... > 処理がものすごく速い気がしますが。 Find を使ってキーワードを検索していますので、ループ回数は必要最小限に なってます。 > ...(1)や(2)のような簡単なパターンだけじゃなく“【”や“○”や > “◎”が含まれるものもあります #3 の下記の検索パターンを修正することで、いかようにも対応します。   .Text = "[\((][0-90-9]{1,}[\))]" '<-- 検索パターン 正規表現による検索なので、正規表現で表せる以上は何パターンあろうとも 一括で処理可能です。 上のパターンは前半角対応で(数字)を表しています。

tanatetsu
質問者

補足

度々すみません。 「改行されたときに元に戻らない」とは具体的に、 文書の最初に現れる(1)で太文字ゴシックに変換されるのですが、そのまま文書の最後まで変換されたままになってしまうという事です。 処理としましては、次の改行で元のフォント(明朝)に戻し、また該当文字列があった時に太文字ゴシックを開始する… と繰り返したいのです。 正規表現で表せれば、検索文字列がいくつあろうと一括処理が出来るんですね。 それは是非挑戦してみたいと思います。

回答No.5

ごめんなさい、訂正です。 > ChkChar = ")"  ChkChar = "(" で、括弧の向きが逆でした。

回答No.4

#1です。こんばんは。 > 実は、(1)以外にも当然(2)、(3)・・・とあるわけでして なのでしたら、私の方法の場合は次の2箇所を変更すればよいと思います。 ChkChar = "(1)"  '← 太字にする先頭文字列です。   ↓ ChkChar = ")"   '← 太字にする先頭文字列を指定 Select Case Selection & Selection.Next & Selection.Next.Next   ↓ Select Case Selection もちろん (1)、(2)、‥‥、以外には、( ) で囲まれる文字列が無いとしてのこと なのですが。 あと、 NXT: Loop の部分は、ただの Loop にしてください。 試行錯誤の名残でした。

tanatetsu
質問者

補足

度々ありがとうございます。 下にも書きましたが、パターンが結構いろいろありまして、一度の処理では不可能です。 30回この処理を実行すると、すごく時間がかかってしまいます。その中には“(1)”のように3文字のものもあれば、“【”のように1文字のものもあります。したがって、 Select Case Selection & Selection.Next & Selection.Next.Next の部分も検索文字数によって変えなければなりません。 まぁ、この辺は自分で考えないといけませんね。 もう少し自分でも試行錯誤してみます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

> 実は、(1)以外にも当然(2)、(3)・・・とあるわけでして、 なら、こんな感じでどうですか? (2)、(3)にも対応しますよ。 Sub Sample()      Dim Rng As Range   For Each Rng In ActiveDocument.StoryRanges     With Rng.Find       .Text = "[\((][0-90-9]{1,}[\))]" '<-- 検索パターン       .MatchWildcards = True       Do While .Execute(Forward:=True)         With Rng           .EndOf Unit:=wdParagraph, Extend:=wdExtend           ' フォント指定           .Font.Name = "MS ゴシック"           ' 太字指定           .Font.Bold = wdToggle           .Collapse wdCollapseEnd         End With       Loop     End With   Next Rng End Sub

tanatetsu
質問者

補足

度々ありがとうございます。 試してみましたが、(1)や(2)以降フォントが変わるのですが、改行されたときに元に戻りません。 このままコピペで実行してもダメなんでしょうか? 成功すれば、処理がものすごく速い気がしますが。 あと、具体的に拾いたい文字列は、(1)や(2)のような簡単なパターンだけじゃなく“【”や“○”や“◎”が含まれるものもあります。 全部で30パターン以上あります。 そうなると一気に処理をするのは難しいと思うので、文字列ごとにプロシジャを走らせるか、ループさせるかしかないと思うのですが、処理速度が気になります。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 こんな感じでも OK。....(1)というのは段落番号じゃないよね? Sub Sample()      Dim Rng As Range   For Each Rng In ActiveDocument.StoryRanges   'For Each Rng In ActiveDocument.StoryRanges        With Rng.Find       .Text = "\(1\)" '<-- 検索パターン       .MatchCase = False       .MatchByte = False       .MatchWildcards = True       Do While .Execute(Forward:=True)         With Rng           .EndOf Unit:=wdParagraph, Extend:=wdExtend           ' フォント指定           .Font.Name = "MS ゴシック"           ' 太字指定           .Font.Bold = wdToggle           .Collapse wdCollapseEnd         End With       Loop     End With   Next Rng End Sub

tanatetsu
質問者

お礼

どうもありがとうございます。 (1)は段落番号じゃなく文字列です。要するに見出しとして目立たせたいのです。 KenKen_SPさんのコードはまだ試せていませんが、是非試してみたいと思います。 (1)だけでなく他にもたくさんの文字列があり、今後は処理時間をいかに縮めるかという事でやってみようと思います。

回答No.1

私なりの方法例です。 検索機能を使わないで文頭から文字チェックしていますので、少々時間がかかります。 3行目の (1) はすべて半角にしてありますが、実際の文字列に書き換えてください。 また、「次に現れる改行(vbCr)」とありますが、ここでは [Enter] 単体で改行された 段落記号(Ascコード=13) のみを対象にしています。 なお、[Shist]+[Enter] の「任意指定の行区切」のAscコードは 11、[Ctrl]+[Enter] の 改ページは 12 です。 Sub Kakko1()  Dim ChkChar  ChkChar = "(1)"   '← 太字にする先頭文字列です。  Selection.EndKey Unit:=wdStory  ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="E"  Selection.HomeKey Unit:=wdStory  Do Until Selection.Range.Bookmarks.Exists("E")   Selection.MoveRight Unit:=wdCharacter, Count:=1   On Error GoTo Fin   Select Case Selection & Selection.Next & Selection.Next.Next    Case Is = ChkChar     Do Until Asc(Selection.Next) = 13      Selection.MoveRight Unit:=wdCharacter, Count:=1, _                     Extend:=wdExtend     Loop     With Selection.Font      .Name = "MS Pゴシック"      .Bold = wdToggle     End With   End Select NXT: Loop Fin: ActiveDocument.Bookmarks("E").Delete End Sub

tanatetsu
質問者

お礼

どうもありがとうございます。 お教え頂いたコードで一発解決しました。 自分ではこんなコードは書けませんでした。 実は、(1)以外にも当然(2)、(3)・・・とあるわけでして、そうなってくると処理時間が気になります。 kakko1(str As Stirng)として引数を設定し、メインのコードからいちいちコールしたのですが、やはりすごく時間がかかります。配列に文字列を入れ、For文で処理しようとしてのですがうまくいきませんでした。 この辺はまた考えたいと思います。 とりあえず処理は出来るようになりましたので本当に感謝しています。どうもありがとうございました。

関連するQ&A

  • ワードのマクロについて

    お世話になります。 エクセルのマクロについてはここでよくアドバイスをもらっていますが、今回ワードでの処理について教えてください。 1つのフォルダにワード文書がたくさん入っています。 各ワード文書に対し以下の操作を自動化させたい。 1.すべてを選択(ctrl+A) 2.置換で「改行」をすべて削除   あいまい検索のチェックをはずした上で 検索する文字列 ^p  置換後の文字列は「空白」   すべて置換 3.置換で「スペース」をすべて削除   あいまい検索のチェックをはずした上で 検索する文字列 ^w  置換後の文字列は「空白」   すべて置換     4.すべてを選択 5.メニュー→書式→文字種の変換→全角にチェック→OK    ですべての文字を全角にする まとめると「すべての改行、スペースを削除し、全文字を全角に統一する」 この作業をフォルダ内の全ワード文書に対して一括で処理できないでしょうか? ちなみにワード文書は元々メモ帳(*.txt)で作成されていたものをリネームソフトで拡張子を*.docに変換したものです。そのためファイルを閉じるときに「書式なし形式で使用できない機能が含まれています」と聞いてきますが「はい」でOKです。 アドバイスおねがいします。

  • EXCEL VBAにて、WORDへ置換

    EXCEL VBAにて、WORD文書への文字列置換を行っております。 文字列の置換自体はできています。 が、 置換文字列に「改行」(vbCRやvbLF)をいれて置換すると、 word側での表示が□になってしまいます。 vbCrだけでもvbLFだけでも、vbCRLFでも□と表示されてしまいました。 chr(13) & chr(10)でも□になりました。 EXCEL VBA にて WORDへ文字列置換する場合に送る、改行コード (たぶん「^p」と予測をつけているのですが)を chr関数等での 表示方法を教えてください。 EXCEL2003 WORD2003 よろしくお願いします。

  • 古いワード文を新しいワードで開くと文字化けする

    VISTA 機で作ったワード文を、8機で開くと、全てのかな文字が「平成ゴシック体」から「明朝体」に化けました。一括修正する方法を教えてください。

  • wordマクロで条件に合う文のみフォントサイズ変更

    wordの文章で、“(注)”もしくは“(注)”という文字列を検索して次に現れる空白改行までの文章を9ptにし変えた部分にマーカーをしたいと思っています。 (注)から始まる文章は (注)あああああ。 (注)ああああ。いいいいい。 (注)ああああ。   (1)いいいいい。     (1)ううううう。     (2)えええええ。 等のパターンがあります。現行では”ああああ”しか9ptになりませんが本当は全て9ptにしたいと思っています。どなたがご教授願います。 Sub SizeChenge9() Dim Rng As Range For Each Rng In ActiveDocument.StoryRanges With Rng.Find .Text = "[\((][注][\))]" .MatchWildcards = True Do While .Execute(Forward:=True) If Rng.Information(wdWithInTable) = False Then With Rng .EndOf Unit:=wdSentence, Extend:=wdExtend .Font.Size = 9 .HighlightColorIndex = wdPink .Collapse wdCollapseEnd End With End If Loop End With Next Rng End Sub

  • ワードでゴシックの文字を太く表示できないものでしょうか

    MSワードで11ポイントで文を作成しているとき、文字をゴシックにしても太く表示できず、明朝体と区別しにくく困っています。明朝でボールドにすると太く表示されるのですが、印刷するとあまり太くならず困ります。 ゴシックでボールドにすると太く表示されるのですが、印刷すると太くなりすぎて困ります。 また、表示を200%にするとゴシックが太字になりますが、これでは文書作成がやりにくくて困ります。 みなさん、どうしているのでしょうか? 何か良い方法はないものでしょうか?

  • ワードで,特定の文字だけ,字体を一括変換する方法

    ワードで,特定の文字だけ,字体を一括変換する方法はないでしょうか? たとえば,明朝体で書かれた数十ページある文章の中で,数十か所ある「図」という文字だけを,ゴシック体に一括変換するという方法です。 ご存知の方がいらっしゃいましたら,どうぞ宜しくお願い致します。

  • ワード文書中の特定フォントの変更を教えて

    ワードで作成した文書で、文中のあちこちでゴシックで書いている文字をHGゴシックEなどの他のフォントに一括して変更する方法を教えてください。 なお、ゴシックで書いている文字はまちまちであり、見出しだけではありません。

  • フォントを変更する文字が選択できない

    超初心者でご迷惑をかえりみず、おすがりします。 教えて下さい。 Wordで文章を作り、文字を選択しょうとツールバーのフォントの▼ボタンをクリックしたのですが、(MSゴシック) とか、何とかゴシックが出てくるだけで、明朝も行書体も 出ないので困っています。 どうしたらいいのでしょうか? よろしくお願いします。

  • 契約書に使うフォントは何が良いのでしょう。

    契約書を作成することが多いのですが、ふと考えたことがあります。 通常、ワードの明朝体をボールドにしているのですが、UI Gothic 等、他のフォントで作るのは良くないのでしょうか。 社内に既にあるのをみても、ゴシックを使っているのは無いですが、個人的にはゴシックも見やすくていいと思います。 また、大きさはいくつが適当なのでしょう。

  • リッチテキストボックス内のフォント変更

    VB.NETプログラミングしています。 基礎的なことだと思うのですが、 調べてもわかりませんのでご教示ください。 RichTextBoxを使ってテキストエディタを作っています。 このリッチテキストボックス内でキーダウンイベントを発生させ、 選択されている文字のフォント変更(例えばボールド体やイタリック体、下線付加)したいのですができません。 ワードのような機能を付加したいだけなのですが、うまくいきません。 つまり、 If e.Control = True Then  With RichTextBox1   Select Case e.KeyCode     Case Keys.B   (選択されている文字をボールド体にして、    ボールド体の部分は非ボールド体にする) End Select End With EndIf の中の 「選択されている文字をボールド体にして、ボールド体の部分は非ボールド体にする」という処理ができません。 ご存知の方、ご教示ください。

専門家に質問してみよう