1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Word VBA Find周りの整理

Last updated at Posted at 2019-12-10

Selection.FindとRange.Findの違い

https://docs.microsoft.com/ja-jp/office/vba/api/word.find
Selection.Findは検索したところに選択が移動する。
Range.Findは選択は固定され、移動しない。

FindExecuteとFindExecute2007の違い

Selection.Find.Execute2007(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl, MatchPrefix, MatchSuffix, MatchPhrase, IgnoreSpace, IgnorePunct)
(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
返り値 Find Object 共通

Find.Execute2007は新しいオプションが追加

もちろんWord2007から
MatchPrefix MatchSuffix Variant True [ 接頭辞に一致] [ 接尾辞に一致する]
IgnoreSpace Variant True 単語間の空白はすべて無視するようにします。 [検索し、置換] ダイアログ ボックスで [空白文字を無視] チェック ボックスに対応します。
IngnorePunct Variant True を単語の間のすべての区切り記号を無視します。 [検索と置換] ダイアログ ボックスの [句読点を無視する] チェック ボックスに対応します。

Find.execute*に入っていないもの

Find.MatchSoundsLike あいまい検索(英) Soundsの名前のとおり、発音が同じものも置換する
Find.MatchByte 全角と半角を区別する
Find.MatchAllWordForms 英単語の異なる活用形も検索する
Find.MatchFuzzy あいまい検索(日)
Find.Wrap は「見つからなかったときの動作」 wdFindWrap定数 Const wdFindAsk = 2 残りも検索するか尋ねる Const wdFindStop = 0 停止 Const wdFindContinue = 1 続ける(通常はこれを選択)
Find.SetFuzzyOptions 日本語のあいまい検索のオプションをすべて有効にする | MatchFuzzyAY| MatchFuzzyKanji| |MatchFuzzyBV| MatchFuzzyKiKu| |MatchFuzzyByte| MatchFuzzyOldKana| |MatchFuzzyCase| MatchFuzzyProlongedSoundMark| |MatchFuzzyDash| MatchFuzzyPunctuation| |MatchFuzzyDZ| MatchFuzzySmallKana| |MatchFuzzyHF| MatchFuzzySpace| |MatchFuzzyHiragana| MatchFuzzyTC| |MatchFuzzyIterationMark| MatchFuzzyZJ|

Findにすら入っていないもの

日本語のあいまい検索のオプション

これらはFindではなくOptionsオブジェクトに入っている。
MatchFuzzyAY イの段、エの段に続く ア/ヤ
MatchFuzzyBV バ/ヴァ ハ/ファ

あいまい系の選択は排他になっている

あいまい検索(英)(日)、ワイルドカード、異なる活用形はすべてどれか一つしか選択できない。

自動的に無効化されないが、チェックボックスを選ぶと勝手に選択され、オプションが変更されてしまう。
これをVBAとしていうと
MatchPhrase、MatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyパラメータは、同時にTrueに設定することができません

自動的に選択できなくなるもの

あいまい検索(英) True

大文字と小文字を区別する 完全に一致する単語だけを検索する 接頭辞に一致する 接尾辞に一致する 半角と全角を区別する あいまい検索(日) ワイルドカードを使用する は選べない

あいまい検索(日) True

あいまい検索(英) が選べないほか、英語と同じものが選べない さらにオプションで細かい指定ができる。
ただしこの細かいオプションはFindオブジェクトではなくOptionsオブジェクト。

ワイルドカードを使用する

大文字 完全一致 接頭辞接尾辞 全角半角は選択できない
これが選択できたらワイルドじゃない。

英単語の異なる活用形を無視する

ワイルドカードと同様 大文字小文字 完全一致 接頭辞接尾辞 全角半角は選択できない
英語だから全角はない。異なる活用形のため完全一致はない。大文字小文字もない。(動名詞だと文頭がある) 接頭接尾 活用形だから当然ない。

誤訳

MatchWholeWord [完全に一致する単語だけを検索する][単語全体のみを検索する] チェック ボックスで、[検索と置換] ダイアログ ボックスに対応します。

定数

WdReplace enumeration (Word)

Specifies the number of replacements to be made when find and replace is used.
Name Value Description
wdReplaceAll 2 Replace all occurrences. すべて置換
wdReplaceNone 0 Replace no occurrences. 置換しない
wdReplaceOne 1 Replace the first occurrence encountered. 最初に一致したものを置換する

使用例

.Execute Replace:=wdReplaceAll

コード

Sub WordTwoLinesOnelineJpn()
' For Word 2007 Later
' 日本語用 For Japanese
With Selection
.EndKey Unit:=wdStory 'いったん文末に飛ばし、文頭に飛ばす
.HomeKey Unit:=wdStory
.Find.ClearFormatting '段落書式指定をクリア
.Find.Replacement.ClearFormatting 'Removes text and paragraph formatting from the text specified in a replace operation.
.Find.ClearAllFuzzyOptions 'Clears all nonspecific search options associated with Japanese text.
.Find.ClearHitHighlight
With .Find
.Text = "^13^13"
.Replacement.Text = "^p"
.Forward = True
.LanguageIDFarEast = wdJapanese '日本語以外では設定を変えるか省略する
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
'.Execute2007 'Selection.Find.Execute2007(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl, MatchPrefix, MatchSuffix, MatchPhrase, IgnoreSpace, IgnorePunct)
.Execute Replace:=wdReplaceAll 'ここを外さない 'Selection.Find.Execute (FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
End With
End With
End Sub

あいまい検索(日)のオプションを設定するパターン

.MatchFuzzy = True

ここでTrueにしてから、Optionsの設定に入る。
最後にExecute

Sub Findあいまい日本語()
'日本語のあいまい検索のパターン
'For Word 2007 later
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "AAAA"
.Replacement.Text = "AAAA"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = True
End With
With Options 'ExecuteではなくここからOptionを指定する
.MatchFuzzyCase = False
.MatchFuzzyByte = True
.MatchFuzzyHiragana = False
.MatchFuzzySmallKana = False
.MatchFuzzyDash = False
.MatchFuzzyIterationMark = False 'Trueだと繰り返し記号が区別されない。
.MatchFuzzyKanji = False 'Trueだと漢字の異体字を許容され、区別されない
.MatchFuzzyOldKana = False
.MatchFuzzyProlongedSoundMark = False
.MatchFuzzyDZ = False ’ジ/ / di/zi zu/du を区別しない
.MatchFuzzyBV = False ’ファ/ /ヴァ fa/ha ba/vaを区別しない
.MatchFuzzyTC = False 'ティ/チ ディ/ジ を区別しない
.MatchFuzzyHF = False
.MatchFuzzyZJ = False
.MatchFuzzyAY = False 'イ段とエ段の後ろのア、ヤを区別しない。クリアとクリヤみたいなやつ。
.MatchFuzzyKiKu = False Trueだとサ行の前のキとクが区別されない
.MatchFuzzyPunctuation = False
.MatchFuzzySpace = True
End With
Selection.Find.Execute2007
End Sub

参考

WordマクロのFindのプロパティ(まとめ)
https://stabucky.com/wp/archives/7731
ワイルドカードを使った検索と置換を極める 教えて!ヘルプデスク
http://office-qa.com/Word/wd211.htm

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?