質問編集履歴

2

コード修正

2021/07/10 04:08

投稿

mzn59
mzn59

スコア17

test CHANGED
File without changes
test CHANGED
@@ -38,21 +38,7 @@
38
38
 
39
39
  Dim rngList As Range, rng As Range
40
40
 
41
- Dim strURL As String
42
-
43
- Dim strYear As String
44
-
45
- Dim i As Integer
41
+ ~(略)~
46
-
47
- Dim strAddress As String
48
-
49
- Dim arrShopInfo As Variant
50
-
51
- Dim strProgress As String
52
-
53
- Dim strShopName As String
54
-
55
- Dim strShopInfo As String
56
42
 
57
43
 
58
44
 
@@ -114,55 +100,7 @@
114
100
 
115
101
  For Each objHtmlElem In objHtmlDoc.getElementsByTagName("p")
116
102
 
117
- If InStr(objHtmlElem.innerText, strYear & "/") > 0 Or _
118
-
119
- InStr(objHtmlElem.innerText, strYear & "年") > 0 Then
120
-
121
- arrShopInfo = Split(objHtmlElem.innerText, vbCrLf)
122
-
123
- iDstRow = iDstRow + 1
124
-
125
- strShopName = ""
126
-
127
- strAddress = ""
128
-
129
- ' 抽出データをシートに出力
130
-
131
- For i = LBound(arrShopInfo) To UBound(arrShopInfo)
132
-
133
- If i = LBound(arrShopInfo) Then
134
-
135
- wsOut.Cells(iDstRow, 2).Value = Split(arrShopInfo(i), " - ")(0)
136
-
137
- ElseIf arrShopInfo(i) Like "*" & strYear & "/*" Or _
138
-
139
- arrShopInfo(i) Like "*" & strYear & "年*" Then
140
-
141
- wsOut.Cells(iDstRow, 4) = Split(Split(arrShopInfo(i), " - ")(0), " ")
142
-
143
- If InStr(arrShopInfo(i), " - ") > 0 Then
144
-
145
- wsOut.Cells(iDstRow, 5) = Split(arrShopInfo(i), " - ")(1)
146
-
147
- End If
103
+ ~(略)~
148
-
149
- ElseIf arrShopInfo(i) Like "※*" Then
150
-
151
- wsOut.Cells(iDstRow, 5).Value = wsOut.Cells(iDstRow, 5).Value & arrShopInfo(i)
152
-
153
- Else
154
-
155
- strAddress = strAddress & arrShopInfo(i)
156
-
157
- End If
158
-
159
- Next
160
-
161
- wsOut.Cells(iDstRow, 1) = strURL
162
-
163
- wsOut.Cells(iDstRow, 3) = strAddress
164
-
165
- End If
166
104
 
167
105
  Next
168
106
 

1

質問内容の追記

2021/07/10 04:08

投稿

mzn59
mzn59

スコア17

test CHANGED
File without changes
test CHANGED
@@ -181,3 +181,199 @@
181
181
  End Sub
182
182
 
