Wordのマクロをはじめると、必ずといっていいほど必要になるのがワイルドカード検索・置換です。
そのときの頼りになる相棒になる書籍の紹介です。
水野麻子さん が電子ブックとして提供されています。
ワイルドカート検索とは、以下のようなことです。
文字列の検索に、具体的な文字列ではなく、文字並びのパターン※を指定して検索すること。
※:文字並びのパターン例
[0-9]、[a-zA-Z] など。
簡単な事例は、こちらの第4回ワードマクロ勉強会での配付資料 (PDF画面が別窓で開きます)をご覧ください。
私がワードマクロを勉強しはじめた3年ほど前、マクロに利用する文字並びパターンを作り出すのに非常に苦労したことを思い出します。
そもそも、どのような組み合わせが可能なのか?また、何を調べたらワイルドカードのルールが説明されているのか、全くわからなかったからです。
当時参考にしていたのは、西上原さんの「Wordで実践 やさしくて役に立つ「マクロ」事例集 」でした。
この本には、ワイルドカードを用いたマクロの事例が多数掲載されており、具体的な使い方を理解するのに大変役に立ちました。
そして、今、ワイルドカード検索を調べるツールは本書、誰も教えてくれなかった Word効率アップ術 です。
ワイルドカードの基本ルールから応用例まで60例以上が掲載されています。
ワイルドカードって何に使えるの?と思われているみなさま(私もかつてはそうでした)、翻訳のみならず、文章の校正やチェックに欠かせないツールであることが理解できると思います。
それと、ワイルドカードの使い方だけではなく、ワイルドカードを使いこなすヒントも本書から読めると思います。
ある意味、アイディア勝負という面がありますね。
「●●を■■に置き換えたい」という課題があった場合に、どうやってそれを実現するのか?をリアルに体験できます。
水野麻子さんがどうやって実現するのかを垣間見ることは、発想の視点を共有することでもあると思います。
たとえば、もう少し複雑な「試験問題にあらかじめ入れた括弧の中の回答部分だけが『空欄』になるように印刷したい。」という課題も、ワイルドカードで解決できるのです。
これを言い換えると、「括弧の中だけ印刷しない」というクイズですよね。
では、印刷しないようにするにはどうしたらいい?と徐々に「Wordの書式」に翻訳していきます。
これを1ステップでできればいいのですが、別に複数ステップで実現してもいいわけです(具体的な方法は、本書に掲載されていますからご覧ください)。
そういう柔軟な発想にふれつつ、日常のちょっとした課題をクイズ感覚で解いていくのは楽しいことだと思います。
そんなふうに、仕事の楽しさの幅をひろげてみてください。
コメント
-
19. Re:Re:kinuasaさんへ>Re:Re:Re:マクロ続き>Re:Re:Re:( )の中を印刷しない方法
>kinuasaさん
>"Temporary"をTrueにしておくとアプリケーションを終了したときにAddで追加したコントロールを自動的に削除してくれるようになります(今試したら何故か効いていませんが…)。
私もこのあたり、研究が必要だと思っております。
以前試したときにはうまくいったように思いますが、うろ覚えです。
右クリックのショートカットメニューも、Temporary = Trueにしても消えなかったり、ときおり対処に苦しみます。
>いま試したらTemporary = Trueが効いていなかったので、閉じる際にボタンを削除する処理も入れておいた方が安全ですね(^^;
はい。ありがとうございます。
>コマンドバー周りはWordだけでなくExcelでも同じですので、Wordマクロに詳しくなくても回答できるんですよね(^^;;;
私もツールバーの参考書は、エクセルのVBA本を使っています。
いつもいろいろとご教示ありがとうございます。
-
18. Re:kinuasaさんへ>Re:Re:Re:マクロ続き>Re:Re:Re:( )の中を印刷しない方法
こんにちは。
> ・標準ツールバーに作成されたボタンは、任意のツールバーやサブメニューにドラッグできる。(Temporary:=Trueってこのためかな?)
"Temporary"の意味はちょ~っと違います(^^;
"Temporary"をTrueにしておくとアプリケーションを終了したときにAddで追加したコントロールを自動的に削除してくれるようになります(今試したら何故か効いていませんが…)。
このあたりはWordのヘルプに詳しい説明が書いてありますので、一度見てみることをオススメします(^^)> 文書を開くたびにツールバーにボタンを配置することはまだやったことがなかったので、これまたヒントをありがとうございます。
いま試したらTemporary = Trueが効いていなかったので、閉じる際にボタンを削除する処理も入れておいた方が安全ですね(^^;
> そのときは、オートコレクトのトグル設定をボタンにしていただいたのですが、ちょうど2年前くらいでした。
あら~!そんなこともありましたか!(^^;
コマンドバー周りはWordだけでなくExcelでも同じですので、Wordマクロに詳しくなくても回答できるんですよね(^^;;; -
15. kinuasaさんへ>Re:Re:Re:マクロ続き>Re:Re:Re:( )の中を印刷しない方法
>kinuasaさん
すごい...(しかも真夜中に...)
ありがとうございます、無事、解決できました。実はネットで検索したものを見よう見真似で書いてみたものなので、書いてる本人、ActionControlプロパティというものをよく理解しておりません。
r(・ε・ )Action...?はて...?サンプルコードも完璧に理解できたわけではないのですが、ボタンの追加などの要領がわかり、応用することができました。
なんとなくわかったこと。
・標準ツールバーに作成されたボタンは、任意のツールバーやサブメニューにドラッグできる。(Temporary:=Trueってこのためかな?)どうもありがとうございました。(・∀・)ノ゛
-
13. Re:Re:マクロ続き>Re:Re:Re:( )の中を印刷しない方法'ThisDocument
Option ExplicitPrivate Sub Document_Open()
On Error Resume Next
Application.CommandBars("Standard").Controls("SampleButton").Delete
On Error GoTo 0With Application.CommandBars("Standard").Controls.Add(Type:=msoControlButton, Temporary:=True)
.FaceId = 59
.OnAction = "button_OnAction"
If Application.Options.PrintHiddenText Then
.Caption = "PrintHiddenText:True"
.State = msoButtonDown
Else
.Caption = "PrintHiddenText:False"
.State = msoButtonUp
End If
End With
End SubPrivate Sub button_OnAction()
Application.Options.PrintHiddenText = Not Application.Options.PrintHiddenText
Debug.Print "PrintHiddenText:" & Application.Options.PrintHiddenText
With Application.CommandBars.ActionControl
If Application.Options.PrintHiddenText Then
.Caption = "PrintHiddenText:True"
.State = msoButtonDown
Else
.Caption = "PrintHiddenText:False"
.State = msoButtonUp
End If
End With
End Sub -
11. Re:マクロ訂正ι(´Д`υ)>Re:Re:Re:( )の中を印刷しない方法
>おちょこちょいさん
こんばんは。
ざっと見た感じですが、>Set myButton = Application.CommandBars.ActionControl
で、myButtonの設定において、具体的に対応するボタンを特定されていないように感じました。
そのためにオブジェクト変数が設定されていないというエラーになったのではないでしょうか。
私は上記のような書き方はしたことがありませんので、実際の所はわかりませんが。
私が知っているボタンの設定だと、
Set myButton = Application.CommandBars("ツールバーの名称").Controls("ボタンの名称")
としています。
あと、起動時の設定については、
ThisDocumentにAutoExecとして登録しておけば、ワード起動時に実行してくれます。
今週は時間がなくて記事がかけませんが、上記が私が知っていることです。
わかりにくくてすみませんが、何かのヒントになれば幸いです。
-
9. マクロ訂正ι(´Д`υ)>Re:Re:Re:( )の中を印刷しない方法
コピペしくじりました...
Sub TogglePrintHiddenText()
'隠し文字の印刷切り替え
Dim myButton As CommandBarButton
Set myButton = Application.CommandBars.ActionControlOptions.PrintHiddenText = Not Options.PrintHiddenText
If Options.PrintHiddenText = True Then
myButton.State = msoButtonDown '←注1(訂正→追加しました)
Else
myButton.State = msoButtonUp
End If
Set myButton = NothingEnd Sub
-
8. マクロ続き>Re:Re:Re:( )の中を印刷しない方法つづき
あと、前回少し間違えたことを書いてしまったのですが、隠し文字はオプション>印刷>同時に印刷する項目「隠し文字」で印刷切り替えができました。また、行内以外のオブジェクトには適用できないようです。それと、隠し文字印刷をボタンでトグルできるように考えてみました。
隠し文字を印刷するモードのときは、モードを目視確認できるようにボタンをオン状態にし、オンオフを切り替えるというものです。Sub TogglePrintHiddenText()
'隠し文字の印刷切り替え
Dim myButton As CommandBarButton
Set myButton = Application.CommandBars.ActionControlOptions.PrintHiddenText = Not Options.PrintHiddenText
If Options.PrintHiddenText = True Then
Else
myButton.State = msoButtonUp '←注1
End If
Set myButton = NothingEnd Sub
(゚Д゚)がっっっ!!
印刷モードでは動作するのですが、VBEでF5実行すると、注1の部分が「実行時エラー'91':オブジェクト変数またはWithブロック変数が設定されていません。」となってしまいます。
なぜでしょう??
さらに、
(1)「ボタン+コマンド名」のようにイメージとテキストを表示しているとき、モードに応じてCaptionを変更したい。
(・∀・)隠し文字印刷モードだよ
(・∀・)隠し文字印刷しないよ(2)マクロを実行しないとオンオフが正しく反映されないため、文書を開いた時にオンオフ状態を取得して反映したい。
も実装したかったのですが、まだそこまで力がありません。
どなたかよい方法をご存知の方、お教えください。 -
2. ( )の中を印刷しない方法いつもお世話になっているので、たまには役に立ちそうなことを。
( )の中を印刷しないためには、マクロ以外にもこんな方法があります。
△は半角スペースとします。・鎌倉幕府は(△1192△)年、(△源頼朝△)によって作られた。△~△のテキストに隠し文字(2003では書式>フォント>フォントタブの中にある)を設定すると、印刷時には
・鎌倉幕府は( )年、( )によって作られた。
というように、隠し文字を抜かして印刷されます。半角スペースを入れないと()のように狭いかっこになります。
隠し文字にはてんてん下線が引かれ通常印刷文字と区別がつくようになっており、画像やテキストボックスなどのオブジェクトにも適用できます。
採点用に印字したいときは、書式置換でオフにするか、Ctrl+Aで全文書選択して「□隠し文字」のチェックがオフになるまでクリックします。この機能をよく使いそうなら、ボタンやショートカットを登録したり、すべての隠し文字のオフ化をマクロにすると使いやすくなると思います。
ちなみにいま、水野麻子さんの「語学力ゼロで8ヶ国語翻訳できるナゾ」を読書中です(・∀・)9。
「誰も教えてくれなかった Word効率アップ術」はまだ持っておりませんが、CDつきで書店販売だとなお嬉しかったかも...。