質問編集履歴

4

検索条件の追記・コードの可視性改善

2019/06/01 23:18

投稿

sadaharu
sadaharu

スコア14

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,12 @@
16
16
 
17
17
  1.検索ワードを入力
18
18
 
19
+  検索ワードは同じ行の場合はAND条件、
20
+
21
+  異なる行の場合はOR条件です。
22
+
23
+  画像では「ぶっかけ AND 九州」 or「ハヤシライス」となります。
24
+
19
25
  2.日付ごとに並んだシート(リストが作成されている)を検索し、条件に合致する行(2行で1項目)をコピー
20
26
 
21
27
  3.検索ワードが入力されているシートに検索結果を貼り付けする
@@ -66,8 +72,6 @@
66
72
 
67
73
  Application.ScreenUpdating = False
68
74
 
69
-
70
-
71
75
  With ThisWorkbook.Sheets("検索")
72
76
 
73
77
  Dim i As Long
@@ -186,8 +190,6 @@
186
190
 
187
191
 
188
192
 
189
-
190
-
191
193
  'シート配列から検索していく
192
194
 
193
195
  Dim p As Long
@@ -214,112 +216,82 @@
214
216
 
215
217
  For i = 7 To endRow Step 2
216
218
 
219
+ Dim HHH As Integer
220
+
221
+ Dim c As Range
222
+
217
223
 
218
224
 
225
+ With tmpSheet.Rows(i & ":" & i + 1)
226
+
227
+
228
+
219
- Dim HHH As Integer
229
+ For HHH = LBound(bkey) To UBound(bkey)
230
+
220
-
231
+ Set c = .Find(What:=bkey(HHH), matchbyte:=False, _
232
+
233
+ LookIn:=xlValues, LookAt:=xlPart) '---(1)
234
+
235
+
236
+
237
+ '条件に当てはまるセルがあるかどうかを判定
238
+
221
- Dim c As Range
239
+ If c Is Nothing Then
222
240
 
223
241
 
224
242
 
243
+ GoTo TTT
244
+
245
+ End If
246
+
247
+
248
+
249
+ Next HHH
250
+
251
+ '繰返し検索し、条件を満たす行を検索する
252
+
253
+
254
+
255
+
256
+
257
+ '######################## この部分の処理で時間がかかっている
258
+
225
- With tmpSheet.Rows(i & ":" & i + 1)
259
+ tmpSheet.Rows(i & ":" & i + 1).Copy _
260
+
226
-
261
+ ThisWorkbook.Sheets("検索").Rows(k)
262
+
227
-
263
+ '#########################
264
+
265
+
266
+
267
+
268
+
269
+ k = k + 2
270
+
271
+ End With
272
+
273
+ TTT:
228
274
 
229
275
 
230
276
 
231
- For HHH = LBound(bkey) To UBound(bkey)
232
-
233
-
234
-
235
- Set c = .Find(What:=bkey(HHH), matchbyte:=False, _
236
-
237
- LookIn:=xlValues, LookAt:=xlPart) '---(1)
238
-
239
-
240
-
241
- '条件に当てはまるセルがあるかどうかを判定
242
-
243
- If c Is Nothing Then
244
-
245
-
246
-
247
- GoTo TTT
248
-
249
- End If
250
-
251
-
252
-
253
- Next HHH
254
-
255
-
256
-
257
-
258
-
259
- '繰返し検索し、条件を満たす行を検索する
260
-
261
-
262
-
263
-
264
-
265
-
266
-
267
- '######################## この部分の処理で時間がかかっている
268
-
269
- tmpSheet.Rows(i & ":" & i + 1).Copy _
270
-
271
- ThisWorkbook.Sheets("検索").Rows(k)
272
-
273
- '#########################
274
-
275
-
276
-
277
-
278
-
279
-
280
-
281
-
282
-
283
- k = k + 2
284
-
285
-
286
-
287
- End With
288
-
289
- TTT:
290
-
291
-
292
-
293
277
  Next i
