SPREAD for Windows Formsのピボットテーブルを使う

Microsoft Excelのような外観と操作性を持つWindows Forms用スプレッドシートコンポーネント「SPREAD for Windows Forms(スプレッド)」では、2026年3月4日にリリースされたバージョン「19.0J」においてピボットテーブル機能が追加されています。

SPREAD for Windows Forms 19.0J

大規模なデータセットを迅速に分析したい場面では、ピボットテーブルを使用することで、データの要約やグループ化、再編成を容易に実行できます。本記事では、SPREAD for Windows Forms(以下SPREAD)を使用してピボットテーブルの機能と作成方法を紹介します。

事前準備

この記事では以下の開発環境を使用します。開発言語はC#です。

  • Visual Studio 2026
  • .NET 10
  • SPREAD for Windows Forms 19.0J(19.0.4800.2026)

SPREADは製品版またはトライアル版を使用します。トライアル版は以下より入手可能です。

また、SPREADの製品ヘルプとAPIリファレンスは以下から参照できます。

Windows Formsアプリケーションの作成

Visual Studioのスタート画面で[新しいプロジェクトの作成]をクリックし、表示された「新しいプロジェクトの作成」画面で「Windows フォーム アプリ」を選択して[次へ]をクリックします。

Windows Formsアプリケーションの作成

「プロジェクト名」にプロジェクトの名称を入力して[次へ]をクリックします。

Windows Formsアプリケーションの作成

続いて表示される画面でフレームワークとして「.NET 10.0 (長期的なサポート)」を選択して[作成]をクリックします。

NuGetパッケージの追加

「NuGet パッケージの管理」で「MESCIUS Spread WinForms」を検索してNuGetパッケージ「GrapeCity.Spread.WinForms.ja」をソリューションにインストールします。詳しい手順については製品ヘルプの「NuGetパッケージの追加 > .NET」を参照してください。

NuGetパッケージの追加

SPREADコントロールの追加

ツールボックスからSPREADコントロール(FpSpread)のアイコンをドラッグ&ドロップしてフォームに配置します。

SPREADコントロールの追加

データ用シートの設定

デザイン画面でフォームを右クリックして表示されるコンテキストメニューから[コードの表示]をクリックして下記のコードを記述します。これにより、ピボットテーブルで使うデータを保持するテーブルが作成されます。

public Form1()
{
    InitializeComponent();

    // IWorkbookとIWorksheetの取得
    var workbook = fpSpread1.AsWorkbook();
    var sheet1 = fpSpread1.Sheets[0].AsWorksheet();

    // ■■■ データ用シートの設定 ■■■
    // シートの設定
    sheet1.Cells.Font.Name = "メイリオ";
    sheet1.Cells.Font.Size = 11;
    sheet1.Name = "データ";
    sheet1.SetValue(0, 0, new object[,]
    {
        { "注文日", "地域", "都市", "カテゴリ", "商品", "数量" },
        { "2026-08-01", "関東", "千葉", "お菓子", "せんべい", 1120 },
        { "2026-08-01", "関東", "千葉", "お菓子", "チョコレート", 563 },
        { "2026-08-02", "関東", "東京", "お菓子", "せんべい", 1281 },
        { "2026-08-02", "関東", "東京", "お菓子", "チョコレート", 546 },
        { "2026-08-01", "関東", "千葉", "飲料", "緑茶", 326 },
        { "2026-08-02", "関東", "東京", "飲料", "緑茶", 205 },
        { "2026-08-02", "関東", "東京", "飲料", "ジュース", 186 },
        { "2026-08-01", "関西", "大阪", "お菓子", "せんべい", 1262 },
        { "2026-08-01", "関西", "大阪", "お菓子", "チョコレート", 349 },
        { "2026-08-01", "関西", "京都", "お菓子", "せんべい", 524 },
        { "2026-08-01", "関西", "京都", "お菓子", "チョコレート", 196 },
        { "2026-08-01", "関西", "大阪", "飲料", "緑茶", 363 },
        { "2026-08-01", "関西", "京都", "飲料", "緑茶", 100 },
        { "2026-08-02", "関東", "千葉", "飲料", "ジュース", 120 },
        { "2026-08-02", "関西", "大阪", "お菓子", "せんべい", 350 },
        { "2026-08-02", "関西", "京都", "飲料", "コーヒー", 180 },
        { "2026-08-02", "関東", "千葉", "お菓子", "チョコレート", 75 },
        { "2026-08-03", "関西", "大阪", "飲料", "ジュース", 210 },
        { "2026-08-03", "関東", "神奈川", "お菓子", "せんべい", 420 },
    });

    // テーブルの追加と列幅の調節
    var table = sheet1.Tables.Add(0, 0, 19, 5);
    for (var i = 0; i < sheet1.Columns.Count; i++)
    {
        sheet1.Columns[i].AutoFit();
    }
}

