回答編集履歴
1
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
|
+
|