関数定義を利用するには?

解決


α  2001-07-11 16:29:10  No: 74649  IP: [192.*.*.*]

関数定義で計算をしたいのですが、
Def fn(F-Basic)でやろうしましたが、うまく動きませんでした。
VBの関数定義はどのようにすればよいのでしょうか。

編集 削除
こころ  URL  2001-07-11 20:04:11  No: 74650  IP: [192.*.*.*]

関数定義ってどんなものなんでしょう?

編集 削除
たかみちえ  URL  2001-07-11 21:06:45  No: 74651  IP: [192.*.*.*]

関数定義ってSubのこと?

とにかくVBの関数は、宣言のし方が変わってますから、(JavaScriptと比較したかぎりは)
メニューにプロジージャの宣言って言うのがあった(ユーザー設定で組替えようとするとあるのが分かる)ので、
それを使うと楽です。
あとは、GoSubでラベルに飛んで、returnで戻ることもできるそうです。ちょっと古いやり方らしいけど。

って、ちがうかなぁ…。って、ちがうよねぇ…。

編集 削除
Say  2001-07-11 22:47:30  No: 74652  IP: [192.*.*.*]

Cで言うところのマクロ関数みたいなものです。
(#define でつくるアレです)

それなりにお手軽なんですけど、VBではFunctionをつかいます。
たとえば、半径を入れたら円の面積を返す関数は、
Public Function fncdblEnMenseki(dblHankei As Double) As Double
    fncdblEnMenseki = dblHankei * dblHankei * 3.141592653
End Function

この関数を呼ぶときには、
dblMenseki = fncdblEnMenseki(1.5)
とか

If fncdblEnMenseki(dblData) > 12.56 Then 

とかします。
戻り値が不要なときは、
Call fncdblEnMenseki(1.732)
とかできます。意味ないけど

デフォルトで参照渡しになるVBでは、Sub使って
引数変数で答えをかえしてもいいのですが

編集 削除
α  2001-07-12 17:27:17  No: 74653  IP: [192.*.*.*]

ヘルプから引用させていただきました。

ユーザ定義関数を宣言します。

形式

DEF FN 関数名[(パラメータリスト)]=式

FN+"名前"が関数名となります。
(A+B)×C の計算を行うユーザ定義関数ABCは次のように定義します。

def fnABC(A, B, C) = (A+B)*C

定義したユーザ定義関数を使用して、(1+2)×3の結果を変数Yに代入するためには記述します。

Y = fnABC(1, 2, 3)

のような物ですが…

編集 削除
α  2001-07-12 17:28:09  No: 74654  IP: [192.*.*.*]

これはVBじゃなくて、F-BASICです。

編集 削除
こころ  URL  2001-07-12 19:28:18  No: 74655  IP: [192.*.*.*]

VBでやるなら、Sayさんの言われるように
ファンクション等で代用する方法になるでしょう。
マクロ展開はVBでは行えないので。

編集 削除
α  2001-07-13 15:27:32  No: 74656  IP: [192.*.*.*]

わかりました。
試してみます。
ありがとうございました。

編集 削除
α  2001-07-19 16:34:58  No: 74657  IP: [192.*.*.*]

Functionで関数を定義したのですが、
その関数を標準モジュールに入れて動かせるように
するにはどのようにすればいいのでしょうか。
(Publicにしても定義されない。)

編集 削除
Say  2001-07-19 23:22:34  No: 74658  IP: [192.*.*.*]

Cだと
int fncAdd(int a,int b){
    return a + b ;
}
のように戻り値をreturnのうしろにかきますが、VBだと、
Public Function fncAdd(a As Long , B As Long) As Long
    fncAdd = a + b
End Function
のように、「関数名 = 戻り値」の形でかえします。
同一プロジェクトの別モジュールから参照するなら、
Publicにする必要がありますが、たとえば
Formモジュールに置いて、同一モジュール内でしか
利用しないのならPrivateがいいでしょう。
その場合、呼ばれる関数が上にあるほうが
実行速度が向上するはずです。たぶん。

編集 削除
α  2001-07-20 20:07:10  No: 74659  IP: [192.*.*.*]

解決しました。有り難う御座います。

編集 削除