回答編集履歴

1

コード追記

2021/04/18 03:55

投稿

hatena19
hatena19

スコア33773

test CHANGED
@@ -22,6 +22,52 @@
22
22
 
23
23
 
24
24
 
25
+ 配列利用サンプルコード
26
+
27
+ ```vba
28
+
29
+ '配列
30
+
31
+ Dim a(0 To 19) As Long
32
+
33
+ '配列に値を入力
34
+
35
+ a(0) = ActiveCell.Offset(0, -2).Value '当日の値
36
+
37
+ Dim workday As Long
38
+
39
+ Dim code As Long
40
+
41
+ workday = ActiveCell.Offset(0, -11).Value
42
+
43
+ code = ActiveCell.Offset(0, -9).Value
44
+
45
+
46
+
47
+ Dim i As Long, B As Variant
48
+
49
+ B = Range("A1").CurrentRegion.Value
50
+
51
+ For i = 1 To UBound(B)
52
+
53
+ If B(i, 3) = code Then
54
+
55
+ Dim diff As Long
56
+
57
+ diff = workday - B(i, 1)
58
+
59
+ If diff > 0 And diff < 20 Then a(diff) = B(i, 10)
60
+
61
+ End If
62
+
63
+ Next i
64
+
65
+ ActiveCell.Offset(0, 2) = Application.WorksheetFunction.Average(a)
66
+
67
+ ```
68
+
69
+
70
+
25
71
  また、営業日がどんだけあろうと、コードを見るかぎりは対象は当日から19営業日前までの20個だけなので、データが営業日の昇順(あるいは降順)になっているなら、Index関数で開始位置を取得してそこから20個分のデータを取得すればそもそもForループ自体が不要になりますね。
26
72
 
27
73
  データ例の提示がないので推測ですが。