• ベストアンサー

エクセル VBA セル範囲を指定

functionプロシージャを作ろうとしてます。いわゆるユーザ定義関数です。 エクセルの関数でSUMが用意されており、SUM(セル範囲)のように書けば合計を返します。 同じようにセル範囲の指定を受けて計算結果を返すfunctionを作りたいのです。 function example(セル範囲 As double,・・・) As double 任意の範囲を指定して、その値を使って計算したいのです。 ・セル範囲の書き方というか、フォーマットの書き方 ・プロシージャ内で計算に使うために配列に読み込む方法

noname#154650
noname#154650

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

Function example(R As Range) As Double Dim S As Double Dim A As Variant A = R For i = 1 To UBound(A, 1) For j = 1 To UBound(A, 2) S = S + A(i, j) Next Next example = S End Function セルでの使い方は、 =sample(A1:B5)

noname#154650
質問者

お礼

ありがとうございます。 変数の型宣言にRangeなんてあったのですね。今使ってるテキストには何故か無いようです。

その他の回答 (1)

回答No.2

補足させてもらいます。 Range型というのはオブジェクト型です。 DoubleやSingle、Stringなどといった基本的な変数型とはことなります。 色々なオブジェクト型変数がありますので一度調べてみると色々と応用が利きますよ。

noname#154650
質問者

お礼

ありがとうございます。 まだ詳しく知らないので、追々勉強したいと思います。

関連するQ&A

  • Lotus123 2000のSUM関数の範囲指定

    こんにちは。とても初歩的な事なのですが、Lotus123 2000のSUM関数の範囲指定の手順で、複数の任意のセルを指定する方法がわかりません。たとえばエクセルの場合、SUM関数を指定した後に、Ctrlを押しながら複数の任意のセルを指定出来るのですが、Lotus~では複数選択が同方法で出来ません。どうか宜しくお願いします。

  • 【エクセルVBA】Functionの引数として、配列は使えるのでしょうか?

    VBA初心者です。 Function で関数を定義するとき、その引数に配列を使う方法はあるのでしょうか? たとえば Function Test (C as double,n as integer) というFunctionの C に3×3の行列を入れたいのですが…。

  • エクセル関数式で範囲指定をまとめて変化させる方法。

     初めまして、よろしくお願いします。  式は違いますが、範囲は同じ関数式がかなりあるのですが、すべて範囲を手入力することはかなり骨が折れます。そこで指定セルに範囲の数字を入力すれば範囲が変化するような関数式の書き方がありましたら、よろしくお願いします。 例) =COUNT(H1:H15) =SUM(H1:H15)    :    :    ;  というモノをA1に1、もしくはH1、B1に1もしくはH15と入力すれば、シート内の任意の関数式総て(H1:H15)で範囲指定され、計算されるようにできると言う関数式の書き方です。

  • VBA)範囲指定した全セルに関数を入れたいのですが。。。

    当方、始めてのマクロ作成に奮闘中の身です。 ご教授いただきたく、質問させていただきます。 ◎質問 範囲指定した全セルに関数を入力したいのですが、アクティブセルのみにしか関数が入らず困っています。    Dim abc As Integer       abc = Sheets("シート名").Range("A1").CurrentRegion.Rows.Count    Range(Cells(2, 12), Cells(abc, 12)).Select    ActiveCell.FormulaR1C1 = "=COUNTIF(R1C1:RC[-11],RC[-11])" 一番下の部分の関数を入力したいのですが、アクティブセルのみの入力になってしまい、下から2番目の指定範囲には反映されません。 下から2番目の指定範囲セル全てに適用するにはどうしたら良いでしょうか。 よろしくお願いいたします。

  • Excelのセル範囲コピー

    ExcelVBAでセル範囲を指定して別のセル範囲にコピーします。 このとき、コピー元が空白のセルはコピーしない、あるいはコピー先のセルに関数が定義されていればコピーしないようにする方法はあるでしょうか。 もちろん、1セルごと処理すればできますが、スピードアップの為、範囲指定してまとめてやりたいのです。 バージョンは2003以降です。

  • VBA上で定義された関数のワークシート上での実行

    Ecxel2003 のマクロ上で、複素数の構造体を以下のように定義しました。 Public Type Complex R As Double I As Double End Type 2つの実数(引数)を複素数に変換する関数を、以下のように定義しました。 Public Function setComplex(x As Double, y As Double) As Complex setComplex.R = x setComplex.I = y End Function 複素数の絶対値を計算する関数を以下のように定義しました。 Public Function absComplex(A As Complex) As Double absComplex = Sqr(A.R * A.R + A.I * A.I) End Function これらの定義式を用いて、ワークシート上の数値を参照して 計算しようとしても、なぜかうまくいくません。 うまくいかない例 → =absComplex(setComplex(B6,C6)) (セル"B6"には 2 、セル"C6"には 3 が格納済み) マクロ上で計算する場合はうまくいきます。 Public Function test() As Double Dim varC1 As Complex varC1 = setComplex(2, 3) test = absComplex(varC1) End Function 適当なセル上で、=test() と打ち込むと、√13に相当する少数が表示されます。 なぜ、=absComplex(setComplex(B6,C6)) では計算してくれないのでしょうか?。 そもそも、マクロ上で定義した構造体を、セル上で用いようとするのがいけないのでしょうか? どなたか、ご教授願います。

  • vba 自作関数

    Function zei(myRng As Range) As Double Dim c As Range Dim goukei As Double 'Volatileについて 'シート内のどこかのセルを参照しているものとする 'シートのどこかに変更があったらそのセルが自動的に再計算される Application.Volatile goukei = Application.WorksheetFunction.Sum(myRng) zei = Int(goukei * 5 / 100) End Function これを標準モジュールに貼り付けてワークシート上で関数を呼び出し、 100を入れると#VALUE!が返るのですがどうしてでしょうか? 違う値を入れても必ず#VALUE!が返ります。

  • セル範囲を返す関数

    次のようにしますと「型が一致してません」エラーになってしまいます。 どうしたらセル範囲を返す関数が作れますか? Public Function inuinu() As Range Set inuinu = Range(Cells(1, 1), Cells(3, 3)) 'Debug.Print inuinu.Count End Function 返値にAreasの指定もしてみましたが巧くいきませんでした。

  • VBAのオブジェクトブラウザの見方

    VBAのオブジェクトブラウザの見方がよくわからないので教えてください。 たとえば、オブジェクトブラウザから「countif」を見ているのですが、   Function CountIf(Arg1 As Range, Arg2) As Double の部分の見方がよくわかりません。 (1)先頭の「Function」は、ワークシート関数だからFunctionと付いているのでしょうか? (2)「Arg1 As Range, Arg2」となっていますが、なぜ、Arg2の後に「As Range」がつかないのでしょうか? セルの範囲ではなく、VBAで指定できるからですか? (3)「 As Double」は何を指しているのでしょうか? 戻り値ですか? 数値で返ってくるからDoubleなのですか? 以上です。よろしくお願い致します。

  • 関数内のセルの範囲を他のセルから取得する方法

    教えてください。 関数内のセル名を他のセルから取得することはできるのでしょうか? 例えば、B列の合計を求めるSUM関数であれば A1セルに関数を記述 =SUM($B$x:$B$y) A2セルに範囲(上記式のx)を指定  1 A3セルに範囲(上記式のy)を指定  10 これにより、B列のB1~B10の合計を求める。 といった感じです。 ※実際に使用したい関数は、SUMではありません。 よろしくお願いします。

専門家に質問してみよう