みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで便利なカーソル移動のショートカットーを作る方法をお伝えしています。
前回はコチラの記事。
句読点単位のカーソル移動をショートカットキー化しました。
今回は別のカーソル移動を目指します。ねらい目は「ページ単位」と「文書の先頭・末尾」との間、つまり「見出し単位」です。
ナビゲーションウィンドウを出して見出しをクリックすれば、見出し単位で移動ができるんですが、もっとすぐにサクサク行きたいんですよ。わかりますか?
ということで、Word VBAで見出し単位のカーソル移動をする方法です。
ちなみに、Wordのデフォルトは以下記事にまとめている通りですので、ここで再度チェックしておきましょう。
GoToメソッドで見出し単位の移動をする
カーソル移動というとMoveメソッドなのですが、指定できる単位に「見出し」というのはないんですね。
そこで、別のメソッドを紹介します。カーソル移動をするGoToメソッドです。
書式はコチラです。
Whatは移動先の項目で、以下WdGoToItem列挙型の定数のいずれかを指定します。
定数 | 移動先 |
---|---|
wdGoToLine | 行 |
wdGoToHeading | 見出し |
wdGoToPage | ページ |
wdGoToSection | セクション |
wdGoToTable | 表 |
wdGoToObject | オブジェクト |
wdGoToBookmark | ブックマーク |
wdGoToComment | コメント |
wdGoToEndnote | 文末脚注 |
wdGoToFootnote | 脚注 |
wdGoToGrammaticalError | 文法エラー |
wdGoToProofreadingError | 校正エラー |
wdGoToSpellingError | スペルエラー |
MoveメソッドのWdUnitsは単語、文、行、段落など定番項目が多かったのですが、GoToメソッドのWdGoToItemは痒いところに手が届く系のラインナップですね。
Whichは移動方法について指定します。指定は以下WdGoToDirection列挙型の定数から選択します。
定数 | 移動方法 |
---|---|
wdGoToAbsolute | 絶対位置 |
wdGoToFirst | 最初の要素 |
wdGoToLast | 最後の要素 |
wdGoToNext | 次の要素 |
wdGoToPrevious | 前の要素 |
Countは番号または移動数を正の整数で指定しますが、省略可能で既定値は1です。Whichによってその役割が変わるものです。
Gotoメソッドの使用例
以下にいくつかの例を示しておきます。
Selection.GoTo wdGoToHeading, wdGoToFirst '最初の見出し
Selection.GoTo wdGoToLine, wdGoToAbsolute, 4 '文書の4行目
Selection.GoTo wdGoToLine, wdGoToPrevious, 2 '現在の位置から2行前
Selection.GoTo wdGoToTable, wdGoToNext '次のテーブル
Gotoメソッドでは、このようにかなり詳細なカーソル移動を実現できます。
Gotoメソッドで一つ前の見出し、一つ次の見出しに移動する
Gotoメソッドを使って、現在のカーソル位置から一つ次の見出しに移動するには
Selection.GoTo wdGoToHeading, wdGoToNext
また、同様に一つ前の見出しに移動するには
Selection.GoTo wdGoToHeading, wdGoToPrevious
とします。
それぞれイミディエイトウィンドウで入力して試してみてください。ちゃんと前後の見出しに移動しますよ。
ただし、GoToメソッドには一点、悩ましい点があります。
Whatの指定時に入力補完が効かないのです。列挙型の定数の種類がとてもたくさんあるのに…これでは不便です。
GoToNextメソッドで次の見出しに移動する
そんなときのために、実は別のメソッドを使うこともできます。
まずは、次の要素に移動するGoToNextメソッドを紹介しましょう。以下のように記述します。
Whatには前述のGoToメソッドと同様、WdGoToItem列挙型の定数のいずれかを指定します。
WhichとCountの指定はありません、なぜならGoToNextメソッドを使う場合は一つ次の要素に移動する、ということが決まっているからです。
では、以下一つ次の見出しへカーソル移動するプロシージャを作ってみましょう。
Sub gotoForward()
Selection.GoToNext wdGoToHeading
End Sub
連続して実行すると以下のように見出しから見出しに移動してくれます。
GoToPreviousメソッドで次の見出しに移動する
同様に、前の要素に移動するGoToPreviousメソッドがあります。
使い方はGoToNextメソッドと同様に、WdGoToItem列挙型の定数のいずれかを指定するWhatを用いて以下のように記述します。
GoToPreviousメソッドを使って、一つ次の見出しへカーソル移動するプロシージャを作ります。
Sub gotoBackward()
Selection.GoToPrevious wdGoToHeading
End Sub
こちらのプロシージャを連続して実行すると、見出しをポンポンと前に移動していきます。
まとめ
Word VBAで見出し単位でカーソル移動をする方法についてお伝えしました。
GoToメソッドを使うと、様々な項目に対して色々な移動の仕方を一つのメソッドで実現できるのですが、残念ながら入力補完が効かないという弱点があります。
その点、一つ前の要素や一つ次の要素と決まっているのであれば、GoToNextメソッドとGoToPreviousメソッドが入力補完も使えておすすめです。
なお、今回紹介したしたGoTo系メソッドはいずれも、Selectionが範囲選択であった場合には、範囲選択が解除された上でカーソル移動をします。これは、Move系のメソッドと同じですね。
さて、これで完成としても良いのですが、せっかくなので文書の末尾や先頭に到達したときの処理を追加しつつ、ショートカットキー化していきましょう。
どうぞお楽しみに!