183
183
  ```
184
+
185
+
186
+
187
+ (2021/06/19 20:00 質問内容の記載が途中で切れてしまっていたので、続きを下記に追記します。)
188
+
189
+ **期待結果**
190
+
191
+ 各URLから抽出したデータが、Excelシートに下記のように出力されること
192
+
193
+
194
+
195
+ ```ここに言語を入力
196
+
197
+ 1行目 URL1の抽出データ
198
+
199
+ 2行目 URL2の抽出データ
200
+
201
+ 3行目 URL3の抽出データ
202
+
203
+ ```
204
+
205
+
206
+
207
+ **実行結果**
208
+
209
+ 上記コードを実行したところ、各URLから抽出したデータが下記のように重複してExcelシートに出力されておりました。
210
+
211
+
212
+
213
+ ```ここに言語を入力
214
+
215
+ 1行目 URL1の抽出データ
216
+
217
+ 2行目 URL1の抽出データ ←1行目と重複
218
+
219
+ 3行目 URL2の抽出データ
220
+
221
+ 4行目 URL1の抽出データ ←1行目と重複
222
+
223
+ 5行目 URL2の抽出データ ←3行目と重複
224
+
225
+ 6行目 URL3の抽出データ
226
+
227
+ ```
228
+
229
+
230
+
231
+ **試したこと**
232
+
233
+ 当該コードを下記のように修正したところ、期待結果通りに抽出データが重複せずに出力されることが確認できました。ですが、実現したいこと(URL複数件からのデータ抽出)に対して、コードが適切か判断がつきません。そのため、修正コードが適切かご教示いただきたく、または参照すべきドキュメント等ご教示いただけますと幸いです。
234
+
235
+
236
+
237
+ 修正コード1(ループの中で、Set objHtmlDoc = CreateObject("htmlfile")とSet objHtmlDoc = Nothing を実施するように変更):
238
+
239
+ ```ここに言語を入力
240
+
241
+ Sub sub2()
242
+
243
+ ~(略)~
244
+
245
+ Set objHttpReq = CreateObject("MSXML2.XMLHTTP")
246
+
247
+ objHtmlDoc.DesignMode = "on"
248
+
249
+
250
+
251
+ iDstRow = 1
252
+
253
+ For Each rng In rngList
254
+
255
+ DoEvents
256
+
257
+
258
+
259
+ strURL = rng.Value
260
+
261
+ objHttpReq.Open "GET", strURL
262
+
263
+ objHttpReq.Send
264
+
265
+
266
+
267
+ ' ダウンロード待ち
268
+
269
+ Do While objHttpReq.readyState <> 4
270
+
271
+ DoEvents
272
+
273
+ Loop
274
+
275
+
276
+
277
+ iStatusCode = objHttpReq.Status
278
+
279
+ ' ステータス判定
280
+
281
+ If iStatusCode = 200 Then
282
+
283
+ Set objHtmlDoc = CreateObject("htmlfile")
284
+
285
+ ~(略)~
286
+
287
+ Set objHtmlDoc = Nothing
288
+
289
+ End If
290
+
291
+ Next
292
+
293
+
294
+
295
+ Set objHttpReq = Nothing
296
+
297
+
298
+
299
+ End Sub
300
+
301
+ ```
302
+
303
+ 修正コード2(データを抽出後、objHtmlDoc.Close を実行するように変更):
304
+
305
+ ```ここに言語を入力
306
+
307
+ Sub sub2()
308
+
309
+ ~(略)~
310
+
311
+ Set objHttpReq = CreateObject("MSXML2.XMLHTTP")
312
+
313
+ Set objHtmlDoc = CreateObject("htmlfile")
314
+
315
+ objHtmlDoc.DesignMode = "on"
316
+
317
+
318
+
319
+ iDstRow = 1
320
+
321
+ For Each rng In rngList
322
+
323
+ DoEvents
324
+
325
+
326
+
327
+ strURL = rng.Value
328
+
329
+ objHttpReq.Open "GET", strURL
330
+
331
+ objHttpReq.Send
332
+
333
+
334
+
335
+ ' ダウンロード待ち
336
+
337
+ Do While objHttpReq.readyState <> 4
338
+
339
+ DoEvents
340
+
341
+ Loop
342
+
343
+
344
+
345
+ iStatusCode = objHttpReq.Status
346
+
347
+ ' ステータス判定
348
+
349
+ If iStatusCode = 200 Then
350
+
351
+ objHtmlDoc.write objHttpReq.responseText
352
+
353
+ ~(略)~
354
+
355
+ objHtmlDoc.Close
356
+
357
+ End If
358
+
359
+ Next
360
+
361
+
362
+
363
+ Set objHtmlDoc = Nothing
364
+
365
+ Set objHttpReq = Nothing
366
+
367
+
368
+
369
+ End Sub
370
+
371
+ ```
372
+
373
+
374
+
375
+ **補足情報(FW/ツールのバージョンなど)**
376
+
377
+ OS: Windows10
378
+
379
+ Microsoft Visual Basic for Applications 7.1