🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Word

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

946閲覧

WORDマクロの文字検索について

W.kirai

総合スコア2

Word

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/03/01 03:30

編集2021/03/01 07:12

マクロを勉強中です。
WORDマクロについてお知恵を拝借できないでしょうか。
よろしくお願い致します。

特定宛先の資料だけ扱いが違います。
以下条件が全て一致する場合、メッセージを出したいです。

◎条件
A:宛先A
B:○○○○社
D:資料名
C:お知らせします。

特定宛先(A)かつ資料がある場合のみ、注意メッセージを表示する。
資料名(D)は必ず社名(B)~文字列(C)の間に記載される。

Dim Myrng As Range Myrng = "文字列A" Do While Myrng.Find.Execute = True If .Found = True Then MsgBox "資料名(D)" & "の送付方法にご注意ください" End If

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/03/01 05:23

②の意味するところがわかりません。 具体例を提示していただきたいです。 あと、コードを提示する際はマークダウンを使用してください。
W.kirai

2021/03/01 07:16

御覧いただき、ありがとうございます。 記載内容を修正しました。 複数条件の設定方法が分からず、ご教示いただけると幸いです。
退会済みユーザー

退会済みユーザー

2021/03/01 08:06

複数の文字列を一回でFindすることはできないようですので、「資料がある場合」をどう判定するかを考えます。 「資料がある場合」=「資料がない場合以外」ですが、資料がない場合にBとCの間はどうなりますか? 例えば「改行しか入らない」という条件が成り立つのであれば、「Bの末尾とCの先頭の間に改行以外が含まれない」場合は資料なし、と判定できます。
W.kirai

2021/03/01 08:35

資料がない場合にBとCの間は「改行しか入らない」になります。
退会済みユーザー

退会済みユーザー

2021/03/01 09:20

お、でしたら上記をVBAで書けばOKですね。 明日また来ますので、ちょっと頑張ってみてください。
guest

回答1

0

ベストアンサー

こんな感じでしょうか。

VBA

1Option Explicit 2 3Private Const SPECIAL_DESTINATION_STRING As String = "宛先A" '特定宛先を指定する文字列 4Private Const SEARCH_START_STRING As String = "○○○○社" '検索開始条件となる文字列 5Private Const SEARCH_END_STRING As String = "お知らせします。" '検索終了条件となる文字列 6 7'資料の有無をチェックする 8Public Sub CheckDocument() 9 Dim startPosition As Long '資料検索開始位置 10 Dim endPosition As Long '資料検索終了位置 11 Dim documentName As String '資料名 12 Dim foundRange As Range '検索用Range 13 Dim i As Long 'ループカウンタ 14 15 '特定宛先でない場合は処理を終了する 16 With ActiveDocument.Content.Find 17 .ClearFormatting 18 .Text = SPECIAL_DESTINATION_STRING 19 If Not .Execute Then 20 MsgBox "特定宛先ではありません" 21 Exit Sub 22 End If 23 End With 24 25 '変数を初期化する 26 startPosition = 0 27 endPosition = 0 28 documentName = "" 29 30 '資料検索開始位置を取得する 31 Set foundRange = ActiveDocument.Content 32 With foundRange.Find 33 .ClearFormatting 34 .Text = SEARCH_START_STRING 35 If .Execute Then 36 startPosition = foundRange.End + 1 37 End If 38 End With 39 40 '資料検索終了位置を取得する 41 Set foundRange = ActiveDocument.Content 42 With foundRange.Find 43 .ClearFormatting 44 .Text = SEARCH_END_STRING 45 If .Execute Then 46 endPosition = foundRange.Start 47 End If 48 End With 49 50 '改行以外の文字を検索する 51 If startPosition > 0 And endPosition > 0 Then 52 If startPosition < endPosition Then 53 For i = startPosition To endPosition 54 If ActiveDocument.Characters(i).Text <> vbCr Then 55 documentName = documentName & ActiveDocument.Characters(i).Text 56 End If 57 Next 58 End If 59 End If 60 61 'チェック結果メッセージを表示する 62 If documentName <> "" Then 63 MsgBox documentName & "の送付方法にご注意ください" 64 Else 65 MsgBox "資料はありません" 66 End If 67End Sub

投稿2021/03/02 02:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

W.kirai

2021/03/02 09:20

ありがとうございます。 助かります。m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問