No.4追加です。
J3セルがアクティブになっていて、マクロを実行すると=sum(B3:I3)が入るマクロと考えればいいのでしょうか。
まったく発想を変えて、
Sub Macro1()
area = "B3:I3"
Cells(10, 3) = "=sum(" & area & ")"
End Sub
というのはいかがでしょう。cells(10,3)、[B10]のセルにSumの範囲をareaという変数で指定しています。areaの文字列を計算で作成してやればどんな式でも入ります。
質問者は独学でやっているために、便利なスマートなやり方に触れてないだけです。この質問コーナーを1ヶ月間見ておれば、2-3種類のどれも使う方が出てきています。
SUM関数は範囲を引数にしていしますので、セル範囲の正しい書き方であれば、何でも良い。
Sub test01()
x = 3
y = WorksheetFunction.Sum(Range("A1:A" & x))
MsgBox y
End Sub
Sub test02()
x = 4
u = 1: V = 5
y = WorksheetFunction.Sum(Range(Cells(u, "A"), Cells(V, "A")))
MsgBox y
End Sub
ーー
>SUM(RC[-8]:RC[-1])"・・・(1)
私らこういう使い方を見向きもしないが、都合悪いことは無かった。
>ActiveCell.Formula
みな関数式設定にするのも素人くさい。
一般にやり方のタイプは
(1)式設定に持ち込む。Formula=
(2)VBAで使える関数式で計算する、処理する
z = WorksheetFunction.Sum(Range("A1:A5"))
MsgBox z
(3)VBAのロジックで行う
例
Sub test03()
t = 0
For i = 1 To 10
t = t + Cells(i, "A")
Next i
MsgBox t
End Sub
ーー
他の1例 Match関数とFindメソッド利用など
(3)のタイプがが奥行きが深いと思う。(2)が簡潔な場合もあるが。
こんな方法でも。
Sub Macro1()
a = 10
ActiveCell.Formula = "=SUM(A1:A" & a & ")"
End Sub
Sub Macro2()
Cells(1, 1).Value = 10
ActiveCell.Formula = "=SUM(B1:B" & Cells(1, 1).Value & ")"
End Sub
>実際のエクセルのセルに入力されている関数をそのままコピー
Dim wkStr As String
wkStr = Range("A10").Formula
'wkStrを加工
Range("B10").Formula = wkStr
で変数に格納→加工→別セルに格納になると思いますが具体的ではないので回答できません。
質問者
お礼
>ActiveCell.Formula = "=SUM(A1:A" & a & ")"
この形式の場合、行ではなくて列が変数になる場合が分からないです。
最後のスクリプトは…、もう少し考えて見ます。
お返事ありがとうございました。
お礼
さっそくのお返事ありがとうございます。 かなり求めていたものに近かったのでありがたいです。