• ベストアンサー

引数をとるプロシージャの記述方法

Functionプロシージャへ文字型と数値型の両方の引数の指定したいのですが記述方法が解りません。 文字型のAとBと数値型のCを引数に渡したいのですが、文字だけの場合は Public Function Calc_1(A,B As String) As String でいいと思いますが、これに数値型のCを追加したいのですがどのように記述したらいいのか教えていただけないでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Public Function Calc_1(A,B As String, C as Integer) as String あるいは、Cの数値の大きさによっては、 Public Function Calc_1(A,B As String, C as Long) as String でも。 Long、Integerの違いについてはヘルプで確認してみてください。 なお、以下のように省略せずに書くのが間違いをなくす方法だと思いますが。 Public Function Calc_1(A As String, B As String, C as Long) as String

nodapapa
質問者

お礼

お礼が遅くなり申し訳ありません。 おかけさまで解決しました。ありがとうございました。 Public Function Calc_1(A,B As String, C as Integer) as String のようにプロシージャ名の後ろの( )の中に記述すればよかったのですね! 惑わされたのが( )の後の as String の記述です。( )の中のデータ型指定と( )の後の as String とは関係無かったのですね。 この問題はおかけさまで解決したのですが、新たに引数の戻り値の指定方法について解らない ところが出てきたので、今日、相談箱へ質問させていただこうと思っています。 恐縮ですが回答を頂けたら助かります。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

既に的確な回答がされていますが > Public Function Calc_1(A,B As String) As String の場合引数Aはstring型ではなくVariant型となります。注意してください。

nodapapa
質問者

お礼

お礼が遅くなり申し訳ありません。 おかけさまで解決しました。ありがとうございました。 プロシージャ名の後ろの( )の中に記述すればよかったのですね! 惑わされたのが( )の後の as String の記述です。( )の中のデータ型指定と( )の後の as String とは関係無かったのですね。 この問題はおかけさまで解決したのですが、新たに引数の戻り値の指定方法について解らない ところが出てきたので、今日、相談箱へ質問させていただこうと思っています。 恐縮ですが回答を頂けたら助かります。