アプリケーションをデバッグ実行すると、次のように[データ]シートが表示されます。

SPREADコントロールの追加

ピボットテーブルの作成

SPREADでは、セル範囲またはテーブルからピボットテーブルを作成できます。ここでは、先ほど作成したテーブルをピボットテーブルのデータソースとして使用します。セル範囲からピボットテーブルを作成する方法については製品ヘルプをご参照ください。

今回作成するピボットテーブルでは、商品の数量の値を集計し、地域/都市/カテゴリ/注文日ごとにデータを整理することができます。なお、ピボットテーブルは、データソースを保持するテーブルと同じシート上に作成することも可能ですが、ここではピボットテーブル専用のシートを作成します。

var sheet2 = workbook.Worksheets.Add("ピボットテーブル");
sheet2.Activate();

ステップ1 テーブルに対応したピボットテーブルキャッシュを作成

ピボットテーブルキャッシュ(IPivotCachesオブジェクト)は、データのスナップショットを保存し、ピボットテーブルのデータソースとして機能します。

var pvCache = workbook.PivotCaches.Create(table);

ステップ2 ピボットテーブルを作成

IPivo​​tCacheインターフェイスのCreatePivotTableメソッドを使用してピボットテーブル(IPivotTableオブジェクト)を作成し、sheet2シートのA1セルから配置します。

var pvTable = pvCache.CreatePivotTable(sheet2.Cells["A1"]);

ステップ3 ピボットテーブルからフィールドのコレクションを取得

IPivotTableインターフェイスのPivotFieldsプロパティを使ってIPivotFieldsオブジェクトを取得できます。IPivotFieldsオブジェクトによりソーステーブルのすべてのフィールドにアクセスできるので、それらのフィールドを行、列、値、またはフィルターに割り当てることが可能になります。

var pvFields = pvTable.PivotFields;

ステップ4 「数量」を集計用のデータフィールドとして追加

IPivotTableインターフェイスのAddDataFieldメソッドを使用して、数量列をデータフィールドとして追加し、Sum集計関数を使って集計できるようにします。

pvTable.AddDataField(pvFields["数量"], "数量の合計", ConsolidationFunction.Sum);

ステップ5 「地域」と「都市」を行フィールドとして設定

ピボットテーブルで結果を地理的にグループ化するために、IPivotFieldインターフェイスのOrientationプロパティを使って地域と都市を行フィールドとして設定します。

pvFields["地域"].Orientation = PivotFieldOrientation.Row;
pvFields["都市"].Orientation = PivotFieldOrientation.Row;

ステップ6 「カテゴリ」と「商品」を列フィールドとして設定

集計データをさらに細分化するために、カテゴリと商品を列フィールドとして追加します。

pvFields["カテゴリ"].Orientation = PivotFieldOrientation.Column;
pvFields["商品"].Orientation = PivotFieldOrientation.Column;

ステップ7 「注文日」をフィルターフィールドとして設定

最後に、注文日をページフィールドとして追加し、ユーザーが特定の日付でピボットテーブルをフィルタリングできるようにします。

pvFields["注文日"].Orientation = PivotFieldOrientation.Page;

以上により、「データ」シート上のデータをソースとするピボットテーブルが「ピボットテーブル」シート上に作成されます。

ピボットテーブルの作成

フィルタリングとソート

ピボットテーブルでは、指定したフィールドに対してフィルタリングとソートを実行するダイアログが用意されています。

フィルタリングとソート

このほかに、以下のようにコードによってフィルタリングやソートを適用することも可能です。

フィルタリング

IPivotFieldインターフェイスのPivotFiltersプロパティが参照するIPivotFiltersオブジェクトのAddメソッドを使用して、対象フィールドにフィルターを設定することができます。次のコードは、カテゴリフィールドを「お菓子」でフィルタリングします。

