PCメモ

Excelを中心とした業務改善の記録

VBA100本ノック6本目:セルに計算式

excel-ubara.com

出題内容

#VBA100本ノック 6本目
画像のようにA1から始まる表があります。
D列にB列×C列の計算式を入れてください。
ただし商品コードに"-"の枝番が付いている場合は計算式を入れずそのままにしてください。
例.D2にはA2×B2の計算式を入れる。D4:D5には計算式を入れない。

VBA マクロ 100本ノック

自分の回答

Dim LastRow As Long
Dim i As Long

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To LastRow
 If Cells(i, 1) Like "*-*" Then
 Else
  Cells(i, 4) = Cells(i, 2) * Cells(i, 3)
 End If
Next i

 Cells(i, 4) = Cells(i, 2) * Cells(i, 3) とすると計算式ではなく計算結果が入力されてしまう。

解説

範囲内に同一数式を入力したい場合は、相対参照で一括入力した方が良い。

R1C1参照を使用する。

Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
  If Not Cells(i, 1).Value Like "*-*" Then
    Cells(i, 4).FormulaR1C1 = "=RC[-2]*RC[-1]"
  End If
Next

VBA100本ノック 6本目:セルに計算式|VBA練習問題

Cells(i, 4).FormulaR1C1 = "=RC[-2]*RC[-1]" とすることで、相対参照の計算式をセルに入力できる。

R1C1参照を使うと、基準セルからの位置で計算式を入れることができる。

R:Row(行)
下方向へ正の数で増えていく。

C:Column(列)
右方向へ正の数で増えていく。

R Rの後に何も記述しなければ同一行
C Cの後に何も記述しなければ同一行
R1 数値の絶対行数
C1 数値の絶対列数
R[1] [数値]分行位置をずらした行
C[1] [数値]分列位置をずらした列