関連するQ&A

  • ACCESS 引数をとるプロシージャの記述方法

    計算した結果を返すFancionプロシージャを作成したいのですが、幾つかの参考書を見ても戻り値が一つの説明しかありません。戻り値が二つほしいのですが無理なんでしょうか? 文字データAと数値データBを引数で取得し、それぞれの処理結果(A-DT及びB-DT)を返したいのですが、Calc_1には一つの処理結果しか指定できないと思いますが、戻り値を二つ返す記述方法を教えて頂けないでしょうか。よろしくお願いいたします。 Public Function Calc_1(A AS String,B AS Integer) AS String   ※Aを元に文字編集を行い編集結果をA-DTへ登録   ※Bを元に計算処理を行い処理結果をB-DTへ登録 End Function

  • 引数付のFuncitonプロシージャと引数付のSUBプロシージャの違い

    親プロシージャに数値を渡すときに、引数付のFuncitonプロシージャと引数付のSUBプロシージャは、結果を見ると同じ動きをするように思います。 このような場合、両者には、どのような違いがあるのでしょうか? Sub 親プロシージャ() Cells(1,MyNOend)=123 end Sub ・子プロシージャ Function FMyRowCnt(MyNOend As Integer) MyNOend = TMYKanriBkWs1.Range("D1").CurrentRegion.Rows.Count End Function Sub FMyRowCnt(MyNOend As Integer) MyNOend = TMYKanriBkWs1.Range("D1").CurrentRegion.Rows.Count End Sub 以上 よろしくお願い致します。

  • OnTime 使用時のプロシージャへの引数の与え方、その記述方法を教えて下さい。

    初心者ですが、宜しくお願いします。 Application.OnTime EarliestTime:=TimeValue(time_ptn), Procedure:="my_func" 上記コードの、末尾のプロシージャの指定において、 Dim prm1 As String, prm2 As Long Function my_func(prm1,prm2)    ~内容~ End Function または、 Sub my_func(prm1,prm2)    ~内容~ End Sub というプロシージャを指定したいのですが、 末尾の書き方が分からず困っております。 「Procedure:="my_func(prm1,prm2)"」 「Procedure:= my_func(prm1,prm2)」 のようにやっても、うまくいきません。 正しい書き方をどなたか教えて下さい。

  • 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()で、型が一致しません といわれてしまいます。 どのように書き直せばいいのでしょうか。 よろしくお願いします。

  • Excel VBA onTime関数のプロシージャ引数に、引数(変数)つきのプロシージャを呼び出す方法を教えてください。

    現在ExcelVBAで一定時間ごとにメッセージを出すツールを作成しています。 その際にonTime関数を使っていますが、その引数のひとつである呼び出すプロシージャに「引数(変数)つきのプロシージャ」を設定しようとしています。 サイトを探してみたところ、引数にシングルクオーテーションで囲むなど書いてあったのですが、変数を引数としたプロシージャを設定すると、「プロシージャが見つかりません」のエラーがでます。 どなたかお力を貸してくれませんでしょうか。 ちなみに僕のコードは以下の通りです。(簡略化) ------フォーム Private Sub cmbOk_Click() Call メッセージ実行(txtTime.Text, txtContent.Text) End Sub ------ThisWorkbook Private Sub メッセージ実行(ByVal time As String, ByVal content As String) Dim starttime As Double MsgBox time & "毎に" & vbCr & content & vbCr & "を表示します。", vbInformation Unload frmSet starttime = Now + CDbl(TimeValue(time)) Application.OnTime starttime, "'expressContent" & time & content & "'" End Sub ------標準モジュール Dim starttime2 As Double Sub expressContent(ByVal time2 As String, ByVal content2 As String) MsgBox "content2", vbInformation starttime2 = Now + CDbl(TimeValue(time2)) Application.OnTime starttime2, "'expressContent" & time & content & "'" End Sub よろしくお願い致します。

  • エクセルVBA イベントプロシージャに引数を渡せま

    お世話になります。 エクセル2003/XP 使用です。 イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか? 下記のコード中の変数mysheetnameを ユーザーフォーム、→ CommandButton1のプロシージャに 引数として渡して行きたいのですが、 実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、 コンパイルエラー:  プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。 とエラー表示されます。 イベントプロシージャに引数を渡すことはできますでしょうか? ---------- ThisWorkBook内 ---------- Public mysheetname As String Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) mysheetname = ActiveSheet.Name UserForm1.Show (mysheetname)     '←変数mysheetnameの値をユーザーフォームに渡したい。 End Sub ---------- ユーザーフォーム ---------- Private Sub UserForm_Initialize(ByVal mysheetname As String ) 処理 End Sub Private Sub CommandButton1_Click(ByVal mysheetname As String ) 処理 End Sub ’--------- ここまで 引数について少し理解し始めたばかりの者です。 よろしくお願いします。

  • Excel VBA ParamArray 可変個引数の渡し方

    Excel VBAで 可変個引数関数Fanc1から、その引数を 可変個引数関数Fanc2に渡したい。 下記例では、A1=a, B1=b, C1=cのとき、#VALUE!となります。  Concatenate2(A1:B1,C1,"po")="abcpo" 問題無し  Fanc1(A1:B1,C1,"po")=#VALUE! Fanc1でも上と同じ出力にしたいのです。 Function Concatenate2(ParamArray MyArray()) As String Dim S As String Dim v As Variant Dim c As Variant For Each v In MyArray If TypeName(v) = "Range" Then For Each c In v S = S & c.Value Next Else S = S & v End If Next Concatenate2 = S End Function Function Fanc1(ParamArray MyArray()) As String Fanc1 = Concatenate2(MyArray()) 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プロシージャの便利さを教えてください。

  • VB.NETの関数プロシージャの書き方を教えてください。

    Public A As String という変数にある文字列データが入っていて、 ボタンを押すとその時に変数X,Y,Zに入っている 文字列を検索してButton1_Clickプロシージャ内に戻って来て KekkaX,KekkaY,KekkaZに数値が入るような関数プロシージャなのですが、 呼び出す部分の書き方と関数のプロシージャ名の書き方を教えて頂きたいです。 検索する部分は自分で出来ると思うので大丈夫です。 Public A As String = "何かの文字列" Button1_Click Dim X,Y,Z As String Dim KekkaX,KekkaY,KekkaZ as Integer '変数Aの中からX,Y,Zを検索したい X="*****" Y="ABCDE" Z="#####" GetKensakuKekka(????????) ←この部分の書き方を教えて下さい。 'KekkaX,KekkaY,KekkaZ 内に検索結果を取得したい Console.WriteLine(KekkaX) Console.WriteLine(KekkaY) Console.WriteLine(KekkaZ) End Sub Function GetKensakuKekka (???????????) ←この部分の書き方を教えて下さい。 ・ ・ ・ End Function よろしくお願い致します。

  • サブルーチンに引数を2つ以上渡したい

    Access2002、vba上で サブルーチンに引数を2つ指定したいのですが、 なぜか「コンパイルエラー 修正候補=」 と出てしまいます。 引数を1つにするとうまく動作します。 どなたかお分かりの方いらっしゃいましたら教えて ください。 宜しくお願いします。 サンプルコード: -------------------------------- the_subroutine(a, b) ' ※ここでコンパイルエラー Sub the_subroutine(c As String, d As Object) End Sub -------------------------------