294
278
 
295
279
  Next p
296
280
 
281
+ Next b
282
+
283
+
284
+
285
+ If flag Then
286
+
287
+ ThisWorkbook.Sheets("検索").Cells(5, "C").ClearContents
288
+
289
+ End If
290
+
297
291
 
298
292
 
299
-
300
-
301
- Next b
302
-
303
-
304
-
305
-
306
-
307
- If flag Then
308
-
309
- ThisWorkbook.Sheets("検索").Cells(5, "C").ClearContents
310
-
311
- End If
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
293
  Application.ScreenUpdating = True
320
294
 
321
-
322
-
323
295
  End Sub
324
296
 
325
297
  ```

3

データ変更

2019/06/01 23:18

投稿

sadaharu
sadaharu

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
- ![イメージ説明](15f9a8ba5edeca1f36c2961ea5fde852.png)
1
+ ![イメージ説明](cd84b82db76bab95d93ea9d8b70f07d3.png)
2
-
2
+
3
- ![イメージ説明](3850428e12b25e02f19c2e1236c84c5f.png)
3
+ ![イメージ説明](0ed0b3adfbe8503c9948bdd1d616c838.png)
4
4
 
5
5
 
6
6
 

2

画像を掲示しました。(検索結果とデータシートの例)

2019/06/01 12:02

投稿

sadaharu
sadaharu

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,11 @@
1
+ ![イメージ説明](15f9a8ba5edeca1f36c2961ea5fde852.png)
2
+
3
+ ![イメージ説明](3850428e12b25e02f19c2e1236c84c5f.png)
4
+
5
+
6
+
7
+
8
+
1
9
  VBAにて高速処理ができないか悩んでいます。
2
10
 
3
11
 
@@ -16,13 +24,27 @@
16
24
 
17
25
 
18
26
 
27
+ 一番上の画像が検索結果を表示するシート、二番目の画像がデータイメージです。
28
+
29
+
30
+
19
31
  プログラム自体は作動しますが、各シートごとに検索結果をコピーし、都度貼り付けをしている(ソースコードを##################で囲んだ部分です。)ため、処理に時間がかかっています。
20
32
 
21
33
 
22
34
 
23
35
  実際、#####で囲んだ部分をコメントアウトして実行すると処理速度が劇的に速くなります。
24
36
 
25
- (通常は40秒かかり、#######で囲んだ部分をコメントアウトして実行した場合は、5秒で処理が終了)
37
+ (通常は40秒かかり、#######で囲んだ部分をコメントアウトして実行した場合は、5秒で処理が終了しました。
38
+
39
+ 1シート当り:約20件のデータ
40
+
41
+ シート数:400シート
42
+
43
+ 170件ヒットした場合です。)
44
+
45
+
46
+
47
+
26
48
 
27
49
 
28
50
 

1

コード部分をMarkdown記法のタグにて囲みました。 処理遅延の原因となっている箇所をコメントアウトした場合の処理速度結果を追記しました。

2019/06/01 10:52

投稿

sadaharu
sadaharu

スコア14

test CHANGED
File without changes
test CHANGED
@@ -20,14 +20,24 @@
20
20
 
21
21
 
22
22
 
23
+ 実際、#####で囲んだ部分をコメントアウトして実行すると処理速度が劇的に速くなります。
24
+
25
+ (通常は40秒かかり、#######で囲んだ部分をコメントアウトして実行した場合は、5秒で処理が終了)
26
+
27
+
28
+
23
29
  そのため、配列に格納するすれば高速処理が可能になるのではと思い、考えましたがどうすればよいのかわかりません。
24
30
 
25
31
 
26
32
 
33
+
34
+
27
35
  アドバイスください。
28
36
 
29
37
 
30
38
 
39
+ ```ここに言語を入力
40
+
31
41
  Sub 検索用()
32
42
 
33
43
 
@@ -289,3 +299,5 @@
289
299
 
290
300
 
291
301
  End Sub
302
+
303
+ ```