回答編集履歴

1

2022/01/24 07:44

投稿

ken3memo
ken3memo

スコア132

test CHANGED
@@ -72,3 +72,98 @@
72
72
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-21/2a2d8fdc-053e-401e-8ed5-4b3181a58b4e.jpeg)
73
73
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-21/51de2402-dd66-44df-90ea-ae7ca8d78a3a.jpeg)
74
74
 
75
+ ### 2022/01/24 ルビに対応したコードに修正
76
+ ```ここに言語を入力
77
+ 'ルビを振った文字列を検索する※ルビが別に管理されていることに気が付く・・・
78
+ Sub test20220124WORD検索テスト3ルビを探る()
79
+
80
+ Dim wdApp As Word.Application
81
+ Set wdApp = GetObject(, "Word.Application")
82
+
83
+ If wdApp Is Nothing Then
84
+ MsgBox "テスト用のWORD文章を開いてから、再テストしてね"
85
+ Exit Sub
86
+ End If
87
+
88
+ Dim i As Integer
89
+ Dim iRow As Integer
90
+
91
+ Dim maxRow As Integer
92
+ Dim wd As String
93
+ Dim p As Integer, l As Integer 'ページ、行
94
+
95
+ Dim n As Integer '段落のカウンターで使用
96
+ Dim str段落文字列 As String
97
+ Dim n先頭位置 As Integer
98
+
99
+ Dim strルビ情報 As String 'ActiveDocument.Fields(n) なので、ルビ以外もあるけどね 2022/01/24追加
100
+
101
+ maxRow = 3 '最終行を代入してね テストで3個固定なので、修正してね
102
+ iRow = 1 '結果一行目から、あっ、実行時に結果のシート消さなきゃ↓・・・
103
+ ThisWorkbook.Worksheets("結果").Range("A:B").Clear 'A,B列をクリア
104
+
105
+ For i = 1 To maxRow
106
+ wd = ThisWorkbook.Worksheets("検索文字列").Range("A" & i + 1).Value '検索文字列
107
+
108
+ 'アクティブ文書の段落を頭からなめる ActiveDocument.Paragraphs
109
+ For n = 1 To wdApp.ActiveDocument.Paragraphs.Count
110
+ str段落文字列 = wdApp.ActiveDocument.Paragraphs(n).Range.Text
111
+ '単純にInstrで探してみた
112
+ n先頭位置 = InStr(1, str段落文字列, wd) '初回は一文字目から探す
113
+ While n先頭位置 <> 0 '検索位置が見つかっている間 0以外の時ループ
114
+ If n先頭位置 > 0 Then '↑で文字が見つかったら、
115
+ wdApp.ActiveDocument.Paragraphs(n).Range.Select '見つけたので段落選択する
116
+ '↑段落全体が選択されているので、↓選択範囲、start位置を移動
117
+ wdApp.Selection.MoveStart Unit:=wdCharacter, Count:=n先頭位置 - 1
118
+ '結果をExcelへ書く、
119
+ p = wdApp.Selection.Range.Information(wdActiveEndPageNumber)
120
+ l = wdApp.Selection.Range.Information(wdFirstCharacterLineNumber)
121
+ With ThisWorkbook.Worksheets("結果")
122
+ .Range("A" & iRow) = p & "P、" & l & "行目"
123
+ .Range("B" & iRow) = wd
124
+ End With
125
+ iRow = iRow + 1
126
+ End If
127
+
128
+ '次の位置(見つけた位置+検索文字数)から検索文字を探す
129
+ n先頭位置 = InStr(n先頭位置 + Len(wd), str段落文字列, wd) '同じ段落に検索文字があるかもしれないので
130
+
131
+ Wend
132
+
133
+ Next n
134
+
135
+ 'ルビを探る、探す 2022/01/24 追加
136
+ For n = 1 To ActiveDocument.Fields.Count
137
+ strルビ情報 = wdApp.ActiveDocument.Fields(n).Code 'フォントやフリガナ情報含む
138
+ If InStr(strルビ情報, wd) > 0 Then 'Filed ルビの情報 から 検索ワードが見つかったら
139
+ wdApp.ActiveDocument.Fields(n).Select '単純にSelectで選択状態にする
140
+ '結果をExcelへ書く、
141
+ p = wdApp.Selection.Range.Information(wdActiveEndPageNumber)
142
+ l = wdApp.Selection.Range.Information(wdFirstCharacterLineNumber)
143
+ With ThisWorkbook.Worksheets("結果")
144
+ .Range("A" & iRow) = p & "P、" & l & "行目"
145
+ .Range("B" & iRow) = wd
146
+ End With
147
+ iRow = iRow + 1
148
+ End If
149
+ Next n
150
+
151
+
152
+ Next
153
+
154
+
155
+
156
+ MsgBox "処理終了、結果を確認してください"
157
+
158
+ End Sub
159
+ ```
160
+
161
+ 動画まで作成してカッコつけたのに(ぉぃぉぃ)
162
+ テスト不足ですみません。※回答を修正しました
163
+
164
+ 恥の上塗りになるかもしれませんが、再チャレンジしてみました
165
+ https://www.youtube.com/watch?v=QcljoRs1Rsc
166
+ ↑時間があるときに、ダメ動画も確認してみてください。
167
+
168
+
169
+