質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

解決済

1回答

3635閲覧

ループ処理終了後、検索を始めた部分までカーソルを移動するWordマクロ

hood

総合スコア351

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

2クリップ

投稿2018/09/25 23:24

編集2018/09/26 00:27

###ループ処理終了後、検索を始めた部分までカーソルを移動するWordマクロ
題目通りです。
私はこの掲示板内でアドバイスいただき、あるループ処理をするマクロを作りました。(そのお二方には感謝しかありません。)

しかし、最近そのマクロにある機能を追加する必要が出てきました。それは「ループ処理終了後、検索を始めた部分までカーソルを移動する」という機能です。

文書の最初なら、ActiveDocument.Range(0, 0).Selectとすればいいとは調べて分かったのですが、検索を始めた部分まではわかりませんでした。

これはどういうふうに実現できるのでしょうか?
どうかご教授いただけると助かります・・・

以下に、とあるループ処理をするマクロを記します。

lang

1Sub PlusNumber() 2 Dim sel As Word.Selection 3 Set sel = Selection 4 5 '「カーソルより下を検索する部分」 6 Do 7 With sel.Find 8 .Text = "([0-9]{1,3})" 9 .MatchFuzzy = False 10 .MatchWildcards = True 11 12 '.Execute()がTrueなら当該文字が見つかった 13 If Not .Execute() Then 14 'Falseなら見つからなかった 15 Exit Do 16 End If 17 End With 'sel.Find 18 19 20 '数字に+1 21 sel.Text = sel.Text + 1 22 23 sel.Collapse Direction:=wdCollapseEnd 24 Loop 25 'ここで初めにカーソルを置いた部分まで戻りたい 26End Sub

追記

「ループ処理終了後、検索を始めた部分までカーソルを移動する」について以下に例を示します。

処理前のword文書
(カーソルよりしたの数字に+1するマクロを使う)

lang

11 22 3(ここにカーソルがあるとする) 43 54 65

処理後のword文書

lang

11 22 3(本来なら一番下にカーソルがいったままだが、ここにカーソルを戻したい。) 44(ループ処理で+1されている) 55(ループ処理で+1されている) 66(ループ処理で+1されている)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/25 23:49

ソースコードは ``` で「囲う」必要があります。閉じ部分が抜けていますね。あとは「lang-言語」となっている場所は言語名を入れてください。今回だと「VBA」でしょうか。
m.ts10806

2018/09/25 23:50

また「検索を始めた部分」というのは例えばどういう場所になるのでしょうか?例示は可能ですか?
hood

2018/09/26 00:29

ご指摘ありがとうございます。つい、うっかりして、```と言語名を入れ忘れてしまいました。また、例示のほうものせるべきだったと今更ながら思いました。合わせて修正させていただきました・・・。
guest

回答1

0

ベストアンサー

Rangeのプロパティ、Start、End で位置が取得できます。

なので、処理の前に位置を特定しておき、
処理が終わった後に開始位置をSelectする等で戻れると思います。

WordVBAはマイナーなので頑張ってください。

余談ながら、テキストが大量かつ、処理も大量だと、
たまに正常に処理してくれない事があります。。。

もしそんな挙動があった場合は、
クリップボードをAPIできっちりクリアする、
という意味不明な事を試してみてください。

投稿2018/09/26 01:01

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/09/26 02:21

回答ありがとうございます! ExcelVBAerさんのアドバイスを元に、ループ処理前に   Dim s As Long s = Selection.Start Dim e As Long e = Selection.End 処理後に、 ActiveDocument.Range(s, e).Select とすることで狙い通りの動きになりました!
ExcelVBAer

2018/09/26 03:03

できれば、ActiveDocument は、ThisDocument にするか、 処理開始時にDocument型の変数に入れて使用することをお勧めします。 ※Excel では質問欄に頻出しているのですが、Active〇〇を使っていると、  別のブックや文書を開く処理が追加された場合に、  処理がおかしくなってしまいますので。。。
hood

2018/09/27 12:47

返信遅れてすいませんでした! なるほど、そんな都合があるのですね・・・ 分かりましたそうします! 親切にも教えてくださり、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問