DioDocs for Excel
DioDocs for Excel
シナリオ
機能 > 数式 > What-If 分析 > シナリオ

シナリオは、ワークシート上に自動的に代入される値のセットであり、数式のさまざまな結果を切り替えて表示することができる機能です。 DioDocs for Excelでは、IWorksheet インタフェースの Scenarios プロパティを使用することで、異なるシナリオを作成し、ワークブックに保存することができます。

DioDocs for Excelでは、シナリオを追加・実行するために以下のメソッドを用意しています。

メモ: Microsoft Excelでは、シナリオによって変更することができるセルは最大32個までですが、DioDocs for Excelには、制限がありません。したがって、32個以上の変更対象セルがあるワークブックをMicrosoft Excelで開いた場合、変更対象セルを編集するダイアログボックスを開くことはできません。

シナリオの作成

ワークシートに新しいシナリオを追加する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
// 新しいワークブックを生成します
var workbook = new Workbook();

// Excelファイルを開きます
workbook.Open("What-If-Analysis-Scenarios.xlsx");

// アクティブなワークシートを取得します
var worksheet = workbook.ActiveSheet;

// さまざまな割引率を示すシナリオを作成し、追加します
// シナリオ:割引率小
// 変更対象セル: D2:D6.
var lessDiscountRatesValues = new List<object> { 0.05, 0.02, 0.03, 0.02, 0.05 };
var lessDiscountRates = worksheet.Scenarios.Add("Less Discount Rates", worksheet.Range["D2:D6"], lessDiscountRatesValues);

// シナリオ:割引率通常
// 変更対象セル: D2:D6.
var normalDiscountRatesValues = new List<object> { 0.1, 0.05, 0.05, 0.05, 0.1 };
var normalDiscountRates = worksheet.Scenarios.Add("Normal Discount Rates", worksheet.Range["D2:D6"], normalDiscountRatesValues);

// シナリオ:割引率なし
// 変更対象セル: D2:D6.
var sellingWithoutDiscountValues = new List<object> { 0, 0, 0, 0, 0 };
var sellingWithoutDiscount = worksheet.Scenarios.Add("Selling Without Discount", worksheet.Range["D2:D6"], sellingWithoutDiscountValues);

// シナリオ:大量販売
// 変更対象セル: E2:E6.
var bulkQuantitySoldValues = new List<object> { 1000, 1000, 1000, 1000, 1000 };
var bulkQuantitySold = worksheet.Scenarios.Add("Bulk Quantity Sold", worksheet.Range["E2:E6"], bulkQuantitySoldValues);

// ワークブックを保存します
workbook.Save("CreateScenarios.xlsx");


シナリオの変更

特定のシナリオの値セットを変更する方法については、次のサンプルコードを参照してください。このコードでは、"Less Discount Rates"シナリオの値セットを変更しています。

C#
コードのコピー
// シナリオ:"割引率小(Less Discount Rates)"のD3セルの値を変更します。
lessDiscountRatesValues[1] = 0.04;
lessDiscountRates.ChangeScenario(worksheet.Range["D2:D6"], lessDiscountRatesValues);

シナリオ上の"D3" の設定値が、以下のように"0.02"から"0.04"に更新されます。

Before Modification After Modification

シナリオの実行

特定のシナリオを適用する方法については、次のサンプルコードを参照してください。このコードでは、"Less Discount Rates"シナリオを適用しています。

C#
コードのコピー
// "割引率小(Less Discount Rates)"のシナリオを実行します
worksheet.Scenarios["Less Discount Rates"].Show();


以下のサンプルコードでは、"Normal Discount Rates"シナリオを適用しています。

C#
コードのコピー
// "割引率通常(Normal Discount Rates)"のシナリオを実行します
worksheet.Scenarios["Normal Discount Rates"].Show();


シナリオの削除

シナリオを削除する方法については、次のサンプルコードを参照してください。このコードでは、"Less Discount Rates"シナリオを削除しています。

C#
コードのコピー
// "割引率小(Less Discount Rates)"のシナリオを削除します
worksheet.Scenarios["Less Discount Rates"].Delete();

シナリオを非表示にする

シナリオを非表示にする方法については、次のサンプルコードを参照してください。このコードでは、"Less Discount Rates"シナリオを非表示にしています。

C#
コードのコピー
// "割引率小(Less Discount Rates)"のシナリオを、ワークシートが保護されている時、非表示になるように作成します
var lessDiscountRatesValues = new List<object> { 0.05, 0.02, 0.03, 0.02, 0.05 };
var lessDiscountRates = worksheet.Scenarios.Add("Less Discount Rates", worksheet.Range["D2:D6"], lessDiscountRatesValues, hidden:true);

// または

// 既存のシナリオ"割引率小(Less Discount Rates)"を、ワークシートが保護されている時、非表示にします
worksheet.Scenarios["Less Discount Rates"].Hidden =true;

シナリオの保護

シナリオを保護する方法については、次のサンプルコードを参照してください。このコードでは、"Less Discount Rates"シナリオを保護しています。

C#
コードのコピー
// "割引率小(Less Discount Rates)"のシナリオを保護された状態で作成します
var lessDiscountRatesValues = new List<object> { 0.05, 0.02, 0.03, 0.02, 0.05 };
var lessDiscountRates = worksheet.Scenarios.Add("Less Discount Rates", worksheet.Range["D2:D6"], lessDiscountRatesValues, locked: true);

// または

// 既存のシナリオ"割引率小(Less Discount Rates)"を保護します
worksheet.Scenarios["Less Discount Rates"].Locked = true;

コメントの追加

シナリオにコメントを追加する方法については、次のサンプルコードを参照してください。このコードでは、"Less Discount Rates"シナリオにコメントを追加しています。

C#
コードのコピー
// コメントが追加された状態で "割引率小(Less Discount Rates)"のシナリオを作成します
var lessDiscountRatesValues = new List<object> { 0.05, 0.02, 0.03, 0.02, 0.05 };
var lessDiscountRates = worksheet.Scenarios.Add("Less Discount Rates", worksheet.Range["D2:D6"], lessDiscountRatesValues, "DioDocs for Excelで生成したシナリオです");

制限事項

DioDocs for Excelのシナリオ機能は、以下の機能をサポートしていません。