IRONSOFTWAREHOME
IRONXLの使用

Excel で相互運用性なしで C# を使ってピボット テーブルを作成する方法

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

**C# を使用して Excel でピボットテーブルを作成するのは、適切なライブラリを選択すれば簡単です。Excel Interop はすべてのマシンに Office がインストールされている必要がありますが、 IronXL は.NETが動作する環境であればどこでも使用できます。**このガイドでは、セットアップ、データ集計、フィールド構成、デプロイに関する考慮事項など、両方のアプローチを完全なコード例とともに解説し、プロジェクトに最適な選択ができるようにサポートします。

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 1 - IronXL

Excel InteropとIronXLの違いは何ですか?

コードを一行も書く前に、それぞれの方法が内部でどのような動作をするのかを理解しておくと役立ちます。 Excel InteropはCOM(コンポーネントオブジェクトモデル)を使用して、C#からMicrosoft Excelを直接操作します。 .NETプロセスは実行中のExcelインスタンスと通信するため、Excel自体がマシンにインストールされている必要があります。操作するすべてのオブジェクト(ワークブック、ワークシート、範囲、ピボットキャッシュなど)はCOMラッパーであり、プロセスリークを防ぐためにそれぞれ明示的に解放する必要があります。

IronXLは根本的に異なる道を歩んでいる。 Excelを一切起動することなく、 Open XMLファイル形式を直接読み書きします。 その結果、使い慣れたオブジェクトパターン、ガベージコレクションされたメモリ、そしてOfficeのインストールやライセンスへの依存がない、標準的な.NETライブラリが実現しました。 そのアーキテクチャにより、 IronXLはサーバーサイドのワークロード、Dockerコンテナ、Linuxホスト、および.NET 6、 .NET 8、または.NET 10のあらゆる環境に適しています。

Excel InteropとIronXLの比較概要
基準Excel InteropIronXL
オフィス勤務必須はいなし
Windowsのみはいいいえ、クロスプラットフォームではありません
メモリ管理手動COMリリース自動(.NET GC)
サーバー展開難しい分かりやすい
ネイティブピボットテーブル完全なExcelピボットAPILINQによるデータ集計
ライセンスが必要ですオフィスライセンスIronXLライセンスのみ

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 2 - クロスプラットフォーム

各ライブラリをどのようにインストールしますか?

Excel Interopの設定

Excel Interop はNuGetパッケージとして提供されます。 プロジェクトで以下のいずれかを実行してください。

Install-Package Microsoft.Office.Interop.Excel
dotnet add package Microsoft.Office.Interop.Excel
SHELL

パッケージ単体では不十分であることに注意してください。対象のマシンには、対応するバージョンのMicrosoft Excelがインストールされ、適切なライセンスが付与されている必要があります。 その依存関係により、ほとんどのサーバー、コンテナ、クラウドのシナリオは除外されます。

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 3 - Excel Interopのインストール

IronXLの設定

追加のシステム要件なしでNuGet経由でIronXLをインストールできます。

PM > Install-Package IronXL.Excel

インストール後、 .NETをサポートするあらゆるプラットフォームで、すぐにExcelファイルの読み書きを開始できます。 Officeライセンス不要、COM登録不要、サーバー設定不要。 オフラインインストールやプロジェクト参照の設定など、その他のオプションについては、IronXLのインストールガイドを参照してください。

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 4 - インストール

最初のステップ:
arrow pointer

C# InteropでExcelのピボットテーブルをどのように作成しますか?

Interopのピボットテーブルワークフローは厳密な順序に従います: ソース範囲からピボットキャッシュを作成し、別のワークシートでPivotTableオブジェクトを構築し、フィールドの配置を設定します。 以下の例では、 .NET 10 と互換性のあるトップレベルの C# ステートメントを使用しています。

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

// Launch Excel and set up workbooks
var excelApp = new Excel.Application();
excelApp.Visible = false;
var workbook = excelApp.Workbooks.Add();
var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
dataSheet.Name = "SalesData";
var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
pivotSheet.Name = "Pivot";

// Populate header row
dataSheet.Cells[1, 1] = "Product";
dataSheet.Cells[1, 2] = "Region";
dataSheet.Cells[1, 3] = "Sales";

