回答編集履歴

4

説明追記

2022/10/03 14:27

投稿

hatena19
hatena19

スコア33763

test CHANGED
@@ -23,6 +23,9 @@
23
23
  Next
24
24
  End Sub
25
25
  ```
26
+
27
+ `R[-2]C`は自分のセルより2つ上のセルという意味になります。
28
+
26
29
  ---
27
30
  実は、ループしなくても下記の1行で同じ結果になります。
28
31
 

3

コード追記

2022/10/03 14:23

投稿

hatena19
hatena19

スコア33763

test CHANGED
@@ -12,10 +12,22 @@
12
12
  End Sub
13
13
  ```
14
14
 
15
+ ---
15
- ちなみに、ープしなくても下記の1行で同じ結果になります。
16
+ R1C1形式の相対参照を使えばもう少しシンプルになります。
16
17
 
17
18
  ```vba
18
- Sub macro1()
19
+ Sub macro2()
20
+ Dim i As Integer
21
+ For i = 1 To 100
22
+ Worksheets("Sheet1").Cells(3, i).FormulaR1C1 = "=R[-2]C+R[-1]C"
23
+ Next
24
+ End Sub
25
+ ```
26
+ ---
27
+ 実は、ループしなくても下記の1行で同じ結果になります。
28
+
29
+ ```vba
30
+ Sub macro3()
19
31
  Worksheets("Sheet1").Cells(3, 1).Resize(,100).Formula = "=A1+A2"
20
32
  End Sub
21
33
  ```

2

コード修正

2022/10/03 14:08

投稿

hatena19
hatena19

スコア33763

test CHANGED
@@ -1,12 +1,14 @@
1
-
2
- 26 を 100 にすればいいだけです。
1
+ ~~26 を 100 にすればいいだけです。~~
2
+ Addressプロパティでセルアドレスを取得すればいいでしょう。
3
3
 
4
4
  ```vba
5
5
  Sub macro1()
6
6
  Dim i As Integer
7
+ With Worksheets("Sheet1")
7
- For i = 1 To 100
8
+ For i = 1 To 100
8
- Worksheets("Sheet1").Cells(3, i).Formula = "=" & Chr(64 + i) & "1+" & Chr(64 + i) & "2"
9
+ .Cells(3, i).Formula = "=" & .Cells(1, i).Address(0, 0) & "+" & .Cells(2, i).Address(0, 0) & "2"
9
- Next
10
+ Next
11
+ End With
10
12
  End Sub
11
13
  ```
12
14
 
@@ -14,6 +16,7 @@
14
16
 
15
17
  ```vba
16
18
  Sub macro1()
17
- Worksheets("Sheet1").Cells(3, 1).Resize(,100).Formula = "=A1+B2"
19
+ Worksheets("Sheet1").Cells(3, 1).Resize(,100).Formula = "=A1+A2"
18
20
  End Sub
19
21
  ```
22
+ A3に式を入力して、右へ100列分オートフィルしたのと同じ動作になります。

1

コード微修正

2022/10/03 11:51

投稿

hatena19
hatena19

スコア33763

test CHANGED
@@ -14,6 +14,6 @@
14
14
 
15
15
  ```vba
16
16
  Sub macro1()
17
- Worksheets("Sheet4").Cells(3, 1).Resize(,100).Formula = "=A1+B2"
17
+ Worksheets("Sheet1").Cells(3, 1).Resize(,100).Formula = "=A1+B2"
18
18
  End Sub
19
19
  ```