# XNPV - スクリプト関数

XNPV() は、 pmt と date のペア数値で表されるキャッシュフロー計算書 (不定期の場合もあります) の集計された正味現在価値を返します。 すべての支払いは、年 365 日の日割り計算で割り引かれます。

構文:

XNPV(discount\_rate, pmt, date)

戻り値データ型： 数値

情報メモ既定では、結果は通貨としてフォーマットされます。

XNPV を計算するための式は次の通りです:

XNPV 集計式

XNPV 集計式

XNPV 集計式 ![XNPV スクリプト関数の式の画像。](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-xnpv-formula.png)

次のような前提です:

* `P``i` = 単一期間 `i` 中の正味キャッシュ インフロー/アウトフロー

* `d``1`= 最初の支払日

* `d``i` = `i`^番目^の支払日

* `rate` = 割引率

正味現在価値 (NPV) は、所定の割引率を使って将来のキャッシュ フローの現行合計価値を計算するのに使用されます。XNPV を計算するには、対応する日付で詳細のキャッシュフローを推定する必要があります。この後、支払いのたびに、支払い日付に基づいて複利割引率を適用します。

一連の支払いに対して XNPV 集計を実行することは、それらの支払いに対して Sum 集計を行うことと似ています。違いは、各金額が、選択した割引率 (利息と類似) と将来のいつまで支払うかにに従って修正 (または「割引」) されることです。discount\_rate パラメーターをゼロに設定して XNPV を実行すると、XNPV が Sum 演算子と同等になります (支払いは合計される前に修正されます)。一般的に、discount\_rate が設定される値がゼロに近いほど、XNPV 結果が Sum 集計の結果に類似するようになります。

引数

| 引数 | 説明 |
| --- | --- |
| discount\_rate | discount\_rate は、支払いが割引されるべき年率です。<br><br>値 0.1 は、10% の割引率を示します。 |
| pmt | 支払い。date で指定された支払いスケジュールに対応するキャッシュ フローを含む式またはフィールド。 プラスは入金、マイナスは出金とみなされます。<br><br>情報メモXNPV() は、開始日に必ず発生するため、初期キャッシュフローを割引しません。その後の支払いは、年 365 日の日割り計算で割り引かれます。これは、最初の支払いも割り引かれる NPV() とは異なります。 |
| date | pmt で指定された支払いキャッシュ フローに対応する数式または項目で、支払日が含まれます。 最初の値は、将来のキャッシュフローのオフセットを計算するための開始日として使用されます。 |

この関数を使用する場合は、次の制限が適用されます。

* データペアのどちらか、または両方にテキスト値、NULL 値、不明な値があると、すべてのデータペアが無視されます。

## 使用に適しているケース

* `XNPV()` は、財務モデリングにおいて、投資機会の正味現在価値 (NPV) を計算するのに使用されます。

* 精度が高いため、あらゆるタイプの財務モデルについて XNPV のほうが NPV より好まれています。

## 地域の設定

特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの `SET DateFormat` ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。

App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。

## 例 1 - 単一の支払い (スクリプト)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 1 件のプロジェクトと 1 年のそのキャッシュフローのデータセットで、`CashFlow` という名前のテーブルに入っています。計算の開始日は 2022 年 7 月 1 日に設定されており、正味キャッシュフローは 0 です。1 年後、1000 ドルのキャッシュフローが発生します。

* `CashFlow` テーブルからの resident load で、`XNPV` という名前のプロジェクトの `XNPV` 項目を計算するのに使用されます。

* ハードコードされた割引率 10% (0.1) で、これは XNPV 計算で使用されます。

* `Group By` ステートメントは、プロジェクトのすべての支払いをまとめるのに使用されます。

ロード スクリプト

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `PrjId`

* `XNPV`

結果テーブル

| PrjId | XNPV |
| --- | --- |
| 1 | $909.09 |

式によると、1 番目のレコードの XNPV 値は 0、2 番目のレコードの XNPV 値は 909.09 ドルです。そのため、XNPV の合計は 909.09 ドルとなります。

## 例 2 – 複数支払い (スクリプト)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 1 件のプロジェクトと 1 年のそのキャッシュフローのデータセットで、`CashFlow` という名前のテーブルに入っています。

