FUNCTION-FEND

戻り値のある関数を定義します。戻り値のない関数を定義するにはPROCEDURE-FENDを利用します。

構文
FUNCTION 関数名( 引数, Var 引数, 引数[ ], Var 引数[ ][ ], 引数 = 定数, … )
処理
RESULT = 戻値
FEND
引数
引数
値渡し
Var 引数
参照元の値が変更されます。参照引数
引数[ ]
配列
Var 引数[ ][ ]
二次元配列。参照引数
引数 = 定数
関数の呼び出し時に省略された場合に使用されるデフォルト値(デフォルト引数)。
戻り値

戻り値のあるなしを除いて基本的には同じなので、関数を定義する詳細はPROCEDURE-FENDをご覧ください。

戻り値

値を返す

「変数 = 関数名()」と記述することで戻り値(RESULTで指定した値)を受け取ることができます。

以下は変数sumに11が代入されます。

DIM sum = add(5, 6)

FUNCTION add(x, y)
	RESULT = x + y
FEND

一次元配列を返す

複数の値を返したい場合は関数内で配列を宣言・代入し、RESULTにSLICE(配列)と指定します。

DIM array[] = func()

FOR item IN array
	PRINT item
NEXT

FUNCTION func()
	DIM array[] = 0, 1, 2, 3
	RESULT = SLICE(array)
FEND
結果
0
1
2
3

二次元配列を返す

二次元配列を戻り値として返す場合は、RESULTをSAFEARRAY (スクリプト関数)safearray 型で宣言し、要素を代入していきます。戻り値として二次元配列を返すのはスクリプト関数だとXLGETDATA (スクリプト関数)くらいですが、自作関数で行列データを返すときは二次元配列使うと良いと思います。

DIM array = dimention()

FOR i = 0 TO 3
    FOR j = 0 TO 5
        PRINT i + "-" + j + "<#TAB>" + array[i][j]
    NEXT
NEXT

FUNCTION dimention()
    RESULT = SAFEARRAY(0, 3, 0, 5)    // RESULT[0][0] 〜 RESULT[3][5]の二次元配列を生成
    FOR i = 0 TO 3
        FOR j = 0 TO 5
            RESULT[i][j] = i * j      // 各要素に代入
        NEXT
	PRINT "-----"
    NEXT
FEND
結果
0-0    0
0-1    0
0-2    0
0-3    0
0-4    0
0-5    0
-----
1-0    0
1-1    1
1-2    2
1-3    3
1-4    4
1-5    5
-----
2-0    0
2-1    2
2-2    4
2-3    6
2-4    8
2-5    10
-----
3-0    0
3-1    3
3-2    6
3-3    9
3-4    12
3-5    15