【Word VBA】選択範囲を変更するWordマクロ

2012年12月27日

上書き翻訳での効率化は、早く文字列を正確に選択して移動させることである程度実現できます。

この方法を自分なりに考えていくことが楽しかったりもします。

ぱらぱら を使った上書き翻訳をする場合にご利用ください。

ライターの方やチェッカーの方にも役に立てるかもしれません。

このマクロでできること

選択範囲を指定した記号まで広げたり狭めたりします。

カーソルよりも右方向(文末に向かった方向)にだけ動作します。

このマクロでは、「。、?!:;.,?!:;」を基準に範囲指定します。

マクロの解説

前回の「カーソルの移動」マクロと同じような考え方になっています。

myCset の定数をPrivate キーワードで定義しています。

このように、特定のプロシージャー(Sub からEnd Subまでのプログラム文)の外に定数を宣言することができます。

Privateとすると、このモジュール内のすべてのプロシージャーからこの定数を参照することができます。

複数のプロシージャーで共通した定数であれば、このように一か所で定義するとわかりやすいですね。

変更するときにも、プロシージャーごとに変更する手間が省けるので便利です。

前回のカーソルの移動マクロと同じモジュールに入れる場合には、「Private Const myCset As String = "。、?!:;.,?!:;"」部分は省略してください(入力不要です)。

3行目~25行目が選択範囲を狭めるためのマクロです。

28行目~39行目が選択範囲を広げるためのマクロです。

マクロ


Private Const myCset As String = "。、?!:;.,?!:;"

Sub 選択範囲_狭める()

 Dim SS As Long
 Dim SE As Long
 Dim myRange As Range

 SS = Selection.Start
 SE = Selection.End
 
 If SS = SE Then End
 
 Set myRange = Selection.Range
 myRange.MoveEndUntil cset:=myCset, Count:=wdBackward
 
 If myRange.Start < SS Then
   myRange.Start = SS
 Else
   myRange.End = myRange.End - 1
 End If
 
 myRange.Select

End Sub


Sub 選択範囲_広げる()

 Dim myRange As Range
      
 Set myRange = Selection.Range
 
 myRange.End = myRange.End + 1
 myRange.MoveEndUntil cset:=myCset, Count:=wdForward
 
 myRange.Select

End Sub

コメント

  • 12. Re:できました

    >craneさん

    お試しいただきありがとうございます!

    > このやり方でよかったのか、ほかのやり方があるのかと思いましたが、これでいいのですね。

    はい。動いていたらいいと思います(笑)。

  • 11. できました

    【Wordマクロ】選択範囲を全角・半角で拡大させる

    で日本語のワイルドカードに入れ替えたらできました。このやり方でよかったのか、ほかのやり方があるのかと思いましたが、これでいいのですね。

    crane返信する
  • 10. Re:ありがとうございました。

    >craneさん

    おっしゃっている以下のマクロはご質問の内容に合致しないのでしょうか?

    【Wordマクロ】選択範囲を全角・半角で拡大させる
    http://ameblo.jp/gidgeerock/entry-11966566753.html

    どの部分がどうなればいいのか教えてください。

  • 9. ありがとうございました。
    ご返答ありがとうございます。実は、ぱらぱらの置換後の文字列で、たとえば
    「におけるcontrol unitは」や「読み取り可能なrecording medium等」
    などで、その日本語の間の"control unit"や"recording medium"をそこにカーソルを置いてマクロ実行しただけで選択できるようにできないかな、と思って質問させて頂きました。【Wordマクロ】選択範囲を全角・半角で拡大させる
    の項目で質問した方が良かったでしょうか。よろしくお願いいたします。

    crane返信する
  • 8. Re:記号ではなく日本語では?

    >craneさん

    > 上記マクロでは「。、?!:;.,?!:;」を基準に範囲指定をしていますが、「」内が日本語でもアレンジしてできますか?

    できますよ。
    数字や日本語でも大丈夫です。
    その言葉の直前まで選択します。

    お試しください。

  • 7. 記号ではなく日本語では?
    上記マクロでは「。、?!:;.,?!:;」を基準に範囲指定をしていますが、「」内が日本語でもアレンジしてできますか?
    crane返信する
  • 6. Re:できました!

    >Sakinoさん

    さっそくお試しいただきありがとうございます!

    これ、かなり便利だと思いますので、一番しっくりする記号をいれてご利用ください。

  • 5. できました!

    ありがとうございます。できました!

    心はやるあまり^^;、デスクトップで、Option Explicitを設定しないで、作業をはじめてしまったということのようです。

    あとは、「。」の他に自分が使っている記号などを入れて、いろいろ試してみたいと思います。

    使用回数は多いはずですし、劇的に楽になるのではないかと期待しているところです。

    Sakino返信する
  • 4. Re:Re:Re:つかってみました!

    >Sakinoさん

    さっそくのご利用をどうもありがとうございます。

    2つ理由があると思います。ブログ記事でしっかり説明しておらず失礼しました。

    まず、「Private Const myCset As String = "。、?!:;.,?!:;"」は、モジュールの先頭に記載してください。これをしないと、モジュール内での変数を定義できません。

    あと、現在は「Option Explicit」 の記載がないと思われます。この記載を、モジュールの一番先頭(Private Const...の前)に記載して下さい。

    この2点で大丈夫だと思います。

    上述の通り、「Private Const myCset As String = "。、?!:;.,?!:;"」がモジュールの途中にあるためmyCsetの内容が定義されていません。

    でも、「Option Explicit」が書かれていないので、定義していない変数もマクロ(プロシージャ)で使えるような設定になっています。

    結果、myCsetが空で定義されていないまま実行されてしまっています。おっしゃるとおり定義がないままです。

    上記2点を変更しておためしください。

  • 3. Re:Re:つかってみました!

    つかってみたのですが……

    そのままはりこむと、前のマクロのEnd Subの次行に、「Private Const myCset As String = "。、?!:;.,?!:;"」が表示されています。たぶんよいのかな、と思うのですが実行すると、1文字分進むだけで、myCset の定義が生かされていないのかもしれません。基本をはずしていそうですが、どこかに参考記載等はございますでしょうか。

    Sakino

-コード
-,