VBA初心者です。
未特定の行のデータシートの行数を調べて、その行数分特定の列に関数を入れるようなVBAを作成中です。
現在、下記のようなコーディングをしているのですが、セルに入れるものが関数になった時点で分からなくなりました。

Private Sub CommandButton1_Click()
Dim rs As Integer
rs = Range("D2").End(xlDown).Row
Dim Ka As Integer
Ka = ' →ここに数式を入れる方法が分かりません!
Range(Cells(2, 5), Cells(rw, 5)) = Ka
Worksheets("Sheet2").Activate
MsgBox ("成功" & rs)
End Sub

こんな感じなんですが、宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんな感じでしょうか。



Private Sub CommandButton1_Click()
Dim rs As Integer
rs = Range("D2").End(xlDown).Row
Dim Ka As String ’文字列にしました
Dim rCot As Integer '行カウンタ
For rCot = 2 To rs ’算式を作るためにループさせています
'<例>E列にはC列の100倍とE列を加算の式を入れる場合
'E2=C2*100+D2 右辺の2が行数で変わるので変数にする。後は文字列の結合
Ka = "=C" & rCot & "*100+D" & rCot
'Rangeの中にCellsを持ち込むと分かりにくいのでOffsetにしました
Range("D2").Offset(rCot - 2, 1).Formula = Ka
Next
Worksheets("Sheet2").Activate
MsgBox ("成功" & rs)
End Sub
    • good
    • 0
この回答へのお礼

nishi6さん!ありがとうございました。いつもありがとうございます。
ちょっとエラーが出てしまいましたが、今回は理屈が理解できました。とりあえず成功しました。

お礼日時:2001/06/05 21:41

質問の意味を取り違えていたら、ごめんなさい。



Range(Cells(2, 5), Cells(rw, 5)) に、関数を入れたいのなら、

Range(Cells(2, 5), Cells(rw, 5)).Formula="=$A$1+$A$2"

見たいな感じにすれば、関数そのものが入ります。
後は、特定の列全体に関数を入れるように、for等を使えば、出来そうな気がします。

どうでしょう?
    • good
    • 0
この回答へのお礼

ryotagさん!ありがとうございました。完璧です!
最後のメッセージボックス "成功" を無事に見れるとことが出来ました。

お礼日時:2001/06/05 21:38

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q数学の平均変化率の問題なんですけど…

数学の平均変化率の問題なんですけど…
わからないので教えていただければありがたいです。

1.関数y=-3X-1の、X=-4からX=-1までの平均変化率

2.関数y=1/2X’のX=3からX=3+hまでの平均変化率

※ ’の記号は2乗です。

Aベストアンサー

y=f(x)のx=x1からx=x2における平均変化率pは次式で定義されます。
p=(f(x1)-f(x2))/(x1-x2)

1.f(x)=-3x-1
f(-4)=11, f(-1)=2
p=(11-2)/(-4+1)=9/(-3)=-3

2.y=x^2/2と理解します。f(x)=x^2/2
f(3)=9/2
f(3+h)=(9+6h+h^2)/2
p=(6h+h^2)/h=6+h

Q標準モジュールで 『Sub test(ByVal Target As Range)』は動かない?

選択されている複数のアドレスが知りたいので
標準モジュールに
Sub test(ByVal Target As Range)
Debug.Print Target.Address
End Sub
と書きました。

しかしF5ボタンを押しても何も起こりません。
デバッグ→コンパイルをしてもエラーになりません。

シートのイベントプロシージャーではなく
標準モジュールにした理由は
イベント発生時ではなく、任意で起動させたいためです。

ためしに、
Sub test(ByVal Target As Range)
Debug.Print Target.Address
End Sub
の下に、

Sub test2()
Call test
End Sub

と書いたら、
「引数は省略できません。」
というエラーになりました。

何がダメなのかわかりません。
ご教授よろしくお願い致します。

Aベストアンサー

こんばんは。

今回は、初歩的なことですが、段階を経たほうがよいと思います。つまみ食いのようなことをしても、なかなか、VBAもWSHも覚えられないと思います。しかし、今回のように単発では、こちらの書いていることはほとんど分かってもらえないと思います。

今回は、サブルーチンのコードですが、サブルーチンを書くということは、それなりに、その前段階を理解していなくてはなりません。イベント・ドリブン型とは関係がありません。

それと、Target は、予約語ではありませんが、イベント・ドリブン型の引数に使われているものですから、他の語を使ったほうがよいです。それを許していると、自分ですらコードが読めなくなっていくはずです。

