• ベストアンサー

VBAの質問です2

たびたび申し訳ありません。 繰り返し処理の中でSUM関数を使うときに、引数をA1のような書き方ではなくて(1,1)のようにしたいのですが、そうするとエラーになってしまいます。 これはVBAの問題ではなくて単にSUM関数の引数を(1,1)のように書きたいときにはどうすればいいかという問題だと思いますが。 =SUM((30*I-18,5):(30*I+8,5)) ではだめなんです。 よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

>これはVBAの問題ではなくて単にSUM関数の引数を(1,1)のように書きたいときにはどうすればいいかという問題だと思いますが。 VBAの問題ではないというのは、良く分かりません。 ワークシートとVBAとは、その文法を同じにすることはできません。 VBAとの共有点はあっても、ワークシートとVBAは仕組み自体が根本的に違います。 まず、VBAの入門書などで確認することをお勧めします。 >=SUM((30*I-18,5):(30*I+8,5)) ワークシート関数の引数に、Rangeオブジェクトを入れるのでしたら、VBAでは、A1ではなく、Range("A1")とするか、Cells(1,1)とします。 Sum関数自体は、SUM(1,1) とは引数を取ることができますが、答えは、2 になります。 例を2つ挙げておきますので、参考にしてみてください。 Sub test() LastNum = 5 For I = 1 To LastNum  Cells(I, 1).Value = WorksheetFunction.Sum(Range(Cells(30 * I - 18, 5), Cells(30 * I + 8, 5))) Next I End Sub '---------------------- Sub test2() LastNum = 5 For I = 1 To LastNum  Cells(I, 1).Value = Evaluate("=Sum(E" & (30 * I - 18) & ":E" & (30 * I + 8) & ")") Next I End Sub

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

E39 に =SUM(E12:E38) E69 に =SUM(E42:E68)    ・    ・ のようにしたいって事? Sub aaa() With ActiveSheet  For i = 1 To 10   .Cells(30 * i + 9, 5) = _     "=sum(" & .Range(.Cells(30 * i - 18, 5), _     .Cells(30 * i + 8, 5)).Address(0, 0) & ")"  Next i End With End Sub

