エクセルVBAでFunction構文に変数を設定する方法

このQ&Aのポイント
  • エクセルVBAにおいて、Function構文内に変数を設定する方法を教えてください。
  • Function構文内で、変数aとbを扱いたい場合はどのようにすればよいでしょうか。
  • 他の変数以外にも、変数aとbを使用する場合には追加のFunction構文が必要なのでしょうか。
回答を見る
  • ベストアンサー

Function 構文のなかに変数をいれたい(VBA)

お願いします。 エクセルVBAにて 下記のようなFunction構文内に変数を設定する方法を 教えてください。 この中で k以外にも a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27") この変数を扱いたいのですが。 もしかして他にもfunction構文が必要でしょうか。 Function data(k As Double) Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim a As Double Dim b As Double a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27")  以下 略

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。 それは、3つの引数を渡すようにFunctionの定義を修正したのに、セルの数式では =data(A1) のように1つしか指定していないからだと思います。 =data(A1,E27,E27) のようにするとエラーにならないかと思います。

catshoes01
質問者

お礼

ありがとうございました。 =data(A1,a,b) としたら動作しました。

その他の回答 (1)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

質問の意図がよくわからないですが、引数を複数設定したいということですか? それなら、 Function data(k As Double,a As Double, b As Double) とすればいいです。 もし外してたらすみません。

catshoes01
質問者

補足

ありがとうございます。そのように設定したところ コンパイルエラー 引数は省略できません。と表示されます。 エラーの場所は data(k)が記述されているところです。 尚、現状(コード未修正)でaを変数ではなく、a=4,b=5のように設定すると動くのです。 どのようにすればよいのでしょうか。