pvFields["カテゴリ"].PivotFilters.Add(PivotFilterType.CaptionContains, 0, "お菓子");

このコードを実行すると、「飲料」列がフィルタアウトされて「お菓子」列だけが表示されます。

フィルタリングとソート

ソート

IPivotFieldインターフェイスのAutoSortOrderプロパティを使用することで、該当するフィールドの項目をソートできます。

pvFields["地域"].AutoSortOrder = FieldSortType.Descending;

このコードを実行すると、行ラベルが「関西」⇒「関東」から「関東」⇒「関西」に並べ替えられます。

フィルタリングとソート

組み込みダイアログの利用

SPREADには、ピボットテーブルの管理と構成に使用できる下記の組み込みダイアログが備えられています。これらのダイアログを使用することで、Excelのように対話形式でピボットテーブルの内容をカスタマイズできます。

  • 「フィールドの設定」ダイアログ
  • 「値フィールドの設定」ダイアログ
  • 「ピボットテーブルのフィールド」ダイアログ
  • 「ピボットテーブルオプション」ダイアログ

組み込みダイアログを表示するには、FormクラスのLoadイベントやShownイベントで次の手順を実行します。

  1. BuiltInDialogsクラスのメソッドを使ってダイアログを生成する
  2. 生成されたダイアログ(Form)のShowメソッドを実行する
  3. ダイアログのLocationプロパティで表示位置を指定する
  4. 必要に応じてダイアログのSizeプロパティでサイズを調節する

次のコードは、「ピボットテーブルのフィールド」ダイアログをSPREADの右側に同じ高さで表示します。また、ダイアログの幅を400pxに調節しています。

this.Load += (s, ea) =>
{
    //[ピボットテーブルのフィールド]ダイアログの生成
    var dialog = BuiltInDialogs.PivotTableFields(fpSpread1, pvTable);

    // ダイアログの表示
    dialog.Show(this);
    dialog.Location = new Point(this.Right - 10, this.Top);
    dialog.Size = new Size(400, this.Height);
};

以下の動画では、表示された「ピボットテーブルのフィールド」ダイアログを使用して、ピボットテーブルのフィールドを操作しています。

以降では、各ダイアログの概要と作成方法について解説します。

「フィールドの設定」ダイアログ

「フィールドの設定」ダイアログは、BuiltInDialogsクラスのPivotFieldSettingsメソッドを使って生成します。このダイアログにより、特定のピボットテーブルフィールド(例:「商品」)に対して、フィルター、フィールド名、レイアウトなどの設定を構成できます。

var dialog = BuiltInDialogs.PivotFieldSettings(fpSpread1, pvFields["商品"]);
組み込みダイアログの利用

「値フィールドの設定」ダイアログ

「値フィールドの設定」ダイアログは、BuiltInDialogsクラスのPivotValueFieldSettingsメソッドを使って生成します。このダイアログでは、値フィールド(例:「数量」)に対して、計算の種類(合計、個数、平均など)や表示オプションを含む設定を定義できます。

var dialog = BuiltInDialogs.PivotValueFieldSettings(fpSpread1, pvTable.DataFields[0]);
組み込みダイアログの利用

「ピボットテーブルのフィールド」ダイアログ

[ピボットテーブルのフィールド]ダイアログは、BuiltInDialogsクラスのPivotTableFieldsメソッドを使って生成します。このダイアログを使用することで、ユーザーはフィールドをドラッグ&ドロップして、ピボットテーブルの行、列、値、およびフィルターを定義できます。

var dialog = BuiltInDialogs.PivotTableFields(fpSpread1, pvTable);
組み込みダイアログの利用

「ピボットテーブルオプション」ダイアログ

[ピボットテーブルオプション]ダイアログは、BuiltInDialogsクラスのPivotTableOptionsメソッドを使って生成します。このダイアログは、書式、集計、レイアウト、表示など、ピボットテーブルのグローバル設定をカスタマイズするためのオプションを提供します。

var dialog = BuiltInDialogs.PivotTableOptions(fpSpread1, pvTable);
if (dialog.Name == "PivotTableOptions")
{
    // サイズ変更の許可
    ((TableLayoutPanel)dialog.Controls[0]).AutoSize = false;
}
組み込みダイアログの利用