// Add sample data rows
object[,] rows = {
    { "Laptop",   "なしrth", 1200 },
    { "Laptop",   "South", 1500 },
    { "Phone",    "なしrth",  800 },
    { "Phone",    "South",  950 },
    { "Tablet",   "East",   600 },
    { "Tablet",   "West",   750 },
    { "Monitor",  "なしrth",  400 },
    { "Monitor",  "South",  500 },
    { "Keyboard", "East",   300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
    dataSheet.Cells[i + 2, 1] = rows[i, 0];
    dataSheet.Cells[i + 2, 2] = rows[i, 1];
    dataSheet.Cells[i + 2, 3] = rows[i, 2];
}

// Build pivot cache from source range
Excel.Range dataRange = dataSheet.Range["A1:C10"];
Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase, dataRange);

// Create the PivotTable on the pivot sheet
Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
Excel.PivotTable pivotTable = pivotTables.Add(
    pivotCache, pivotSheet.Range["A3"], "SalesPivot");

// Assign field orientations
((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
    Excel.XlPivotFieldOrientation.xlRowField;
((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
    Excel.XlPivotFieldOrientation.xlColumnField;
((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
    Excel.XlPivotFieldOrientation.xlDataField;

// Enable grand totals
pivotTable.RowGrand = true;
pivotTable.ColumnGrand = true;

// Save and close
workbook.SaveAs(@"C:\output\pivot_interop.xlsx");
workbook.Close(false);
excelApp.Quit();

// Release every COM object -- skipping any of these causes Excel to stay in memory
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotTables);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(dataRange);
Marshal.ReleaseComObject(pivotSheet);
Marshal.ReleaseComObject(dataSheet);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excelApp);

すべてのCOMラッパーには、対応するMarshal.ReleaseComObject呼び出しが必要です。 参照が1つでも欠けていると、Excelプロセスがバックグラウンドで継続し、ホストプロセスが終了するまでメモリとファイルハンドルを消費し続けます。 このクリーンアップ作業の負担は、スプレッドシート操作の複雑さに比例して大きくなります。

IronXLで同じ結果を得るにはどうすればよいですか?

IronXLはInteropのようにネイティブなピボットテーブルAPIを公開していません。Open XMLピボットフォーマットには数百ものXML属性があり、ほとんどのビジネス要件はプレーンなC#で記述された明示的なLINQ集計によってより確実に満たされます。 出力は、Excelがピボットキャッシュを更新することなく、ファイルを開いたときに正しく再計算される、すっきりとした要約シートです。

using IronXL;
using System.Data;

// Create workbook and populate source data
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet dataSheet = workbook.CreateWorkSheet("SalesData");

dataSheet["A1"].Value = "Product";
dataSheet["B1"].Value = "Region";
dataSheet["C1"].Value = "Sales";

object[,] rows = {
    { "Laptop",   "なしrth", 1200 },
    { "Laptop",   "South", 1500 },
    { "Phone",    "なしrth",  800 },
    { "Phone",    "South",  950 },
    { "Tablet",   "East",   600 },
    { "Tablet",   "West",   750 },
    { "Monitor",  "なしrth",  400 },
    { "Monitor",  "South",  500 },
    { "Keyboard", "East",   300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
    dataSheet[$"A{i + 2}"].Value = rows[i, 0];
    dataSheet[$"B{i + 2}"].Value = rows[i, 1];
    dataSheet[$"C{i + 2}"].Value = rows[i, 2];
}

// Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout
DataTable table = dataSheet["A1:C10"].ToDataTable(true);
var summary = table.AsEnumerable()
    .GroupBy(row => row.Field<string>("Product"))
    .Select((group, idx) => new
    {
        Product    = group.Key,
        TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
        RegionCount = group.Select(r => r.Field<string>("Region")).Distinct().Count(),
        RowIndex   = idx + 2
    })
    .OrderByDescending(x => x.TotalSales);

// Write the summary sheet
WorkSheet summarySheet = workbook.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Total Sales";
summarySheet["C1"].Value = "Regions";

foreach (var item in summary)
{
    summarySheet[$"A{item.RowIndex}"].Value = item.Product;
    summarySheet[$"B{item.RowIndex}"].Value = (double)item.TotalSales;
    summarySheet[$"C{item.RowIndex}"].Value = item.RegionCount;
}

// Apply currency format to the sales column
summarySheet["B:B"].FormatString = "$#,##0.00";

// Bold the header row
summarySheet["A1:C1"].Style.Font.Bold = true;

// Save -- no COM cleanup needed
workbook.SaveAs(@"C:\output\analysis_ironxl.xlsx");

解放すべきCOMオブジェクトはなく、終了すべきExcelプロセスもなく、管理すべきOfficeライセンスもありません。 同じコードは、Linux、macOS、Windowsのいずれのプラットフォームでも、修正なしでコンパイルおよび実行できます。 集計APIの詳細については、 IronXL WorkSheetのドキュメントを参照してください。

出力

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 6 - IronXLの出力

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 7 - サマリー出力

導入と保守における主な違いは何ですか?

配備要件

Interopベースのアプリケーションをデプロイするには、ターゲット環境がWindowsを実行していること、適切なバージョンのOfficeがインストールされていること、およびサーバー上でCOMオートメーションのアクセス許可が構成されていることを確認する必要があります。 クラウドホスト環境やコンテナ化されたワークロードは、仮想化されたWindowsデスクトップインフラストラクチャを追加しない限り、通常これらの要件を満たすことができません。しかし、仮想化インフラストラクチャを追加すると、コストと運用上の複雑さが大幅に増加します。

IronXLにはそのような制約はありません。 NuGetパッケージを追加し、ターゲットフレームワークを.NET 6以降に設定すると、アプリケーションはLinuxコンテナ、Linux上のAzure App Service、AWS Lambda、オンプレミスのWindowsサーバーなど、あらゆるホストにデプロイされます。 IronXLシステム要件ページには、完全な互換性マトリックスが記載されています。

エラーハンドリングとデバッグ

Interopの失敗は、ユーザーに見えるメッセージに変換しにくいCOM例外(COMException)として現れます。 インストールされているOfficeのバージョンとInteropアセンブリのバージョンが一致しない場合、別の障害モードが発生します。 これらの問題をデバッグするには、通常、開発用マシン上で全く同じバージョンのOfficeを再現する必要があります。

IronXLは、説明的なメッセージを伴う標準的なSystem.Exceptionサブクラスをスローします。 ファイル操作をtry-catchブロックで囲むことで、COMエラーコードを理解しなくても意味のあるフィードバックを提供できます。 IronXLのトラブルシューティングガイドでは、よくある例外とその解決策について説明しています。

メモリとパフォーマンス

COMオブジェクトは、管理されていないメモリを保持します。 コードが多数のワークシートを処理したり、ループ内で実行されたりする場合、各参照を正しく解放しないと、時間の経過とともにメモリが増大します。これは、本番環境で問題が発生するまで検出が困難な問題です。 Interopは単一のExcelウィンドウを操作するため、本質的にシングルスレッドです。

IronXLは、 .NETガベージコレクタによって支えられたマネージドオブジェクトを使用します。 オブジェクトがスコープ外になると、メモリは自動的に解放されます。 複数のワークブックを並行して処理するのは簡単です。なぜなら、ロックで保護する必要のある共有COM状態が存在しないからです。

2つのアプローチのどちらを選ぶべきか?

適切なツールは、コードが実行される場所と、ネイティブのピボットテーブルXMLが必要かどうかという2つの制約によって決まります。

Excel Interop を選ぶとき:

  • このワークロードは、Officeが既にインストールされているWindowsデスクトップマシンでのみ実行されます。 出力ファイルには、ネイティブのピボットテーブルの書式設定(スライサー、グループ化された日付フィールド、計算項目)が正確に含まれている必要があります。 既存の相互運用コードベースを維持しており、全面的な書き直しは正当化されない。

IronXL を選ぶとき:

  • アプリケーションはサーバー、コンテナ、またはクラウド機能上で実行されます
  • クロスプラットフォームまたはLinuxへの展開が必要です
  • 単体テストで検証可能なデータ集計ロジックが必要であり、Excelプロセスに依存しないロジックが必要です。
  • Excelファイルを大規模または並列処理する必要がある場合

ほとんどの新しい.NET 10プロジェクトでは、 IronXLが事実上のデフォルト設定となっています。 IronXLライブラリはC#でのExcelファイルの読み取りチャート作成セルスタイルの適用数式の操作、およびExcelデータのDataTableへのエクスポートをカバーしており、スタック内の複数のライブラリの必要性を減少させます。

C# Interopを使用してExcelでピボットテーブルを作成する方法 vs IronXL: 画像 8 - 特徴

IronXLにはデータ分析をサポートするその他の機能は何ですか?

IronXLは、基本的な集計機能に加えて、より高度なデータ分析ワークフローをサポートするいくつかの機能を提供します。

データの並べ替えとフィルタリング

要約シートを作成する前に、範囲を昇順または降順に並べ替えることができます。 これにより、出力データが常に一貫した順序で表示されることが保証され、後続の処理がより予測可能になります。 範囲レベルでのソートオプションのためのIronXLソートのドキュメントを参照してください。

条件付き書式の適用

目立つ外れ値やしきい値をプログラムで強調するために、条件付き書式ルールを適用してください。 例えば、売上が目標値を下回った場合にサマリーシートのセルを赤色にすることで、エンドユーザーが手動でルールを設定する必要なく、一目で状況を把握できるようにすることができます。

既存のExcelファイルの読み取り

ソースデータがデータベースではなく既存のスプレッドシートから来ている場合、WorkBook.Loadを使用して直接読み込むことができます。

using IronXL;

WorkBook existing = WorkBook.Load(@"C:\data\sales_report.xlsx");
WorkSheet sheet = existing.WorkSheets[0];

// Read column C starting at row 2
var salesValues = sheet["C2:C100"]
    .Where(cell => cell.Value != null && cell.Value.ToString() != string.Empty)
    .Select(cell => cell.DecimalValue)
    .ToList();

decimal total = salesValues.Sum();
Console.WriteLine($"Total sales from file: {total:C}");

このパターンは、.csv、およびIronXLでサポートされている他の形式に対して機能します。 サポートされている形式の詳細については、IronXLファイル形式ドキュメントを参照してください。

CSVへのエクスポート

要約ワークシートを作成した後、Excelファイルを受け付けない下流システム向けにCSV形式でエクスポートできます。

workbook.SaveAsCsv(@"C:\output\summary.csv");

これは、最終的な利用者がデータベースインポートツールやデータウェアハウスローダーであるETLパイプラインにおいて特に有用です。

IronXLを無料で使い始めるにはどうすればよいですか?

IronXLは無料トライアルライセンスで利用可能で、サブスクリプション契約を結ぶことなく全機能を評価できます。 試用版では出力ファイルに透かしが入りますが、製品版ライセンスキーを適用すると透かしは削除されます。

コード内でライセンスキーを有効化するには、 IronXLの操作を行う前に設定してください。

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

キーは環境変数(IRONXL_LICENSEKEY)またはASP.NET Coreプロジェクト内のappsettings.jsonを通じて設定することもできます。 IronXLのライセンスページには、チーム向けや組織向けオプションを含む、利用可能なすべてのプランが記載されています。

本番環境へのデプロイには、IronXL デプロイメントドキュメントと、ASP.NET Core、Azure Functions、Docker をカバーするパターンについての広範な IronXL チュートリアルライブラリ を参照してください。

次のステップに進むにはどうすればいいですか?

C# で Excel のピボットテーブルを作成する際に、Office への依存や COM の複雑さは必ずしも必要ではありません。 IronXLを使えば、あらゆるプラットフォームで実行でき、メモリを自動的に処理し、単体テストフレームワークやCI/CDパイプラインと自然に統合できる、シンプルな.NETコードを記述できます。

IronXLの無料トライアル版をダウンロードして、このガイドの例を自分のデータで実行してみてください。 ご不明な点がある場合は、 IronXLのコミュニティフォーラムサポートポータルが、トライアルユーザーとライセンスユーザーの両方にご利用いただけます。 導入準備が整ったら、ライセンスオプションを確認し、チームの規模と使用量に合ったプランを選択してください。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。