• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA Functionについて)

VBA Functionについて

このQ&Aのポイント
  • VBAのFunctionについて質問があります。サンプルコードを見てもよくわからないので教えてください。
  • サンプルコードのkakaku関数について疑問があります。cost / (1 + rate)という計算式の意味を教えてください。
  • costとrateという変数には何の意味があるのでしょうか?具体的な使い方や役割を教えてください。

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

  • ベストアンサー
回答No.3

私が回答するまでも無く、No1さんが語っていますね。 たぶん「VBA Functionについて 」なんて言う、お題があるので、VB系の関数について、理解する前に質問してしまっているのでしょう。 参考書を読んでいますか? もし、No1さんのような事柄が書かれていない、参考書なら、とっととゴミ箱に捨ててしまってください。どこかの入門サイトなら、そこは、あなたには向きません。別サイトにしましょう。 学校なら、先生に聞くべきことです。宿題なら、自分で解決してください。聞いて提出するなら、あなたの将来は絶望的ですね。お先真っ暗。 No1さん記載の事柄は、ほんの基本的なことなので、いわゆる さる本 を買えば、第一章の書式や、関数の作成の仕方に説明があるはずです。No1さんに付け足すとしたら、 ユーザー定義関数名= kakaku ですね。その名前に cost / (1 + rate) を代入しています。kakaku関数の戻り値は、その計算式の結果が返る事になる。 関数は、 引数  (入力)   戻り値 (出力) を任意に設定でき、それは無しでもいいし、データ型を決めて設定してもいい。その書式をまず学んでください。

lokijuh
質問者

お礼

参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • bajutsu
  • ベストアンサー率20% (139/693)
回答No.2

M0108をステップ実行してみれば一目瞭然だと思いますが…。

lokijuh
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • szk9998
  • ベストアンサー率45% (1024/2233)
回答No.1

>costもrateも値が代入されていませんが いや、しっかり引数としてkakaku関数に渡しているじゃないですか・・・・ Public Function kakaku(cost As Currency, rate As Double) As Currency ここでcostもrateも出てきてますよね。 kakaku(Zeikomi, Zeiritu) で cost=Zeikomi rate=Zeiritu として代入してますよね・・・ 基本的なことですけど、わかりますか?

lokijuh
質問者

お礼