関連するQ&A

  • 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計算をしたいのですが、その方法を教えて下さい。 よろしくお願い致します。

  • Excel VBAの SUM関数について質問です。

    Excel VBAの SUM関数について質問です。 SUM関数で合計の値を出す場合、 SUM(A1:A5)という関数で合計を出しますが SUM(sheet2.cells(1,1),sheet2.cells(5,1)) と言ったようにCellsで指定はできないのでしょうか? 複数の列にVBAのプログラムで合計の値を出したいのです。 WorksheetFunction.SumではSUM(A1:A5)のように 自動計算にならないと思うので・・・

  • エクセルVBA

    どうして SUM(A1:A5) Range("A1:A5") のように 関数の引数には" "がいらなくて Rangeの引数には" "がいるのでしょうか?

  • printfのように複数の引数をもつには?

    不特定多数の引数を持つ関数は作れますか? 例えば main(){ sum(1,2,3) //1+2+3で6になる sum(1,2,3,4,5) //1+2+3+4+5で15になる } このようにsum()の中の引数の数を自由に変えて処理する内容も変わる関数はできないでしょうか

  • VBA

    ACCESSのVBAにて、エクセルのデータ操作を行っています。 「sum」や「vlookup」などの関数が入ったセルをコピー&貼り付けしていく処理があります。 デバック―モードで実行するとエラーとなりませんが、 通常に実行するとエラーになってしまいます。 エラーの内容: アプリケーション定義またはオブジェクト定義のエラーです。 sleepを入れてみましたが、結果はかわらずでした。 どのような原因があるのでしょうか。

  • 関数をExcel VBAに書き換える

    仕事で以下の関数を使っていたのですが、VBAに書き換えたいのですが.... VBAで以下の関数をセルに入力する方法ですと不安定になってしまいます。(正確に答えが返ってこない)どなたか教えていただけますか? {=SUM(IF((販売一覧!$B$4:$B$500=A4)*(販売一覧!$F$4:$F$500='1211作成'!D4),販売一覧!$I$4:$I$500))}

  • C言語から質問です。

    C言語から質問です。 /* main関数の中で初期化した配列 data[10]={60,30,70,25,20,9,92,55,20,10}; を関数 keisan() に引数として渡して、関数keisan()内で 平均値、最大値,最小値 を求め、その結果をmain関数に戻し、main関数内で 平均値、最大値,最小値を表示させるプログラムを作成せよ。 int keisan(const int data[], int data_kosuu, double answer[]) { return 0; } とする。 (注) プロトタイプ宣言を用いよ。 ヒント:平均値,最大値,最小値の3つの値を main関数に戻すやり方として、配列answer[]を使うとよい。 data_kosuu は、配列の要素数を与えるものです。 ヒント: (int型の変数)/(int型の変数)=int型の値です。 int型同士の割り算の答えANSWERをdoubleにしたい場合は、  ANSWER=(double)(int型の変数)/(int型の変数);    と(double) キャストという操作をする必要がある */ #include <stdio.h> int keisan(const int data[], int data_kosuu, double answer[]); int main(void) { int i; int a[10]={60,30,70,25,20,9,92,55,20,10}; // この値を使ってください double ans[3]; keisan(a,10); /* keisan関数に配列と配列要素数を引数で与える */ for(i=0; i<10 ; i++) printf("a[%d]=%d\n",i,a[i]); printf("平均=%lf 最小値=%d 最大値=%d\n",ans[0],ans[1],ans[2]); return 0; } /* 合計・最大値・最小値を求める関数 */ int keisan(const int data[], int data_kosuu, double answer[]) { int i; int sum; int min,max; min=10; /* min の初期化 */ max=10; /* max の初期化 */ sum=0; /* 合計値の初期化 */ for (i=0; i<10 ; i++){ sum = sum+data[i]; if(data[i] > max) max=data[i]; if(data[i] < min) min=data[i]; } sum=sum/10; answer[0]=sum; answer[1]=min; answer[2]=max; } エラー error C2198: 'keisan' : 呼び出しに対する引数が少なすぎます。 とでて先に進めません。 教科書などを見ても間違いがわかりません; 虫食いになってるところを自分なりにやってみたため、 根本的に間違ってるかもしれませんが、 どうかアドバイスや指摘などをお願いします。

  • VBAの中でユーザー定義関数を使うときに

    VBAの中でユーザー定義関数を引数に変数を持たせて使いたいのですが、変数をうまく認識してくれません。 VBAの中でユーザー定義関数を使うにはどうしたらいいのでしょうか? よろしくお願いします。

  • このプログラムにアドバイスをください

    問題が  ・100個の要素を持った一次元配列をmain()関数内で宣言 ・一次元配列と要素数を引数として持つ関数seisei() ・関数seisei()は乱数を使い渡された配列を0~99の整数で初期化する。 ・一次元配列、要素数そして変数のポインタを引数としてもつ関数goukei() ・関数goukei()は渡された配列に格納された数値の合計を計算し、渡された変数のポインタにその合計値を代入する。 と問題があり、下記のようにプログラムを作ったんですが、どうしてもコンパイルできません。どなたかご指摘よろしくお願いします。 #include <stdio.h> #include <time.h> void seisei(int *,int); void goukei(int *, int, int*); int i, *sum; int main() { int a[100],sum; seisei(a,100); goukei(a,100,&sum); printf("sum:%d\n",&sum); return 0; } void seisei(int *a[i], int n) { srand(time(NULL)); for(i = 0; i <= n; i++){ *a[i] = rand() % 100; } } void goukei(int *a[i],int n,int *sum) { *sum = 0; for(i = 0; i <= n; i++){ *sum += *a[i]; } }

  • SystemC言語の文法(関数の引数にポインタ?)

    SystemC言語の文法について質問です。 ある雑誌で、ビット宣言変数のアドレスを関数に渡しており、 私も真似て作ってみたのですが、エラーが発生してしまいます。 --- (例) 引数にポインタを入れる処理 // 引数 sc_uint<32> *s の関数 void test::Calc_func( sc_uint<32> *s ) { cout << "s[0] = " << s[0]; // 32bitのデータ出力? } // これがmain文の代わりです void test::A_func(void) { sc_biguint<2048> a; sc_uint<12> i; for( i = 0; i < 2048; i++ ) { a[i] = 0; } Calc_func( &a[0] ); // ←問題! } // Error内容 Calc_funcの引数の入れ方が駄目! --- 色々、Calc_funcへの型を変えてやってみたのですが、 全くびくともしません。 雑誌が間違っている可能性は低いと思いまして、 今回、このような質問をさせていただきました。 インターネット上の情報でも、このような処理を 見つけることができませんでした。 どうぞよろしくお願いいたします。

専門家に質問してみよう