今回のようなコードを実際に書くことはありえませんが、ByVal キーワードは、入れるのと入れないのでは違いがありますが、Test1 側で、引数のデータ型が決めてあれば、入れなくても構わないです。Debug.Print としてしまったら、さっぱり、その意味が見えないでしょうけれども……。

F5を押しても、サブルーチンは呼び出さないと動きません。
それに、呼び出す場合は、引数を入れなければなりません。

'-------------------------------------------

Sub Test1()
Dim c As Range  '←これがあるので、ByVal は不要
For Each c In Range("A1:A10")
 Call Test2(c)
Next c
End Sub

'サブルーチン(Target という名称は使わない)
Sub Test2(rng As Range)
  Debug.Print rng.Address
  'Debug.Print では、良く意味が分からないはずです。
  'Range オブジェクトを引数にしたら、いろんな使い方がある
End Sub

'-------------------------------------------

こんばんは。

今回は、初歩的なことですが、段階を経たほうがよいと思います。つまみ食いのようなことをしても、なかなか、VBAもWSHも覚えられないと思います。しかし、今回のように単発では、こちらの書いていることはほとんど分かってもらえないと思います。

今回は、サブルーチンのコードですが、サブルーチンを書くということは、それなりに、その前段階を理解していなくてはなりません。イベント・ドリブン型とは関係がありません。

それと、Target は、予約語ではありませんが、イベント・ドリブン...続きを読む

Q平均変化率がわかりません。 関数f(x)=-3x+1のx=0からx=3までの平均変化率 関数f(x)

平均変化率がわかりません。
関数f(x)=-3x+1のx=0からx=3までの平均変化率

関数f(x)=x^3+xのx=1からx=2までの平均変化率
です。

Aベストアンサー

1) f(x)=-3x+1
f(0)=1, f(3)=-9+1=-8
平均変化率=(f(3)-f(0))/(3-0)=(-8-1)/3=-9

2)f(x)=x^3+x
f(1)=1+1=2
f(2)=2^3+2=8+2=10
平均変化率=(f(2)-f(1))/(2-1)=10-2=8

QRange(Cells(32, 14)).Value = "S" がエラーになります

よろしくお願いします。いつもgooの皆さんに大変お世話になっています。
エクセルは2013です

Range(Cells(32, 14)).Value = "S" がエラーになります
メッセージは「Range メソッドは失敗しました Worksheet オブジェクト」です

32行目の14列にSを書き込みたいので、ネットで調べてやってみたのですが
よく理解できません

14という数値を使って書きたいのですが、どう書き換えたら良いでしょうか
どなたか教えてください

Aベストアンサー

この場合一つのセルですから
Cells(32, 14).Value = "S"
これだけです。Rangeは不要です。

Q金額の変化率=価格の変化率+数量の変化率 の証明は?

経済の啓蒙書を読んでいて

1)金額=価格×数量
2)金額の変化率=価格の変化率+数量の変化率 (ただし変化率が数%の時)

と有りました。1)は自明なのですが、2)の近似式が分かりません。全微分かな~とか思いつつ自分で証明を考えたのですがうまくいきません。どのように証明したら良いのでしょうか? また簡単な理解の仕方有りますでしょうか?

当方1理系の人間です。経済は全くの素人です。経済又は経営学部で学んだ方解説宜しくお願いします。

Aベストアンサー

価格の変化率=X
数量の変化率=Y
金額の変化率=Z とすれば
1+Z=(1+X)(1+Y)=1+(X+Y)+XY
X、Yともに数%のとき、XYは0に近く無視できる(例:ともに1%ならXY=0.0001)
よってZ=X+Yと見なせる。

QExcel VBAでsub,dimは何の略?

Excel VBAで
sub,dimはそれぞれ何の略ですか?

Aベストアンサー

sub subroutine(サブルーチン)
dim dimension(次元)

です。
元々はFORTRAN言語で、手続きの開始を宣言するSUBROUTINEと、配列を宣言するDIMENSIONでした。
FORTRANのDIMENSIONやN-BASIC等でのDimは、配列変数を宣言するものだったのですが、
VBになって、配列じゃない変数もDimで宣言するようになりました。

Q変化率を求める問題で始まりが書かれていないものは0スタートと捉えていいのですか? 例)球の半径rが

変化率を求める問題で始まりが書かれていないものは0スタートと捉えていいのですか?

例)球の半径rが変化するとき、球の体積Vのr=5における変化率を求めよ。

変化率ってどの位変化したか、って事ですよね?微分ってそもそもどんな行為なんでしょうか?
申し訳ないのですが、自分理解力が全然ないみたいなので分かりやすく教えてくれるとありがたいです、、

Aベストアンサー

r=5における変化率を求めるので、r=5の近傍でその変化を調べれば良いだけです。
微分は、関数のその点における変化率の極限です。
つまり、はじまりを0にする必要は無いです。
球の体積の公式、V=3Πr^3/4を元にして、rに関して微分を求めれば良いだけですよ。
dV/dr=9Πr^2/4ですから、r=5の変化率は、9Π5^2/4=225Π/4となります。
定義どおりに、lim[Δr→0](((3Π(5+Δr)^3/4)ー(3Π5^3/4))/Δr)から求めてもかまいません。
3Π/4は定数項なので、外に出すと、(5^3-5^3+3・5^2Δr+3・5Δr^2+Δr^3)/Δr)=3・5^2+3・5Δr+Δr^2
したがって、Δr→0の場合は、3・5^2=75が残ります。
外に出した、3Π/4をかければ、75・3Π/4=225Π/4となります。(微分公式で求めたのと同じですね)
以上は、球の体積の公式を知っている場合です。
質問文での問題が、どの程度の知識で答えるかで、解き方は異なってきますね。

Qエクセル マクロについて Range と Cells について 

エクセル2003 OSはXP を使っています。
以下のとおり、全く同じコードにも関わらず、前者は動き、後者は動きません。
なお、ClearContents を Clear に変えても Copy に変えても、同様の結果です。
しかし、Cells を使わずに、"A4:C10" 等、番地で直接書くと、後者も動きます。
後者のコードを Cells で動かす方法は無いでしょうか?
また、何故こんな現象がおこるのでしょうか?
なお、シート名などは、間違いありません。
どなたか教えてください。

Sheets("基本データ作成").Range(Cells(3, 3), Cells(qwe, 4)).ClearContents

Sheets("検討データ").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents

Aベストアンサー

コマンドボタンをSheet1に貼りつけた場合。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet2").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
はエラーになりました。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Worksheets("sheet2").Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
で動きました。
明示しないと、Rangeの( )の中のCellsをSheet1のRangeと解釈するので、Sheet2のActiveteと矛盾する。
Private Sub CommandButton1_Click()
Dim sh2 As Worksheet
Set sh2 = Worksheets("sheet2")
For qwe = 1 To 10
Sheets("sheet2").Activate
Range(sh2.Cells(4, 1), sh2.Cells(qwe, 3)).ClearContents
Next qwe
End Sub
もだめでした。
ForNextにしたのは、qweの影響でないと思ったので
変化させました。

コマンドボタンをSheet1に貼りつけた場合。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Subは動きました。C1:D10がクリアされました。
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets("Sheet1").Range(Cells(4, 1), Cells(qwe, 3)).ClearContents
Next qwe
End Sub
も動きました。A1:C10がクリアされました。
’----
Private Sub CommandButton1_Click()
For qwe = 1 To 10
Sheets(...続きを読む

Q平均変化率

f(x)=x(x-3)(x-4)のx=0からx=2までの平均変化率を求めよ。
また、この平均変化率はf(x)のx=( A )における微分係数に等しい。
このAの部分も求めよ。

という問題です。

解き方オネガイシマス!m(__)m

Aベストアンサー

平均変化率={f(2)-f(0)}/(2-0)=4/2=2
f'(x)=(x-3)(x-4)+x(x-4)+x(x-3)=3x^2-14x+12=2
これを解く。
3x^2-14x+10=0
x=(7±√19)/3 ←Aはこの2通りです。

Qエクセルのマクロ Range("A1").End(xlDown).rowで列を削除

A列の一番下のデータの次の行から
F列の一番下のデータの行まで削除したいのですが
Rows(" & Range("A1").End(xlDown).row+1 & ":" & Range("F1").End(xlDown).Row & ").Delete Shift:=xlUp
でうまくいきません
どうすればいいのですか?

Aベストアンサー

Rows(Range("A1").End(xlDown).Row + 1 & ":" & Range("F1").End(xlDown).Row).Delete Shift:=xlUp
でどうでしょうか。
Rows()内の最初と最後の("&~&")が不用かと…。

ちなみにxlDownだと途中に空欄があった場合、最下行は取得できません。
xlUpを使ったほうがより確実だと思いますよ。

Aend = Cells(Rows.Count, 1).End(xlUp).Row + 1
Fend = Cells(Rows.Count, 6).End(xlUp).Row
If Aend <= Fend Then Rows(Aend & ":" & Fend).Delete Shift:=xlUp


人気Q&Aランキング