質問編集履歴

7

申告状況パターン→進捗状況パターン

2017/10/03 08:47

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -310,7 +310,7 @@
310
310
 
311
311
 
312
312
 
313
- 'セル情報と、そのセルの期間パターン、申告状況パターンを引数として、SetCellに渡す。
313
+ 'セル情報と、そのセルの期間パターン、進捗状況パターンを引数として、SetCellに渡す。
314
314
 
315
315
  Sub SetCellsConditionCheck(pClumn As Integer)
316
316
 

6

定数部分追加

2017/10/03 08:47

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -122,6 +122,64 @@
122
122
 
123
123
  ```vba
124
124
 
125
+ 'セルにセットする文字列を格納した定数
126
+
127
+ Const C_START_FIRST As String = "先行着手"
128
+
129
+ Const C_START As String = "着手"
130
+
131
+ Const C_START_LATE As String = "遅れ"
132
+
133
+ Const C_START_EMP As String = ""
134
+
135
+
136
+
137
+ Const C_END_FIRST As String = "先行完了"
138
+
139
+ Const C_END As String = "完了"
140
+
141
+ Const C_END_LATE As String = "遅れ"
142
+
143
+ Const C_END_EMP As String = ""
144
+
145
+
146
+
147
+
148
+
149
+ 'ColorIndex用の色識別定数
150
+
151
+ Const C_BLACK As Integer = 1
152
+
153
+ Const C_RED As Integer = 3
154
+
155
+ Const C_ORANGE As Integer = 45
156
+
157
+ Const C_GREEN As Integer = 4
158
+
159
+
160
+
161
+
162
+
163
+ 'データ行数を格納する変数。
164
+
165
+ Dim rowsCount As Integer
166
+
167
+
168
+
169
+ 'セル内のデータを格納する変数。
170
+
171
+ Dim cellDateFrom As Date
172
+
173
+ Dim cellDateTo As Date
174
+
175
+ Dim cellDateB As Variant
176
+
177
+ Dim cellDateC As Variant
178
+
179
+ Dim cellDataD As Integer
180
+
181
+
182
+
125
183
  Sub 実行()
126
184
 
127
185
  Debug.Print Time()

5

コード追加

2017/10/03 08:29

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -115,3 +115,413 @@
115
115
 
116
116
 
117
117
  よろしくお願いします。
118
+
119
+
120
+
121
+
122
+
123
+ ```vba
124
+
125
+ Sub 実行()
126
+
127
+ Debug.Print Time()
128
+
129
+ Call SetReportDate
130
+
131
+ Call SetRows
132
+
133
+ Call EditFormats
134
+
135
+ Call SetCells
136
+
137
+ Range("A1").Select
138
+
139
+ Debug.Print Time()
140
+
141
+ MsgBox ("処理が正常に完了しました。")
142
+
143
+ End Sub
144
+
145
+
146
+
147
+ '報告期間FROMと報告期間TOを取得する。
148
+
149
+ Sub SetReportDate()
150
+
151
+ cellDateFrom = Cells(3, 2).Value
152
+
153
+ cellDateTo = Cells(3, 3).Value
154
+
155
+ If cellDateFrom = "0:00:00" Or cellDateTo = "0:00:00" Or cellDateFrom = Empty Or cellDateTo = Empty Then
156
+
157
+ MsgBox ("報告期間FROMまたは報告期間TOが入力されていません。")
158
+
159
+ End
160
+
161
+ End If
162
+
163
+ End Sub
164
+
165
+
166
+
167
+ 'ユーザが入力したデータの行数をrowsCountにセットする。
168
+
169
+ Sub SetRows()
170
+
171
+ Range("B6").Select
172
+
173
+ If Range("B6").Value = Empty Then
174
+
175
+ MsgBox ("作業着手予定日が入力されていないか、行頭から入力されていません。")
176
+
177
+ End
178
+
179
+ Else
180
+
181
+ Range(Selection, Selection.End(xlDown)).Select
182
+
183
+ rowsCount = Selection.rows.count + 5
184
+
185
+ End If
186
+
187
+ End Sub
188
+
189
+
190
+
191
+ '変換対象列引数として、EditFormatに渡す。
192
+
193
+ Sub EditFormats()
194
+
195
+ Call EditFormat(2)
196
+
197
+ Call EditFormat(3)
198
+
199
+ End Sub
200
+
201
+
202
+
203
+ '"16/09/26(火)"形式の入力を"2016/09/26"形式に整える。
204
+
205
+ Sub EditFormat(pClumn As Integer)
206
+
207
+ 'フォーマット変更時に使用する変数
208
+
209
+ Dim inStrVal As Integer
210
+
211
+ Dim afterCellVal As String
212
+
213
+ '変換対象列の6行目から最終行までを変換する。
214
+
215
+ For pRow = 6 To rowsCount
216
+
217
+ If Len(Cells(pRow, pClumn).Value) > 0 Then
218
+
219
+ Cells(pRow, pClumn).NumberFormatLocal = "yyyy/m/d;@"
220
+
221
+ inStrVal = InStr(Cells(pRow, pClumn).Value, "(")
222
+
223
+ If inStrVal > 0 Then
224
+
225
+ afterCellVal = Left(Cells(pRow, pClumn).Value, inStrVal - 1)
226
+
227
+ Cells(pRow, pClumn).Value = CDate("20" + afterCellVal)
228
+
229
+ End If
230
+
231
+ Else
232
+
233
+ Exit For
234
+
235
+ End If
236
+
237
+ Next pRow
238
+
239
+ End Sub
240
+
241
+
242
+
243
+ '着手状況、完了状況の判別に必要な対象列引数として、SetCellsConditionCheckに渡す。
244
+
245
+ Sub SetCells()
246
+
247
+ Call SetCellsConditionCheck(2)
248
+
249
+ Call SetCellsConditionCheck(3)
250
+
251
+ End Sub
252
+
253
+
254
+
255
+ 'セル情報と、そのセルの期間パターン、申告状況パターンを引数として、SetCellに渡す。
256
+
257
+ Sub SetCellsConditionCheck(pClumn As Integer)
258
+
259
+ For pRow = 6 To rowsCount
260
+
261
+
262
+
263
+ '期間セット
264
+
265
+ pCellDate = Cells(pRow, pClumn).Value
266
+
267
+ '期間パターンを格納する変数
268
+
269
+ Dim pDuringPattern As Integer
270
+
271
+ '期間パターンセット
272
+
273
+ pDuringPattern = CheckDuringPattern(pCellDate)
274
+
275
+
276
+
277
+
278
+
279
+ '進捗状況セット
280
+
281
+ cellDataD = Cells(pRow, 4).Value
282
+
283
+ '進捗状況を格納する変数
284
+
285
+ Dim pProgressSituation As Integer
286
+
287
+ '進捗状況パターンセット
288
+
289
+ pProgressSituation = CheckProgressSituation(cellDataD)
290
+
291
+
292
+
293
+
294
+
295
+ 'セルに文字をセットする処理
296
+
297
+ Call SetCell(pRow, pClumn, pDuringPattern, pProgressSituation)
298
+
299
+
300
+
301
+ Next pRow
302
+
303
+ End Sub
304
+
305
+
306
+
307
+ '対象セルへの文字列セット処理。
308
+
309
+ Sub SetCell(pRow As Variant, pClumn As Integer, pDuringPattern As Integer, pProgressSituation As Integer)
310
+
311
+
312
+
313
+ '対象セルにセットする文字を格納する変数
314
+
315
+ Dim pString As String
316
+
317
+
318
+
319
+ If pClumn = 2 Then
320
+
321
+ If pDuringPattern = 4 Then
322
+
323
+ Select Case pProgressSituation
324
+
325
+ Case 0, 2
326
+
327
+ pString = C_START_FIRST
328
+
329
+ Case 1
330
+
331
+ pString = C_START_EMP
332
+
333
+ End Select
334
+
335
+ Else
336
+
337
+ Select Case pProgressSituation
338
+
339
+ Case 0, 2
340
+
341
+ pString = C_START
342
+
343
+ Case 1
344
+
345
+ pString = C_START_LATE
346
+
347
+ End Select
348
+
349
+ End If
350
+
351
+ ElseIf pClumn = 3 Then
352
+
353
+ If pDuringPattern = 4 Then
354
+
355
+ Select Case pProgressSituation
356
+
357
+ Case 0
358
+
359
+ pString = C_END_FIRST
360
+
361
+ Case 1, 2
362
+
363
+ pString = C_END_EMP
364
+
365
+ End Select
366
+
367
+ Else
368
+
369
+ Select Case pProgressSituation
370
+
371
+ Case 0
372
+
373
+ pString = C_END
374
+
375
+ Case 1, 2
376
+
377
+ pString = C_END_LATE
378
+
379
+ End Select
380
+
381
+ End If
382
+
383
+ End If
384
+
385
+
386
+
387
+ '対象セルへの文字セット
388
+
389
+ Cells(pRow, pClumn + 3).Value = pString
390
+
391
+
392
+
393
+ 'カラー設定
394
+
395
+ If pString = C_START_LATE Or pString = C_END_LATE Then
396
+
397
+ Call SetColor(pRow, pClumn + 3, C_RED)
398
+
399
+ Else
400
+
401
+ Call SetColor(pRow, pClumn + 3, C_BLACK)
402
+
403
+ End If
404
+
405
+
406
+
407
+ End Sub
408
+
409
+
410
+
411
+ '期間パターンの判定処理
412
+
413
+ Function CheckDuringPattern(pCellDate As Variant) As Integer
414
+
415
+ If pCellDate < cellDateFrom Then
416
+
417
+ CheckDuringPattern = 0
418
+
419
+ ElseIf pCellDate = cellDateFrom Then
420
+
421
+ CheckDuringPattern = 1
422
+
423
+ ElseIf cellDateFrom < pCellDate And pCellDate < cellDateTo Then
424
+
425
+ CheckDuringPattern = 2
426
+
427
+ ElseIf pCellDate = cellDateTo Then
428
+
429
+ CheckDuringPattern = 3
430
+
431
+ ElseIf cellDateTo < pCellDate Then
432
+
433
+ CheckDuringPattern = 4
434
+
435
+ End If
436
+
437
+ End Function
438
+
439
+
440
+
441
+ '進捗状況パターンの判定処理
442
+
443
+ Function CheckProgressSituation(cellDataD As Integer) As Integer
444
+
445
+ If cellDataD = 100 Then
446
+
447
+ CheckProgressSituation = 0
448
+
449
+ ElseIf cellDataD = 0 Then
450
+
451
+ CheckProgressSituation = 1
452
+
453
+ ElseIf 1 < cellDataD And cellDataD < 100 Then
454
+
455
+ CheckProgressSituation = 2
456
+
457
+ End If
458
+
459
+ End Function
460
+
461
+
462
+
463
+ 'B3,C3のセルデータを削除する。
464
+
465
+ Sub ResetInputDataReports()
466
+
467
+ Range("B3:C3").Select
468
+
469
+ Selection.ClearContents
470
+
471
+ End Sub
472
+
473
+
474
+
475
+ 'B6~F6の6行目から最終行までのセルデータを削除する。
476
+
477
+ Sub ResetInputDataProjects()
478
+
479
+ Range("B6:F6").Select
480
+
481
+ Range(Selection, Selection.End(xlDown)).Select
482
+
483
+ Selection.ClearContents
484
+
485
+ End Sub
486
+
487
+
488
+
489
+ '対象セルの文字色をpColorIndexの指定色に設定する。
490
+
491
+ Sub SetColor(pRow As Variant, pClumn As Integer, pColorIndex As Integer)
492
+
493
+ Cells(pRow, pClumn).Select
494
+
495
+ With Selection.Font
496
+
497
+ .ColorIndex = pColorIndex
498
+
499
+ .TintAndShade = 0
500
+
501
+ End With
502
+
503
+ End Sub
504
+
505
+
506
+
507
+ 'E6~F6の6行目から最終行までの文字色を黒に設定する。
508
+
509
+ Sub ResetColors()
510
+
511
+ Range("B6:F6").Select
512
+
513
+ Range(Selection, Selection.End(xlDown)).Select
514
+
515
+ With Selection.Font
516
+
517
+ .ColorIndex = 1
518
+
519
+ .TintAndShade = 0
520
+
521
+ End With
522
+
523
+ End Sub
524
+
525
+
526
+
527
+ ```

4

処理速度をまとめました。

2017/10/03 08:26

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -68,208 +68,50 @@
68
68
 
69
69
 
70
70
 
71
- 45件
72
-
73
- 15:23:03 15:23:13 15:23:27
71
+ --ややこしくなってしまったため、結果を完結にしました。
74
-
75
- 15:23:03 15:23:13 15:23:28
76
-
77
-
78
-
79
- 90件
80
-
81
- 15:23:41 15:23:55 15:24:08
82
-
83
- 15:23:42 15:23:56 15:24:09
84
-
85
-
86
-
87
- 180件
88
-
89
- 15:25:28 15:25:47 15:26:08
90
-
91
- 15:25:30 15:25:49 15:26:10
92
-
93
-
94
-
95
- 360件
96
-
97
- 15:28:32 15:29:08 15:29:37
98
-
99
- 15:28:36 15:29:11 15:29:41
100
-
101
-
102
-
103
- 720件
104
-
105
- 15:31:03 15:32:14 15:32:50
106
-
107
- 15:31:09 15:32:19 15:32:55
108
-
109
-
110
-
111
- 1440件
112
-
113
- 15:33:28 15:34:03 15:34:41
114
-
115
- 15:33:42 15:34:13 15:34:48
116
-
117
-
118
-
119
- 2880件
120
-
121
- 15:50:46 15:51:34 15:52:08
122
-
123
- 15:50:56 15:51:47 15:52:21
124
72
 
125
73
 
126
74
 
127
75
 
128
76
 
77
+ ①9回の平均を求めました。
78
+
129
- 時間の上が処理開始、下が処理終了時の時間で、各三づつ取得しています。
79
+ 1440件 9分実行速度AVG 8.555555556
80
+
81
+ 2880件 9回分実行速度AVG 12.22222222
82
+
83
+ 5760件 9回分実行速度AVG 20.44444444
130
84
 
131
85
 
132
86
 
133
- ここで1440件と2880件の処理時間それぞれ
87
+ ②またそれぞれ9回で処理実行速度が大きく推移していることなく
134
88
 
135
- 14秒、10秒、7秒
89
+ 5760件の時では
90
+
91
+ 20 20 21 20 21 20 21 21 20 (s)
92
+
93
+ と平均からブレることは無かったです。
136
94
 
137
95
 
138
96
 
139
- 10秒13秒、13秒
97
+ ①からデータ件数が倍になっても処理速度は1.5倍ずつしか上がらないことがわかり
98
+
99
+ ②から一回一回の処理実行速度からはpoolなどの処理高速化はされていないようでした。
140
100
 
141
101
 
142
102
 
143
- なっています。
103
+ この①②は矛盾しているような気がします。
144
104
 
145
105
 
146
106
 
147
- ここで、バックグラウンドプロセスか何かの影響の可能性も考慮し、
107
+ 理由
148
108
 
149
- 1440件ーンと2880のパターンを再、3回つ取得しました
109
+ 高速化が行われていないなら、データ件数が二倍になったら、処理即も二倍になるはです
150
110
 
151
111
 
152
112
 
153
- 1440件
154
-
155
- 15:57:42 15:58:05 15:58:35
113
+ この現象はどういう状況で起こっているのですか。
156
-
157
- 15:57:47 15:58:12 15:58:46
158
-
159
-
160
-
161
- 2880件
162
-
163
- 15:59:17 15:59:56 16:00:29
164
-
165
- 15:59:30 16:00:09 16:00:43
166
114
 
167
115
 
168
116
 
169
- 結果はそれぞれ
170
-
171
- 5秒、7秒、11秒
172
-
173
-
174
-
175
- 13秒、13秒、14秒でした。
176
-
177
-
178
-
179
-
180
-
181
- このタイム差に関して、考えられるのはバックグラウンドで何かしらのプロセスが動いていた可能性ですが、
182
-
183
- 1440件の場合のみズレが大きいように思います。
184
-
185
-
186
-
187
- 考えられる要因はなんでしょうか。
188
-
189
-
190
-
191
- また、データ数が2880件と倍近くのデータがあるのにもかかわらず、
192
-
193
- 1440件のときよりも処理速度が速い気がします。
194
-
195
-
196
-
197
- これはoracleでいう検索結果のpoolのような働きをしているのでしょうか?
198
-
199
- (やってることはE6~EXXXX,F6~FXXXXのデータセットですが、、、)
200
-
201
-
202
-
203
- だとすれば、二回目に検証したときの処理速度が
204
-
205
- 一回目<二回目<三回目となっているのがなぜでしょうか・・・。
206
-
207
-
208
-
209
- 教えてださい。
117
+ よろしお願します
210
-
211
-
212
-
213
- 追加で三回分ずつ取りました。
214
-
215
- 2880件
216
-
217
- 16:23:22 16:23:22 16:24:42
218
-
219
- 16:23:32 16:23:32 16:24:56
220
-
221
-
222
-
223
- 1440件
224
-
225
- 16:25:18 16:25:43 16:26:15
226
-
227
- 16:25:24 16:25:49 16:26:26
228
-
229
-
230
-
231
-
232
-
233
- 9回の平均を求めました。
234
-
235
- 1440件 9回分実行速度AVG 8.555555556
236
-
237
- 2880件 9回分実行速度AVG 12.22222222
238
-
239
-
240
-
241
- 上記からデータ件数が倍で処理速度が約1.5倍の理由はpoolで説明がつきますか?
242
-
243
-
244
-
245
- 5760件
246
-
247
- 16:35:49 16:37:26 16:38:12
248
-
249
- 16:36:09 16:37:46 16:38:33
250
-
251
-
252
-
253
-
254
-
255
- 16:40:57 16:41:47 16:42:56
256
-
257
- 16:41:17 16:42:08 16:43:16
258
-
259
-
260
-
261
-
262
-
263
- 16:43:50 16:45:11 16:45:49
264
-
265
- 16:44:11 16:45:32 16:46:09
266
-
267
-
268
-
269
- 5760件 9回分実行速度AVG 20.44444444
270
-
271
-
272
-
273
- んーデータ数に対して処理速度は2倍ではなく、1,5倍程度で推移しているようですが、
274
-
275
- 単体の実行速度は変わらないみたいです。

3

5760件の処理速度追加。

2017/10/03 07:56

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -239,3 +239,37 @@
239
239
 
240
240
 
241
241
  上記からデータ件数が倍で処理速度が約1.5倍の理由はpoolで説明がつきますか?
242
+
243
+
244
+
245
+ 5760件
246
+
247
+ 16:35:49 16:37:26 16:38:12
248
+
249
+ 16:36:09 16:37:46 16:38:33
250
+
251
+
252
+
253
+
254
+
255
+ 16:40:57 16:41:47 16:42:56
256
+
257
+ 16:41:17 16:42:08 16:43:16
258
+
259
+
260
+
261
+
262
+
263
+ 16:43:50 16:45:11 16:45:49
264
+
265
+ 16:44:11 16:45:32 16:46:09
266
+
267
+
268
+
269
+ 5760件 9回分実行速度AVG 20.44444444
270
+
271
+
272
+
273
+ んーデータ数に対して処理速度は2倍ではなく、1,5倍程度で推移しているようですが、
274
+
275
+ 単体の実行速度は変わらないみたいです。

2

9回の平均を求めました。

2017/10/03 07:49

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -225,3 +225,17 @@
225
225
  16:25:18 16:25:43 16:26:15
226
226
 
227
227
  16:25:24 16:25:49 16:26:26
228
+
229
+
230
+
231
+
232
+
233
+ 9回の平均を求めました。
234
+
235
+ 1440件 9回分実行速度AVG 8.555555556
236
+
237
+ 2880件 9回分実行速度AVG 12.22222222
238
+
239
+
240
+
241
+ 上記からデータ件数が倍で処理速度が約1.5倍の理由はpoolで説明がつきますか?

1

追加データ

2017/10/03 07:34

投稿

King_of_Flies
King_of_Flies

スコア382

test CHANGED
File without changes
test CHANGED
@@ -207,3 +207,21 @@
207
207
 
208
208
 
209
209
  教えてください。
210
+
211
+
212
+
213
+ 追加で三回分ずつ取りました。
214
+
215
+ 2880件
216
+
217
+ 16:23:22 16:23:22 16:24:42
218
+
219
+ 16:23:32 16:23:32 16:24:56
220
+
221
+
222
+
223
+ 1440件
224
+
225
+ 16:25:18 16:25:43 16:26:15
226
+
227
+ 16:25:24 16:25:49 16:26:26