一括置換翻訳の支援ソフト「ぱらぱら」のユーザーの方から、デフォルトで用意されている蛍光ペン以外の色を使いたいという要望をいただきました。
特定の蛍光ペンの色を別の色に変換するマクロをご紹介いたします。
<目次>
このマクロでできること
蛍光ペンの特定の色を指定して、その蛍光ペンのみを別の特定の色に変換します。
ただし、連続して複数の蛍光ペンが付けられている場合で、さらに単独でスペースが着色されている場合には、その色を変換することができませんので、ご了承ください。
以下のようになります。
例として、赤い蛍光ペンを青い蛍光ペンに変えます。
(実行前)
(実行後)
このように、連続して複数の色の蛍光ペンが並ぶ場合で、単独の半角・全角スペースに着色された蛍光ペン(矢印で示した赤色部分)は変換できません。
さらに、この処理にはパソコンに負荷を与えますので、フリーズしたように見えますが、少し辛抱強くお待ちください。
またフリーズしたときのために、念のため文書を保存してからこのマクロを実行してください。
マクロの解説
赤と青以外にも様々な色で使えます。「特定の蛍光ペンを消すマクロ」でご紹介した色を使ってみてください。
なおこのマクロを作成にあたり、有益な情報をコメントしてくださる「イニシャルKさん」から多くのアドバイスをいただきました。
どうもありがとうございました。
マクロ
Sub Pen_Replace() '特定の蛍光ペンの色を別の蛍光ペンに変換 Dim myRange As Range Set myRange = ActiveDocument.Range(0, 0) With myRange.Find .Forward = True .Text = "" .Wrap = wdFindStop .Format = True .Highlight = True Do While .Execute = True Do While myRange.HighlightColorIndex = wdUndefined myRange.MoveEnd Unit:=wdCharacter, Count:=-1 Loop If myRange.HighlightColorIndex = wdRed Then myRange.HighlightColorIndex = wdBlue End If myRange.Collapse direction:=wdCollapseEnd Loop End With Set myRange = Nothing End Sub
コメント
-
4. Re:■■処理に時間がかかる場合のマクロに関して(続き)
D*isukeさん
お返事が遅くなりまして大変失礼いたしました。
1週間ほど海外旅行に行っておりまして、昨日帰国いたしました。
コメントおよびマクロコードも、どうもありがとうございます。
早速いただいたコードを試してみました。
これいいですね!
実は、StatusBar プロパティのことを知ったのはごく最近なのですが、まだ使ったことがありませんでした。
現在私が作成しているマクロは、このような待ち時間がかかるものがいくつかありますので、さっそく使わせていただきます。
本当にどうもありがとうございました。
-
3. ■■処理に時間がかかる場合のマクロに関して(続き)具体的には、このページのマクロであれば、
下記のように書くことができます。Sub Pen_Replace()
Dim myRange As Range
Set myRange = ActiveDocument.Range(0, 0)
Dim count As Integer
count = 0 '動作していることを示すためのカウンタ(新たに追加)With myRange.Find
.Forward = True
.Text = ""
.Wrap = wdFindStop
.Format = True
.Highlight = True
Do While .Execute = True
Do While myRange.HighlightColorIndex = wdUndefined
myRange.MoveEnd Unit:=wdCharacter, Count:=-1
'//============================================
DoEvents
count = count + 1
Application.StatusBar = "処理実行中" & String(count Mod 5, ". ")
'============================================//
Loop
If myRange.HighlightColorIndex = wdRed Then
myRange.HighlightColorIndex = wdBlue
End If
myRange.Collapse direction:=wdCollapseEnd
Loop
End With
End Sub今回のマクロに関しては、
PCの性能や文章量によっては、ほとんど時間がかからず
ここまでする必要性が薄いので、
省略されたのかもしれませんが、
気になったのでコメントさせて頂きました。ご参考までに。 -
1. 処理に時間がかかる場合のマクロに関してはじめまして。
趣味でプログラムを書いているD*isukeと申します。
上田様のサンプルコードはたびたび参考にさせて頂いています。さて、
不躾なコメントで失礼かとは存じますが、マクロで時間のかかる処理を行う場合は、
> フリーズしたように見えますが、少し辛抱強くお待ちください。
と書くのではなく、
処理中である旨をマクロ側で表示した方がいいと思います。ユーザーからすると、
・PCが本当にフリーズしているのか
(※ 処理が無限ループに陥っている場合を含む)
・まだマクロの処理が続いているのか
は、通常 "判別できない"ため、
画面が長時間固まった場合は、
ユーザーからフリーズしたと判断され易く
ユーザーを不安にさせることがあるのに加え上記コメントは実質的に
「フリーズしたように見えることもある一方、
実際にフリーズしていることもあります。」
と書いているに過ぎず、
ユーザーからすれば、この2つの状態を判別できない以上、
さほど意味があるとはいえないのではないかと思います。このため、
比較的処理に時間がかかることが分かっている場合は、
たとえテストコードであっても、
「マクロの処理状況が見えないうえに、Wordの画面が操作不可能になる」
という状況は避ける方がよいかと思います。(その方が、ユーザーにとって親切というだけでなく、
コードを書く/デバッグする際にも
マクロの実行状況を把握でき便利かと思います。)
関連記事
- 【Word VBA】Word文書中の蛍光ペンのテキストを抽出するWordマクロ
- 【Word VBA】Word文書中の蛍光ペンのテキストを抽出するWordマクロ(色指定版)
- 【Word VBA】「自動」以外の文字色の文字列を蛍光ペンで着色する
- 【Word VBA】カーソル位置の段落の蛍光ペンをすべて解除するWordマクロ
- 【Word VBA】カーソル位置の段落を蛍光ペンで着色するWordマクロ
- 【Word VBA】カーソル直前の蛍光ペンを解除するWordマクロ
- 【Word VBA】キーワードを蛍光ペンで着色するWordマクロ
- 【Word VBA】キーワードを蛍光ペンで着色するWordマクロ(その2)
- 【Word VBA】全角のコンマとピリオドを句読点に変換するWordマクロ
- 【Word VBA】全角のコンマとピリオドを句読点に変換するWordマクロ(その2)
- 【Word VBA】半角数字を蛍光ペンで着色するWordマクロ
- 【Word VBA】変更履歴の挿入箇所を蛍光ペンで着色するWordマクロ
- 【Word VBA】変更箇所を蛍光ペンで着色するWordマクロ
- 【Word VBA】書式を蛍光ペンで着色するWordマクロ(その1)
- 【Word VBA】書式を蛍光ペンで着色するWordマクロ(その2)
- 【Word VBA】書類の蛍光ペンをすべて解除する
- 【Word VBA】書類の蛍光ペンをすべて解除するWordマクロ(2)
- 【Word VBA】書類の蛍光ペンをすべて解除するWordマクロ(3)
- 【Word VBA】書類の蛍光ペンをすべて解除するマクロ(2)
- 【Word VBA】特定の文字列のフォント名を変更するWordマクロ
- 【Word VBA】特定の色の蛍光ペンを検索することはできるのか?
- 【Word VBA】特定の色の蛍光ペンを消すWordマクロ
- 【Word VBA】特定の蛍光色にカーソルをジャンプするWordマクロ
- 【Word VBA】特許明細書の図面番号を白抜き文字にする
- 【Word VBA】用語集を用いて蛍光ペンで着色する(Unicodeのテキストファイルのリストを利用)
- 【Word VBA】英文クレーム内の用語を着色するWordマクロ
- 【Word VBA】蛍光ペンのある段落を丸ごと抽出するWordマクロ
- 【Word VBA】蛍光ペンの色を入れ替えるWordマクロ
- 【Word VBA】蛍光ペンの色を判定するWordマクロ
- 【Word VBA】蛍光ペンへジャンプ