回答編集履歴

1

追記

2021/06/12 06:46

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -41,3 +41,65 @@
41
41
  For Nextを抜けてもLRの値が変化することはありません。(iは変化しますが。)
42
42
 
43
43
  D列の最終行のセルの値がたまたま(LR+1)だったのでしょう。
44
+
45
+
46
+
47
+
48
+
49
+ おまけ
50
+
51
+ ---
52
+
53
+ セル範囲を配列に格納したとき、セル番地と配列のインデックスが一致するとは限りません。
54
+
55
+ (今回はセル範囲が1行目から始まってますのでまたまた一致しますが。)
56
+
57
+
58
+
59
+ LBound、UBound 関数でインデックスの最小値と最大値を取得したほうがいいでしょう。
60
+
61
+
62
+
63
+ サンプルコード
64
+
65
+ ```vba
66
+
67
+ Public Sub test()
68
+
69
+ Dim ws1 As Worksheet
70
+
71
+ Set ws1 = ActiveSheet
72
+
73
+
74
+
75
+ Dim LR As Long '最終行の取得
76
+
77
+ LR = ws1.Cells(Rows.Count, 4).End(xlUp).Row
78
+
79
+ Dim dataTB As Variant
80
+
81
+ dataTB = ws1.Range(ws1.Cells(2, 1), ws1.Cells(LR, 4)).Value '1行目はタイトルなので配列に含めない
82
+
83
+
84
+
85
+ 'セルの行番号と配列のインデックスが一致するとは限らないので
86
+
87
+ 'LBound関数で配列の最終インデックスを取得した方かいい。
88
+
89
+ Dim i As Long
90
+
91
+ For i = LBound(dataTB) To UBound(dataTB) '1行目はデータの題目を入れるため開けている
92
+
93
+ dataTB(i, 4) = dataTB(i, 1) + dataTB(i, 2)
94
+
95
+ Next i
96
+
97
+
98
+
99
+ '更新した配列を元に戻す
100
+
101
+ ws1.Cells(2, 1).Resize(UBound(dataTB), UBound(dataTB, 2)).Value = dataTB
102
+
103
+ End Sub
104
+
105
+ ```