teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード追記

2021/04/18 03:55

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -10,5 +10,28 @@
10
10
 
11
11
  あとy-waiwaiさんも回答されているように複数の変数を配列にすればコードはシンプルになります。
12
12
 
13
+ 配列利用サンプルコード
14
+ ```vba
15
+ '配列
16
+ Dim a(0 To 19) As Long
17
+ '配列に値を入力
18
+ a(0) = ActiveCell.Offset(0, -2).Value '当日の値
19
+ Dim workday As Long
20
+ Dim code As Long
21
+ workday = ActiveCell.Offset(0, -11).Value
22
+ code = ActiveCell.Offset(0, -9).Value
23
+
24
+ Dim i As Long, B As Variant
25
+ B = Range("A1").CurrentRegion.Value
26
+ For i = 1 To UBound(B)
27
+ If B(i, 3) = code Then
28
+ Dim diff As Long
29
+ diff = workday - B(i, 1)
30
+ If diff > 0 And diff < 20 Then a(diff) = B(i, 10)
31
+ End If
32
+ Next i
33
+ ActiveCell.Offset(0, 2) = Application.WorksheetFunction.Average(a)
34
+ ```
35
+
13
36
  また、営業日がどんだけあろうと、コードを見るかぎりは対象は当日から19営業日前までの20個だけなので、データが営業日の昇順(あるいは降順)になっているなら、Index関数で開始位置を取得してそこから20個分のデータを取得すればそもそもForループ自体が不要になりますね。
14
37
  データ例の提示がないので推測ですが。