# Sub..end sub

sub..end sub 制御ステートメントは、call ステートメントで呼び出されるサブルーチンを定義します。

構文:

Sub name [ ( paramlist )] statements end sub

引数はサブルーチンにコピーされ、call ステートメントで対応する実パラメータが変数名の場合は、サブルーチンの終了後、コピーして戻されます。

サブルーチンに call ステートメントで渡される実パラメータよりも仮パラメータが多い場合は、余分なパラメータは NULL に初期化され、サブルーチン内でローカル変数として使用できます。

引数：

引数

| 引数 | 説明 |
| --- | --- |
| name | サブルーチンの名前。 |
| paramlist | サブルーチンの仮パラメータの変数名のコンマ区切りリスト。これはサブルーチン内の変数として使用できます。 |
| statements | 1 つ以上の Qlik Sense スクリプト ステートメントのグループ。 |

制限事項:

* sub ステートメントは制御文であり、セミコロンまたは改行コードで終わっているため、2 つの節 (sub、end sub) が行をまたぐことはできません。

* 例えば [`if..then`] 制御文内の [`Sub..end sub`]を使用してサブルーチンを定義すると、同じ制御文内からはサブルーチンしか呼び出すことはできません。

例1：

`Sub INCR 
 (I,J)` `I = I + 
 1` `Exit Sub 
 when I < 10` `J = J + 
 1` `End Sub` `Call INCR 
 (X,Y)`

例2： - パラメータ転送

`Sub ParTrans 
 (A,B,C)` `A=A+1` `B=B+1` `C=C+1` `End Sub` `A=1` `X=1` `C=1` `Call ParTrans 
 (A, (X+1)*2)`

上記の結果、サブルーチン内でローカルに A は 1、B は 4、C は NULL に初期化されます。

サブルーチンを終了する際、グローバル変数 A は 2 を値として取得します (サブルーチンからコピーして返されます)。2 番目の実パラメータ “(X+1)\*2” は変数ではないため、コピーして返されません。最後に、グローバル変数 C はサブルーチン呼び出しの影響を受けません。

## 詳細を見る

* [Call](https://help.qlik.com/ja-JP/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Call.htm)
* [Exit](https://help.qlik.com/ja-JP/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Exit.htm)
* [End](https://help.qlik.com/ja-JP/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/End.htm)