* `CashFlow` テーブルからの resident load で、`XNPV` という名前のプロジェクトの `XNPV` 項目を計算するのに使用されます。

* ハードコードされた割引率 10% (0.1) で、これは XNPV 計算で使用されます。

* `Group By` ステートメントは、プロジェクトのすべての支払いをまとめるのに使用されます。

ロード スクリプト

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2024',500
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `PrjId`

* `XNPV`

結果テーブル

| PrjId | XNPV |
| --- | --- |
| 1 | $1322.21 |

この例では、1 年目の終わりに 1000 ドル、2 年目の終わりに 500 ドルの支払いを受けています。期間あたりの割引率が 10% であるため、有効な XNPV は 1322.21 となります。

計算の基準日を指すのは最初の行のデータのみであることに注意してください。その他の行については、データ パラメータが経過期間を計算するのに使用されるため、順序は重要ではありません。

## 例 3 – 複数支払いと不定期のキャッシュフロー (スクリプト)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/FinancialAggregationFunctions/XNPV.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* `Project` というテーブルの 2 つのプロジェクトの割引率。

* プロジェクト ID と日付別の、各プロジェクトに対する複数の期間のキャッシュフロー。`Dates` 項目は、割引率がキャッシュフローに割り当てられる期間を計算するのに使用されます。最初のレコード (最初のキャッシュフローと日付) を除けば、レコードの順序は重要ではなく、変更しても計算には影響しません。

* `NoConcatenate`、Resident loads、および `Left Join` 関数、臨時テーブルの組み合わせを使って、`tmpNPV` が作成されます。これは、1 つのフラット テーブルに `Project` と `CashFlow` テーブルのレコードを組み合わせます。このテーブルでは、各キャッシュフローに対して割引率が繰り返されます。

* `tmpNPV` テーブルからの resident load で、`XNPV` という名前の各プロジェクトの `XNPV`項目を計算するのに使用されます。

* 各プロジェクトに関連付けられた単一値の割引率で、これは、`only()` 関数を使って取得され、各プロジェクトに対する `XNPV` 計算で使用されます。

* `Group By` ステートメント (プロジェクト ID 別にグループ化) は、各プロジェクトのすべての支払いと対応する日付をまとめるのに使用されます。

* データ モデルに合計または重複データがロードされないようにするため、`tmpXNPV` テーブルがスクリプトの終わりに削除されます。

ロード スクリプト

```
Project:
Load * inline [
PrjId,Discount_Rate
1,0.1
2,0.15
];

CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2021',0
1,'07/01/2022',1000
1,'07/01/2023',1000
2,'07/01/2020',0
2,'07/01/2023',500
2,'07/01/2024',1000
2,'07/01/2022',500
];

tmpXNPV:
NoConcatenate Load *
Resident Project;
Left Join
Load * 
Resident CashFlow;

XNPV:
Load 
	PrjId,
	XNPV(Only(Discount_Rate),Values,Dates) as XNPV //Discount Rate will be 10% for Project 1 and 15% for Project 2
Resident tmpXNPV
Group By PrjId;

Drop table tmpXNPV;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `PrjId`

* `XNPV`

結果テーブル

| PrjId | XNPV |
| --- | --- |
| 1 | $1735.54 |
| 2 | $278.36 |

プロジェクト ID 1 は、2021 年 7 月 1 日に初期キャッシュフローが 0 ドルでした。期間あたりの割引率 10% で、2 年連続年度末に 1000 ドルの支払いを受け取ることになっています。そのため、有効な XNPV は 1735.54 です。

プロジェクト ID 2 は、2021 年 7 月 1 日に初期キャッシュフローが 1000 ドルでした (そのためマイナス記号となっています)。2 年後、500 ドルが支払われることになっています。3 年後、500 ドルがさらに支払われます。最後に、2024 年 7 月 1 日に 1000 ドルの支払いが見込まれています。割引率が 15% であるため、有効な XNPV は 278.36 となります。

## 詳細を見る

* [Drop table](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)
* [group by](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)
* [Join](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)
* [Max - スクリプト関数](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)
* [NoConcatenate](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)
* [NPV - チャート関数](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)
* [Only - スクリプト関数](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)
* [Resident LOAD](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)