参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでFunctionの使い方

    エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

  • InputBox  String型・Variant

    VBAです。 InputBox  String型・Variant型がエラーにならない理由がわかりません。 Sub 日付型() Dim 日 As Date 日 = InputBox("値をいれてください") End Sub Sub 数値型() Dim i As Long i = InputBox("値をいれてください") End Sub Sub 通貨型() Dim 円 As Currency 円 = InputBox("値をいれてください") End Sub Sub String型() Dim a As String a = InputBox("値をいれてください") End Sub Sub Variant型() Dim v As Variant v = InputBox("値をいれてください") End Sub String型・Variant型以外は、 「実行時エラー '13'; 型が一致しません。」になります。 String型・Variant型はならない理由を教えてください。ご回答よろしくお願いします。

  • 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

  • Functionの使い方が分かりません。

    ACCESS 2013環境でVBAを使用しています。 プログラムが長い上、使用する箇所が多くて困っています。 Functionで、使いたい時だけ呼び出したいのですが うまく行きません。 二つのテキストボックスに入力された、文字を組み合わせて 文字列を生成するプロシージャを作成しています。  txt1の値が、岡山  txt2の値が、オカヤマ の時 先頭の文字列が ア行、続きは _岡山 となるよう AscW関数で文字コードで一度抽出し, select文で判別しています。 コードは --------------------------------------------- Private Sub コマンド1_Click() Dim kanji As String Dim katakana As Integer Dim sento As String Dim hensuu As String kanji = Me.txt1 katakana = AscW(Left(Me.txt2,1)) Select Case katakana Case 12450 To 12458 sento = "ア行" Case 12459 To 12468 sento = "カ行" ~(中略)~    Case Else End Select hensuu = sento & "_" & kanji MsgBox hensuu End Sub --------------------------------------------- となっています。 Select Case文が長いのと、複数のフォーム上で実行させるボタンごとに 同じコードを記述していて、最近Accessの起動が遅くなってきました。 Select文をFunctionから呼び出し、最終的にはモジュールから呼び出しに 書き換えたいのですが、書き方が良く分かりません。 試したコード --------------------------------------------- Function moji(ByRef katakana As Integer,sento As String) Select Case katakana Case 12450 To 12458 sento = "ア行" Case 12459 To 12468 sento = "カ行" ~(中略)~    Case Else End Select End Function Private Sub コマンド1_Click() Dim kanji As String Dim katakana As Integer Dim sento As String Dim hensuu As String kanji = Me.txt1 katakana = AscW(Left(Me.txt2,1)) sento = moji(katakana) hensuu = sento & "_" & kanji MsgBox hensuu End Sub --------------------------------------------- 多分、大きく間違っているのではないかと思うのですが どのように修正したらよいでしょうか

  • 【VBA】Function内のValueについて

    VBAについて教えてください。 以下のFunctionで定義したCells(i, "○").Valueに値が入力されません。 iのカウントアップまでは正常に行われています。 このFunctionはExcel上で関数で「=Order_Buy(1111,テスト)」のようにして呼び出しています。 ちなみにSubで定義して単体で実行すると該当セルに値が入力されました。 何が問題か、ご教授いただけないでしょうか Public Function Order_Buy(ByVal code As String, ByVal meigara As String) As String Dim i As Integer i = 3 Do Until Cells(i, "M") = "" i = i + 1 Loop Cells(i, "M").Value = Now Cells(i, "N").Value = code Cells(i, "O").Value = meigara Order_Buy = "test" End Function

  • VBのfunctionの引数について

    2の Double型と 3の Single型のように送る側と受け取る側の変数の型が 違ってもよいのでしょうか?プログラムはそのまま実行できたのですが・・・・。 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim koku As Integer Dim san As Integer Dim rika As Integer Dim ave As Double------------------------------------1 koku = Val(TextBox1.Text) san = Val(TextBox2.Text) rika = Val(TextBox3.Text) ave = (koku + san + rika) / 3 Label5.Text = Round(ave)-------------------------------2 End Sub Private Function Round(ByVal sngvalue As Single-----3) As Integer Dim intvalue As Integer intvalue = Int(sngvalue + 0.5) Return intvalue End Function End Class

  • VBAについて質問させて下さい。

    VBAについて質問させて下さい。 Sub Exsample() Dim a As String a = "aaa" MsgBox Ketugou(a) End Sub Function Ketugou(x As String) Ketugou = x End Function このサンプルコードについて質問が2つあります。 【質問1】 なぜ x=a、 と言う式はないのに xにが代入されるのでしょうか? 【質問2】 なぜ MsgBox Ketugou(a) では aaa(aaa) とならないのでしょうか? a = "aaa" Ketugou= "aaa" になってるはずですが。 よろしくお願い致します。

  • VBAの関数で引数渡しでエラー

    関数呼び出しでObject型を渡したいのですが「引数の型が一致していません」との エラーになってしまいます。 以下のプログラムをどのように修正すればよいのでしょうか? Sub Test() Dim obj As Object Set obj = CreateObject("Scripting.Dictionary")     :   Sample(obj) End Sub Function Sample(obj As Object) End Function

  • Functionプロシージャの便利さがわかりません

    私はVBAコードを作る時は、もっぱらsubプロシージャーを使ってしまうのですが、 http://excelvba.pc-users.net/fol5/5_4.html を参考に、 Functionプロシージャとsubプロシージャの違いを確認してみたのですが、 Functionプロシージャの便利さがわかりません。 *********************************** Sub Test() SubプロシージャとFunctionプロシージャのテスト i = 1 Call Subプロシージャ(i) i = Functionプロシージャ(i) MsgBox "Functionプロシージャ結果:" + CStr(i) End Sub Sub Subプロシージャ(ByVal i As Integer) MsgBox "Subプロシージャ結果:" + CStr(i) End Sub Function Functionプロシージャ(ByVal i As Integer) As Integer i = i + 1 Functionプロシージャ = i End Function *********************************** Functionプロシージャは、 (ByVal i As Integer) As Integer のように、、二回もデータ型(Integer)の指定をしなくてはいけないのでしょうか? リンク先の説明には、 「SubプロシージャとFunctionプロシージャの違いは Subプロシージャが引数を受け取るのみに対して Functionプロシージャは引数を受け取り、 戻り値を返すという関数としての役割を果たすことができる点です。」 と記載されてますが、 それはSubプロシージャでも出来てますよね? サンプルコードにおいてのFunctionプロシージャの便利さを教えてください。

  • VBA Functionプロシージャで複数の値を

    エクセルでVBAのFunctionプロシージャについて複数の値を戻り値として 受け取る方法を考えています。 下記のようなサンプルプログラムを作りました。 --------------------------------------------------------------------------------- Option Explicit Private Sub CommandButton1_Click() Dim kekka(3) As Double Dim txt As String txt = "12.12A,34.34B,56.56C,78.78D" kekka(0) = test(txt) End Sub Public Function test(ByVal text As String) As Double Dim txt_kakou(3) As String '## 渡された「txt = "12.12A,34.34B,56.56C,78.78D"」を加工し、数値のみを取り出し '## 下記のように配列txt_kakou(3)に振り分ける '## 加工方法は割愛 txt_kakou(0) = 12.12 txt_kakou(1) = 34.34 txt_kakou(2) = 56.56 txt_kakou(3) = 78.78 'string型からdouble型に変換する。 txt_kakou(0) = CDbl(txt_kakou(0)) txt_kakou(1) = CDbl(txt_kakou(1)) txt_kakou(2) = CDbl(txt_kakou(2)) txt_kakou(3) = CDbl(txt_kakou(3)) test = txt_kakou() End Function ----------------------------------------------------------------------------------- まず、呼び出し側のプロシージャでkekka(3)という配列を宣言します。 次に変数txtに「"12.12A,34.34B,56.56C,78.78D"」の文字列を代入します。 そして変数txtをFunctionプロシージャに投げます。 Functionプロシージャでは、受け取った「"12.12A,34.34B,56.56C,78.78D"」 を数値のみに分解し、4つの変数に代入します。 この4つの変数も配列で用意し、txt_kakou(3)とします。 このtxt_kakou(3)を呼び出し元に返し、呼び出しもとの変数kekka(3)に入れたいのです。 また、はじめ変数txtに代入される値は文字列ですが、この文字列をFunctionプロシージャで分解し、 分解した値は、最終的には数値として扱いたいので、途中でdouble型に変換しています。 これを実行すると、Functionプロシージャの最後のtest = txt_kakou()で、型が一致しません といわれてしまいます。 どのように書き直せばいいのでしょうか。 よろしくお願いします。