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

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

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

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

Word

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

Q&A

解決済

1回答

327閲覧

word 数式エディタ以外の文章を編集

hiyoko0410

総合スコア5

VBA

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

Word

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

0グッド

0クリップ

投稿2022/09/26 14:09

前提

wordで数式エディタを使い、数式の計算と文章問題を作成しています。

文章問題のみ編集し、数式は変更したくありません。
現在、組んでいるマクロでは数式の数字も検索してしまいます。
数式以外を編集する方法を教えてください。
出来れば文章全体で行いたいです。

文章例:)
端子1−2間の[-数式エディタ]であるから....
端子3−4間の場合は[数式エディタ-]となるため

下記コードはこの文章の数字 ハイフン 数字の並びがあれば
文章の編集を行っています。

また、下記のコードでは1度だけ置き換えて2回目以降はDO whileから出てしまい
ループできていません。
どこのコードがわるいのでしょうか。
2点質問となっておりますが、ご教示いただけますと幸いです。

ここに質問の内容を詳しく書いてください。

実現したいこと

①DO whileのループをうまく回したい
②数式以外の文章を編集したい(検索したい)

  • ▲▲機能を動作するようにする

発生している問題・エラーメッセージ

findを使うと数式もすべて検索対象となる
DO whileがなぜか抜けてしまう

エラーメッセージ

該当のソースコード

Selection.Find.ClearFormatting
'数字-数字は数字を2ptに
With Selection.Find
.Text = "[0-9]" & ChrW(8722) & "[0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
.MatchFuzzy = False
.Font.Bold = False
Do While .Execute
Selection.Font.Spacing = 3
'検索したひとつ前の文字を選択
Selection.Characters.First.Previous.Select
Selection.Font.Spacing = 3
Loop
Selection.MoveRight unit:=wdWord, Count:=2, Extend:=wdMove
End With
ActiveDocument.Range(0, 0).Select

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

1

ベストアンサー

OMathsプロパティで選択範囲の数式を取得できるので、それのCountが0なら数式内ではないと判断できそうです。

Selection.OMaths プロパティ (Word) | Microsoft Learn

vba

1Do While .Execute 2 If Selection.OMaths.Count = 0 Then 3 4 End If 5Loop

ループしない件ですが、
いろいろテストして下記のようなコードになりました。こちらのサンプルではうまく動作してます。

vba

1Sub テスト() 2 Selection.Find.ClearFormatting 3 With Selection.Find 4 .Text = "[0-9]" & ChrW(8722) & "[0-9]" 5 .Forward = True 6 .Wrap = wdFindContinue 7 .Format = False 8 .MatchCase = False 9 .MatchWholeWord = False 10 .MatchByte = False 11 .MatchAllWordForms = False 12 .MatchSoundsLike = False 13 .MatchFuzzy = False 14 .Font.Bold = False 15 .MatchWildcards = True 16 Do While .Execute 17 If Selection.OMaths.Count = 0 Then 18 Selection.Font.Spacing = 3 19 Selection.Characters.First.Previous.Font.Spacing = 3 20 End If 21 Loop 22 Selection.MoveRight unit:=wdWord, Count:=2, Extend:=wdMove 23 End With 24 ActiveDocument.Range(0, 0).Select 25End Sub

投稿2022/09/27 02:58

編集2022/09/27 03:02
hatena19

総合スコア33520

hiyoko0410👍を押しています

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

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

hiyoko0410

2022/09/28 12:00

ご回答いただきありがとうございます。 完璧に動作しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

同じタグがついた質問を見る

VBA

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

Word

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