こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル マクロ

はじめまして。
エクセルでマクロを使って研究を進めているものです。
最近マクロを使い始めたのですが、ワークシート関数のスクリプトについてご質問があります。
具体的な記述を書いたほうが説明しやすいので、下に記述します。
Sub Macro1()
Windows("a.xls").Activate

ActiveCell.FormulaR1C1 = "=SUM(RC[-8]:RC[-1])"・・・(1)
Range("J3").Select
End Sub
このような命令があるときに、sum関数の中に変数を入れることを考えます。そのときに、R1C1表示では選択したセルを基準にして変数を考えなくてはいけないので考えにくいです。そこで、イメージとしてですがこのような書き方はできないのでしょうか。
(1)の部分
ActiveCell.Formula = "=SUM(Range(Cells(2, 2), Cells(2, 変数)))"
つまり、rangeやcellsを使って書きたいということです。
また、実際のエクセルのセルに入力されている関数をそのままコピーして、それに変数を自分で手直しして加えるような方法がありましたら教えてください。
よろしくお願いします。

投稿日時 - 2007-12-11 18:01:05

QNo.3589952

すぐに回答ほしいです

質問者が選んだベストアンサー

ActiveCell.Formula = "=SUM(" & Range(Cells(2, 2), Cells(2, 変数)).Adderss & ")"

のような方法で可能です。

投稿日時 - 2007-12-11 18:25:35

お礼

さっそくのお返事ありがとうございます。
かなり求めていたものに近かったのでありがたいです。

投稿日時 - 2007-12-11 20:43:52

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

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の文字列を計算で作成してやればどんな式でも入ります。

投稿日時 - 2007-12-11 21:13:55

ANo.4

質問には、直接関係ないですが、計算式の方法が、R1C1参照形式を使用するという設定になっていませんか。
Excel2003の場合、ツール、オプションの中に全般タグ、R1C1参照形式を使用するのチェックを外すことで、セルをA1,A2・・・のようにすることができます。
この点は、どうでしょうか。

投稿日時 - 2007-12-11 20:34:29

お礼

その点はしっかり分かっています。
ただ、関数の中に変数を入れるときの入れ方がよく理解できていないということです。
お返事ありがとうございました。

投稿日時 - 2007-12-11 20:45:28

ANo.3

質問者は独学でやっているために、便利なスマートなやり方に触れてないだけです。この質問コーナーを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)が簡潔な場合もあるが。

投稿日時 - 2007-12-11 20:22:35

お礼

お返事ありがとうございます。
もう少し勉強が足りなかったみたいです。
これにめげず頑張りたいと思います。
ご指摘の点はまだはっきりと理解できないですが、これを頼りに幅を広げていこうと思います。

投稿日時 - 2007-12-11 20:55:48

ANo.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
で変数に格納→加工→別セルに格納になると思いますが具体的ではないので回答できません。

投稿日時 - 2007-12-11 18:54:33

お礼

>ActiveCell.Formula = "=SUM(A1:A" & a & ")"
この形式の場合、行ではなくて列が変数になる場合が分からないです。
最後のスクリプトは…、もう少し考えて見ます。
お返事ありがとうございました。

投稿日時 - 2007-12-11 20:49:27

あなたにオススメの質問