レイアウトの変更

SPREADのピボットテーブルでは、下記のレイアウトが用意されています。目的に合ったレイアウトを選択することで、可読性が高まりデータレビューが容易になります。

  • コンパクト形式
  • アウトライン形式
  • 表形式

ピボットテーブルのレイアウトは、IPivotTableインターフェイスのRowAxisLayoutプロパティにLayoutRowType列挙型を設定することで変更できます。

コンパクト形式

下記のコードはレイアウトをコンパクト形式に設定します。コンパクト形式は既定のレイアウトです。

pvTable.RowAxisLayout = LayoutRowType.Compact;
レイアウトの変更

アウトライン形式

下記のコードはレイアウトをアウトライン形式に設定します。

pvTable.RowAxisLayout = LayoutRowType.Outline;
レイアウトの変更

表形式

下記のコードは、レイアウトを表形式に設定します。

pvTable.RowAxisLayout = LayoutRowType.Tabular;
レイアウトの変更

スタイルの変更

SPREADのピボットテーブルでは、組み込みのスタイルに加えて独自に作成したスタイルも設定することができます。

組み込みスタイルの設定

ピボットテーブルに組み込みスタイルを適用するには、IPivotTableインターフェイスのTableStyleプロパティを使用します。

下記のコードは、BuiltInPivotStyles列挙型を使って取得したITableStyleオブジェクトをIPivotTableインターフェイスのTableStyleプロパティに設定して、「PivotStyleDark10」という組み込みスタイルに変更します。

var tbStyle = workbook.TableStyles[BuiltInPivotStyles.PivotStyleDark10];
pvTable.TableStyle = tbStyle;
スタイルの変更

カスタムスタイルの設定

独自のカスタムスタイルを作成してピボットテーブルに適用する場合も、IPivotTableインターフェイスのTableStyleプロパティにITableStyleオブジェクトを設定します。

カスタムスタイル用のITableStyleオブジェクトは、IWorkbookインターフェイスのTableStylesプロパティを経由してITableStylesインターフェイスのAddメソッドを使って生成します。

生成したITableStyleオブジェクトのTableStyleElementsプロパティを経由してITableStyleElementsインターフェイスのthisプロパティにTableStyleElementType列挙型を設定し、指定した領域のITableStyleElementオブジェクトを取得します。各領域のスタイルは、このITableStyleElementオブジェクトのプロパティを使って設定します。

以下は、独自のスタイルを作成して設定するコードの例です。

var tbStyle = workbook.TableStyles.Add("CustomStyle");
tbStyle.ShowAsAvailablePivotTableStyle = true;
tbStyle[TableStyleElementType.HeaderRow].Font.Color =
    GrapeCity.Spreadsheet.Color.FromArgb(255, 255, 255, 255);
tbStyle[TableStyleElementType.HeaderRow].Interior.Color =
    GrapeCity.Spreadsheet.Color.FromArgb(255, 100, 149, 237);
tbStyle[TableStyleElementType.FirstSubheadingRow].Interior.Color =
    GrapeCity.Spreadsheet.Color.FromArgb(170, 100, 149, 237);
tbStyle[TableStyleElementType.TotalRow].Font.Color =
    GrapeCity.Spreadsheet.Color.FromArgb(255, 255, 255, 255);
tbStyle[TableStyleElementType.TotalRow].Interior.Color =
    GrapeCity.Spreadsheet.Color.FromArgb(255, 100, 149, 237);
tbStyle[TableStyleElementType.WholeTable].Interior.Color =
    GrapeCity.Spreadsheet.Color.FromArgb(100, 100, 149, 237);
tbStyle[TableStyleElementType.WholeTable].Font.Name = "メイリオ";
tbStyle[TableStyleElementType.WholeTable].Font.Size = 11;
pvTable.TableStyle = tbStyle;
TableStyleElementType.FirstSubheadingRowなどを設定する場合は、ITableStyleインターフェイスのShowAsAvailablePivotTableStyleプロパティをtrueにする必要があります。

上記のコードを実行すると次のようなスタイルになります。

スタイルの変更

今回作成したサンプルは以下よりダウンロード可能です。

さいごに

今回の記事では、SPREAD for Windows Forms 19.0Jの新機能「ピボットテーブル」の機能と利用方法についてご紹介しました。弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。

また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /