• ベストアンサー

VBAに関する質問

VB初心者です。ExcelのVBAに関していくつか分からないことがあるのでアドバイスを下さい。 ・ファンクションプロシージャを用いて (C8*D8^3-A8)+(C9*D9^3-A9)+(C10*D10^3-A10)+・・・・ (C8、D8、A8は定義した関数の引数) みたいな計算をVBAでしたいのですが、セルの番号を一つずつ上げるにはどうしたら良いのでしょうか? ・ 逆に、 (C8*D8^3-A1000)+(C9*D9^3-A999)+(C10*D10^3-A998)+・・・・ といったひっくり返ったsum計算をしたいのですが、その方法を教えて下さい。 よろしくお願い致します。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

複数の同じような質問は情報が分散または重服しますので片側に集約するようにしましょう 変数として何をグループ化するればいいのかをよく考えましょう > (C8*D8^3-A1000)+(C9*D9^3-A999)+(C10*D10^3-A998)+ であれば C列用、D列用、A列用の3つがあればループできそうですが違いますか 初期値を C8,D8 A1000を参照 C,Dは増加、Aは減少といった具合にすればいいだけです RangeでやるかCellsでやるのかは自分の理解しやすいほうでいいと思います Cells(r,c)とCells(r,c).Valueは同義です Cells関数のデフォルトのプロパティがValueであるため省略された場合はValueの値が関数の戻り値になります VBAに関しての良書は存じません … というよりほとんど独学でやりましたので … VB6・VC6付属のMSDNおよびMicrosoftのMSDNサイトを参照しておりました

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

> VBAの方がadvancedだから優れているのでしょうか? ではありません VBAは Visual Basic for Application の略称です つまり VisualBasicのサブセット(完全な互換性が無い)であり付随するアプリケーションに特化したものになっています ExcelVBAとかAccessVBAなどのようにアプリケーション名をつけて記述する場合もあります

motarou
質問者

お礼

ありがとうございます。 出来れば、下記の質問にも答えて頂けないでしょうか? 何卒よろしくお願い致します。 例えばf(x,y,z)という関数で、変数であるx,y,zにセルA8やB8、C8といったものを入れることで (C8*D8^3-A1000)+(C9*D9^3-A999)+(C10*D10^3-A998)+・・・・ みたいな連番の計算が出来るようにしたいのですが。 ・それと手元にある本には、Cells(rw,col)とCells(rw,col).Valueは同じと書かれてあるのですが、厳密には異なるものなのでしょうか? ・出来ればこういったExcel VBA のファンクションプロシージャに関して良い本がありましたら教えて下さい。 お願いいたします。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

VBA的にやるならRangeオブジェクトや配列の活用を考えましょう 最近のパソコンならさほど気にする事もありませんが Cellsメソッドは結構コストのかかる命令です C8:D20の範囲のデータなら dim arData arData = Range("C8:D20").Value などとすれば arData(0,0)にC8 arData(0,1)にC9 arData(1,0)にD8 arData(1,12)にD20 の値を取得できます

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

プログラムでは関数式のように+とセル番地をべたべた並べて書くのでなく、式の部分まとまりを繰り返します。 繰り返しはForNextを使うとして S=0 For i=1 to 18 s=s+cells(i,"C")*Cells(i,"D")-Cells(i,"A") Next i のようにします。これ合計を出すというかすべてのプログラムの第1歩の課題ですよ。 セルの値をどうコードで捉えるかもVBAの基本中の基本です。 ーーー >VB初心者です VBAとVBは区別して表現したほうが良い。文法は似ているが、学ぶべきことは、内容が別物です。

motarou
質問者

お礼

アドバイスありがとうございます。 出来ればVBとVBAの違いを教えて下さい。 VBAの方がadvancedだから優れているのでしょうか? お願いいたします

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

>(C8、D8、A8は定義した関数の引数)~~ それぞれが、変数という意味なのでしょうか? 変数ではなく、セル位置を示していると解釈して・・・ (違っていたら失礼) まず、セルの指定はCells(rw,col)またはRange("C10")などのように指定する必要があります。値をとるならCells(rw,col).Valueなどのようになります。 それなので、セルの指定を変数化して、例えば result = 0 For i = 8 To ○ result = result + Cells(3,i).Value*Cells(4,i).Value^3 - Cells(1,i) Nest i のような指定の仕方をすればよいのでは? どれかが減少していっても、(1008-i)のように考えれば良いでしょう。

motarou
質問者

お礼

ありがとうございます。 かなり理解が深まりました。 ・少し質問の仕方が悪かったのですが、 例えばf(x,y,z)という関数で、変数であるx,y,zにセルA8やB8、C8といったものを入れることで (C8*D8^3-A1000)+(C9*D9^3-A999)+(C10*D10^3-A998)+・・・・ みたいな連番の計算が出来るようにしたいのですが。 ・それと手元にある本には、Cells(rw,col)とCells(rw,col).Valueは同じと書かれてあるのですが、厳密には異なるものなのでしょうか? ・出来ればこういったExcel VBA のファンクションプロシージャに関して良い本がありましたら教えて下さい。 お願いいたします。

関連するQ&A