関連するQ&A

  • Excel2003 VBAの計算方法

    初歩的な質問で申し訳ありません VBAで計算をするときにセルどうしで計算をしてもいいのでしょうか いちいち変数に変換するのは面倒なので下記のようのしたいのですが たとえば sheets("sheets1").range("b1") = 2 sheets("sheets1").range("c1") = 3 sheets("sheets1").range("a1") =sheets("sheets1").range("b1") + sheets("sheets1").range("c1") or sheets("sheets1").range("a1") = Application.Sum(Range("b1:c1")) やはり Dim a As Integer,b As Integer,c As Integer b = Sheets("Sheets1").Range("b1") c = Sheets("sheets1").Range("c1") a = b + c Sheets("Sheets1").Range("a1").Value = a よろしくお願いします

  • エクセルVBAで範囲を変数で設定する方法?

    Dim i As Integer For i = 1 to 50 とした場合、 セルであれば Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(i, 2) のように変数を使えますが、範囲に使う場合にはどう書けばいいのでしょうか? 例えば、 Sheets("Sheet2").Range("A1:G1").Value = Sheets("Sheet1").Range("A1:G1") のような式で、行数を変数にする場合です。 よろしくお願いします。

  • Excel 2010 VBAで教えてください。

    Excel 2010 VBAで教えてください。 Doubleの配列 Dim A(100) as double に ワークシート "Sheet1" セル A1:A100 の値を一発(For loop等を利用しない) で読み込むにはどうすればよいのでしょうか。 同じく、 Doubleの配列 A(100)を ワークシート "Sheet2" セル B1:B100 に一発で書き出すのはどうすればよいのでしょうか。  Variantにて Dim A as Variant では  A = Sheets("Sheet1").Range("A1:A100") で 読み込めました。 また Sheets("Sheet2").Range("B1:B100")で書き込みできましたが、double等でどうすれば良いのか知りたいです。

  • VBA 変数

    毎度お世話になります。 先日も同じような質問をさせていただいたのですが、 パターンが替わると手も足も出ません。 Dim myweek As Integer myweek = Worksheets(Sheets.Count).Range("A1").Value Worksheets(Array("○○第" + myweek + "週", " ◇◇第+ myweek + "週")).Select  という具合にシート名の週の数字だけを変数にしようとしていますが、うまくいきません。 指摘と修正お願いします。 補足Range("A1")には数字が入っています。   ○○、◇◇は固有名詞です。

  • VBAでのシート選択について

    いつもお世話になります。 VBA初心者で、基本的な質問をしているかもしれませんが、 どうかお付き合いください;; たとえば、以下のようなコードがあったとします。 例) Function Sample() dim x As Integer dim y As Integer x=10 y=100 If x > sheets("シート2").Range("A1") AND y < sheets("シート2").Range("A1") Then 処理 End If End Function 例えば上記のコードのようなものがあったとして、 シート名を省いて文字数を減らす方法はあるでしょうか? 1つのFunction内では「このシート」しか参照しないというような指定が出来ると、 If x > Range("A1") AND y < Range("A1") Then というように簡単にできますよね? 他のFunctionでは、シートの指定はさせたくないので、 End Functionの手前で、「シート指定終了」というのを 記述できればベストなのですが…。 どうかよろしくお願いいたします。

  • VB functionについて

    プログラム初心者です。 以下のソースをVB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できません。となります。呼び出し方法がおかしいと思うのですが。よく分かりません。解決方法を教えてくださいお願い致します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim aArr() As Double aArr(1) = 1.1 aArr(2) = 2.3 MsgBox(AAA(aArr)) End Sub Public Function AAA(ByVal aArr As ArrayList) As Double() Dim retVal As Double() = Nothing ReDim retVal(2) Dim loopCnt As Integer = 0 Dim Arrcnt As Integer = aArr.Count Dim sum As Double = 0.0 For loopCnt = 0 To Arrcnt - 1 sum += aArr(loopCnt) Next sum = sum / loopCnt retVal(0) = sum Return retVal End Function

  • エクセルVBAで、Dim A As StringとA$

    変数を使用するにあたり、 Dim A As String A=Sheets("Sheet1").range("A1").Value MsgBox A という記述方と、 A$=Sheets("Sheet1").range("A1").Value MsgBox A$ という記述は同じ意味だと思うのですが、何か違いがあるのでしょうか? Stringなら「$」、Integerなら「%」で、いちいちDimで整数か文字列かを指定しなくていいだけ簡単だと思うのですが、わざわざDimを使う意味は何なのでしょうか?

  • VBAエラー '1004' について

    VBA初心者です。 下のプログラムの★部分で 「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」 というエラーが発生します。 どなたか原因を教えていただけないでしょうか?? Dim aRange As Range Dim bRange As Range Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) ★ Set bRange = Range(Sheets("シートB").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) 下のシートBの範囲取得と同じことをしているつもりなのですが、うまくいきません。 どうぞよろしくお願い致します。

  • VBA スクロールのコードの中に変数を入れることは

    Dim i as integer  i=A1 Sheets(2).ScrollArea = "Ai: Ni+100" 仮にこのようなコードを書いたとして、 実行したのですが、""の中は変数が効かないようなのですが、 これを行う方法はあるのでしょうか。 VBA初心者なのですが、 どなたかお答えいただけますでしょうか。 よろしくお願い致します。

  • 配列を利用したコードにしてください

    下記コードですが 計算速度が遅いので配列を利用した コードに修正してください。お願いいたします。 Dim mx As long Dim Rp As Double Dim yy1 As Double Dim pai As Double Dim Ba AS long Dim i As long, j as long Dim K As Doubke Dim xx1 As Double, yy1 As Double Dim x0 As Double,y0 As Double Dim x1 As Double, y1 As Double mx = Sheets("nn").Range("B65536").End(xlUp).Row Rp1= Sheets("pp").Range("B65536").End(xlUp).Row yy1= Sheets("pp").Range("A25") With Sheets("zzz") pai=Atn(1) * 4 Ba=Sheets("sheet1").Range("A1")  For I = 1 To Ba K = -Sheets("sheet1").Range("B" & I + 3).Value * pai/180 xx1 = Sheets("sheet1").Range("C" & I + 3).Value   yy1 = Sheets("sheet1").Range("D" & I + 3).Value  For j = 1 To mx - 1 x0 = .Cells(2 + j, 2) y0 = .Cells(2 + j, 3) X1 = x0 * Cos(K) + y0 * Sin(K) Y1 = -x0 * Sin(K) + y0 * Cos(K) .Cells(2 + j, 2 * I + 2) = X1 + xx1 - Rp1 .Cells(2 + j, 2 * I + 3) = Y1 + yy1  Next j  Next I End with

専門家に質問してみよう