スプレッドシートで作成したピボットテーブルの設定を変更するには、次のタスクを実行します。
IPivotCachesインタフェースおよびIPivotTablesインタフェースのプロパティとメソッドを使用して、ピボットテーブルのフィールドを設定することができます。
ワークシートのピボットテーブルフィールドを設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//ピボットテーブルフィールドを設定します var field_Category = pivottable.PivotFields["Category"]; field_Category.Orientation = PivotFieldOrientation.RowField; var field_Product = pivottable.PivotFields["Product"]; field_Product.Orientation = PivotFieldOrientation.ColumnField; var field_Amount = pivottable.PivotFields["Amount"]; field_Amount.Orientation = PivotFieldOrientation.DataField; var field_Country = pivottable.PivotFields["Country"]; field_Country.Orientation = PivotFieldOrientation.PageField; |
ピボットテーブルにフィールド関数を追加する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//フィールド量関数を設定します
field_Amount.Function = ConsolidationFunction.Average;
|
ピボットテーブルのフィールドレベルを管理する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//レベル1の製品 var field_product = pivottable.PivotFields["Product"]; field_product.Orientation = PivotFieldOrientation.RowField; //レベル2のカテゴリ var field_category = pivottable.PivotFields["Category"]; field_category.Orientation = PivotFieldOrientation.RowField; var field_Amount = pivottable.PivotFields[3]; field_Amount.Orientation = PivotFieldOrientation.DataField; //カテゴリはレベル1に、製品はレベル2になります field_product.Position = 1; field_category.Position = 0; |
総計は、ピボットテーブルのデータの合計を分析するために役に立ちます。IpivotTableインタフェースのColumnGrandとRowGrandプロパティの表示/非表示を設定して、行または列フィールドの総計を表示/非表示にすることができます。このプロパティではブール値を使用し、デフォルトで true に設定されます。例えば、行の総計のみを表示するには、RowGrandプロパティを true に、ColumnGrandプロパティを false に設定します。
総計フィールドの表示/非表示にする方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
// 列と行の総計を表示するためにPivotTableレポートを設定します pivottable.ColumnGrand = true; pivottable.RowGrand = true; |
ピボットテーブルの表示は、LayoutRowType列挙体を使用して次のいずれかのレイアウトに変更できます。
ピボットテーブルの行レイアウトを TabularRow に設定する方法について、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
// PivotTableのLayoutRowTypeをTabularRowに設定します
pivottable.SetRowAxisLayout(LayoutRowType.TabularRow);
|
ピボットテーブルのさまざまなレイアウトにより、データを柔軟に分析することができます。DioDocs for Excelでは、次のレイアウトオプションがサポートされています。
また、空白行の挿入、小計の位置の設定、すべてのアイテムの表示、または任意のアイテムのラベルの繰り返し表示を実現することができます。
ピボットテーブルのレイアウトと追加オプションを設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//ピボットテーブルのレイアウトを設定します field_Category.LayoutForm = LayoutFormType.Tabular; field_Category.LayoutBlankLine = true; field_Country.LayoutForm = LayoutFormType.Outline; field_Country.LayoutCompactRow = false; //小計の位置を設定します field_Country.LayoutSubtotalLocation = SubtotalLocationType.Bottom; field_Country.ShowAllItems = true; |
ピボットテーブルのフィルタ名を変更する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
// ピボットテーブルのフィールドを構成します var field_Date = pivottable.PivotFields["Date"]; field_Date.Orientation = PivotFieldOrientation.PageField; // PivotFieldの「Category」の名前を「Type of Category」に変更します var field_Category = pivottable.PivotFields["Category"]; field_Category.Name = "Type of Category"; field_Category.Orientation = PivotFieldOrientation.RowField; var field_Product = pivottable.PivotFields["Product"]; field_Product.Orientation = PivotFieldOrientation.ColumnField; var field_Amount = pivottable.PivotFields["Amount"]; field_Amount.Orientation = PivotFieldOrientation.DataField; var field_Country = pivottable.PivotFields["Country"]; field_Country.Orientation = PivotFieldOrientation.RowField; // DataFieldの「Sum of Amount」の名前を「Amount Total」に変更します pivottable.DataFields[0].Name = "Amount Total"; |
ピボットテーブルを更新する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
var field_product = pivottable.PivotFields["Product"]; field_product.Orientation = PivotFieldOrientation.RowField; var field_Amount = pivottable.PivotFields[3]; field_Amount.Orientation = PivotFieldOrientation.DataField; //PivotCacheのソースデータを変更します worksheet.Range["D8"].Value = 3000; //キャッシュのデータをピボットテーブルに同期させます worksheet.PivotTables[0].Refresh(); |
ピボットテーブルフィールドにさまざまな計算関数を適用して、ピボットテーブルに複数回追加することができます。これらの関数には、Sum、Average、Min、Max、Countなどが含まれます。作成されたピボットテーブルには、ピボットテーブルフィールドに適用された計算に基づいた複数のデータフィールドが追加されます。
さまざまな計算関数を適用して、ピボットテーブルフィールドを複数のデータフィールドとして追加する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//ピボットテーブルフィールドを設定します var field_Category = pivottable.PivotFields["Category"]; field_Category.Orientation = PivotFieldOrientation.RowField; var field_Product = pivottable.PivotFields["Product"]; field_Product.Orientation = PivotFieldOrientation.ColumnField; //「Amount」フィールドにSum関数を適用します var field_Amount = pivottable.PivotFields["Amount"]; pivottable.AddDataField(field_Amount, "sum amount", ConsolidationFunction.Sum); //「Amount」フィールドにCount関数を適用します var field_Amount2 = pivottable.PivotFields["Amount"]; pivottable.AddDataField(field_Amount2, "count amount", ConsolidationFunction.Count); |
ピボットテーブルの集計フィールドとは、基となるデータソースの既存のデータフィールドに追加のロジックや数式を適用することで作成されるデータフィールドのことです。これらのフィールドは、集計関数やカスタム計算で目的の結果が得られない場合に特に役立ちます。たとえば、ある企業の従業員データベースには、各従業員の給与と業績評価に関するデータが保存されているとします。年末に、給与フィールドと業績評価フィールドを使用して集計フィールドを作成することにより、従業員の昇給を簡単に計算することができます。
DioDocs for Excelでは、CalculatedFieldsプロパティは、特定のピボットテーブル内のすべての集計フィールドのコレクションを表します。 ICalculatedFieldsインタフェースのAddメソッドを使用して、ピボットテーブルに新しい集計フィールドを作成できます。 Addメソッドは、フィールド名とIPivotField.Formulaプロパティをパラメータとして受け取り、集計フィールドを生成します。コレクションから集計フィールドを削除するには、対象とするフィールド名をパラメータとして受け取るRemoveメソッドを使用します。
ピボットテーブルに集計フィールドを作成する方法については、次のコードを参照してください。
C# |
コードのコピー
|
---|---|
IWorksheet calculatedFieldSheet = workbook.Worksheets.Add(); calculatedFieldSheet.Name = "CalculatedField"; //ピボットテーブルを追加します IPivotCache pivotCache = workbook.PivotCaches.Create(worksheet.Range["A1:F71"]); IPivotTable calculatedFieldTable = calculatedFieldSheet.PivotTables.Add(pivotCache, calculatedFieldSheet.Range["A1"]); calculatedFieldTable.PivotFields["Product"].Orientation = PivotFieldOrientation.RowField; calculatedFieldTable.PivotFields["Amount"].Orientation = PivotFieldOrientation.DataField; calculatedFieldTable.DataFields["Sum of Amount"].NumberFormat = "$#,##0_);($#,##0)"; //集計フィールドを追加します calculatedFieldTable.CalculatedFields.Add("Tax", "=IF(Amount > 1000, 3% * Amount, 0)"); //集計フィールドをデータフィールドとして設定します calculatedFieldTable.PivotFields["Tax"].Orientation = PivotFieldOrientation.DataField; calculatedFieldTable.DataFields["Sum of Tax"].NumberFormat = "$#,##0_);($#,##0)"; |
集計アイテムは、定数を含むカスタム数式を使用するか、ピボットテーブル内の他のアイテムを参照するピボットテーブルの項目です。集計アイテムを使用して、ソースデータにはない行または列フィールド領域をピボットテーブルに追加できます。
DioDocs for Excelでは、ICalculatedItems インタフェースは、特定のピボットテーブル内の集計アイテムのコレクションを表します。IPivotField.CalculatedItems メソッドを使用して、集計アイテムのコレクションを取得できます。集計アイテムをピボットテーブルに追加するには、ICalculatedItems インタフェースの Add メソッドを使用します。このメソッドは、集計アイテムの名前と数式をパラメータとして受け取ります。IPivotItem.Formula を使用して、集計アイテムの数式を設定することもできます。ICalculatedItems コレクションから集計アイテムを削除するには、対象フィールドの名前をパラメータとして受け取る Remove メソッドを使用します。ピボットキャッシュはすべての集計アイテムを管理するため、集計アイテムを変更すると、現在のワークブックで同じキャッシュを使用しているすべてのピボットテーブルに影響します。また、集計アイテムの追加、削除、または変更により、ピボットテーブルの更新がトリガーされます。
メモ: 次の場合に例外が発生します。
次のサンプルコードは、集計アイテムをピボットテーブルに追加する方法を示しています。
C# |
コードのコピー
|
---|---|
//指定したフィールドの集計アイテムを取得します ICalculatedItems countryCalcItems = calculatedItemTable.PivotFields["Country"].CalculatedItems(); ICalculatedItems productCalcItems = calculatedItemTable.PivotFields["Product"].CalculatedItems(); //数式を使用していくつかの集計アイテムを追加します countryCalcItems.Add("Oceania", "=Country[Australia]+Country[NewZealand]"); countryCalcItems.Add("America", "=Country[Canada]"); IPivotItem myPivotItem = countryCalcItems.Add("Europe", "=Country[France]"); //集計アイテムの数式を変更します myPivotItem.Formula = "=Country[France]+Country[Germany]"; //定数値を使用して集計アイテムを追加します productCalcItems.Add("IPhone 13", "=2500"); //CalculatedItemaのカウントを取得します Console.Write("Calculated Items count : " + countryCalcItems.Count); //集計アイテムを削除します countryCalcItems.Remove("America"); |
データを分析する際、実際の値ではなく計算により値を比較したい場合があります。たとえば、営業部門の従業員の業績を評価する方法について、従業員の目標に対する売上高、総売上高に対する売上高の割合、前月の売上高との比較など、様々なものがあります。このような計算を簡単に行うために、DioDocs for Excelには「計算の種類」オプションがあり、「親集計に対する比率」や「総計に対する比率」などの定義済みの数式を使用して、ピボットテーブルでカスタム計算を実行できるようになっています。
DioDocs for Excelでは、IPivotFieldインタフェースにCalculationプロパティがあり、PivotFieldCalculation列挙型の値を指定することで、定義済みの計算を設定することができます。 また、BaseFieldプロパティとBaseItemプロパティを使用して、計算を実行するための基準フィールドと基準フィールド項目をそれぞれ設定することができます。
基準値(オーストラリア)に対する比率を計算して表示する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
IPivotTable percentOfTable = percentOfSheet.PivotTables.Add(pivotCache, percentOfSheet.Range["A1"]); percentOfTable.PivotFields["Category"].Orientation = PivotFieldOrientation.RowField; percentOfTable.PivotFields["Product"].Orientation = PivotFieldOrientation.RowField; percentOfTable.PivotFields["Country"].Orientation = PivotFieldOrientation.ColumnField; percentOfTable.PivotFields["Amount"].Orientation = PivotFieldOrientation.DataField; //計算の種類、基準フィールド、基準フィールド項目を設定します IPivotField percentOfTableDataField = percentOfTable.DataFields["Sum of Amount"]; percentOfTableDataField.Calculation = PivotFieldCalculation.PercentOf; percentOfTableDataField.BaseField = "Country"; percentOfTableDataField.BaseItem = "Australia"; percentOfSheet.Range["A:I"].AutoFit(); |
大量のデータを使用する場合は、ピボットテーブルのさまざまな領域にフィールドを追加または移動してレイアウトを更新するときに、ピボットテーブルのパフォーマンスに影響が出る可能性があります。
DioDocs for Excelでは、DeferLayoutUpdateプロパティを使用して、レイアウトの更新を延期することでピボットテーブルのパフォーマンスを向上させることができます。DeferLayoutUpdateプロパティをtrueに設定すると、ピボットテーブル領域で変更を行った後にピボットテーブルレイアウトがすぐに再計算されるのではなく、すべてのフィールドが追加または移動された後のみに再計算されます。また、Updateメソッドを使用して、すべての変更を行った後にピボットテーブルの出力を更新することができます。
ピボットテーブルのレイアウト更新を延期する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//レイアウト更新を延期します pivottable.DeferLayoutUpdate = true; //ピボットテーブルフィールドを設定します var field_Category = pivottable.PivotFields["Category"]; field_Category.Orientation = PivotFieldOrientation.RowField; var field_Product = pivottable.PivotFields["Product"]; field_Product.Orientation = PivotFieldOrientation.ColumnField; var field_Amount = pivottable.PivotFields["Amount"]; field_Amount.Orientation = PivotFieldOrientation.DataField; //ピボットテーブルを更新します pivottable.Update(); |
ピボットテーブルでは、次のレイアウトと書式オプションが提供されています。
ピボットテーブルでさまざまなレイアウトと書式オプションを設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//レイアウトと書式オプションを設定します pivottable.PageFieldOrder = Order.OverThenDown; pivottable.PageFieldWrapCount = 2; pivottable.CompactRowIndent = 2; pivottable.ErrorString = "Error"; pivottable.NullString = "Empty"; pivottable.DisplayErrorString = true; pivottable.DisplayNullString = true; |
AutoSortメソッドを使用して、ピボットテーブルのデータフィールドを昇順または降順に並び替えることができます。
AutoSortFieldプロパティを使用して指定されたピボットテーブルフィールドを並べ替えるためのデータフィールドの名前を取得し、AutoSortOrderプロパティを使用してその並べ替え順序を取得することができます。また、IPivotItemインタフェースのPositionプロパティを使用して、フィールド内のアイテムの位置を取得または設定できます。
ピボットテーブルで「Product」フィールドを並べ替える方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//「Product」フィールド内のアイテムを並べ替えます
field_Product.AutoSort(SortOrder.Descending);
|
ピボットテーブルレポートは、さまざまな範囲から構成されています。ピボットテーブルの特定の範囲を取得するために、その基本構造を理解しておく必要があります。
以下では、ピボットテーブルの構造について説明しています。
DioDocs for Excelは、ピボットテーブルの詳細な範囲を取得して操作やスタイルを適用し、結果をより読みやすく区別できるようにするAPIを提供します。取得できる範囲は次のとおりです。
ピボットテーブルレポートで特定の範囲を取得し、そのスタイルを設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//詳細な範囲を取得して、そのスタイルを設定します foreach (var item in pivottable.PivotRowAxis.PivotLines) { if (item.LineType == PivotLineType.Subtotal) { item.PivotLineCells[0].Range.Interior.Color = Color.GreenYellow; } } |
次の画像は、上記コードのExcel出力を示します。
DioDocs for Excelでは、指定されたパラメータに従ってピボットテーブルのデータを取得する GETPIVOTDATA 関数を使用できます。この関数を使用すると、ピボットテーブルのレイアウトが変更された場合でも、常に正しいデータが返されます。
構文
=GETPIVOTDATA(data_field, pivot_table, [field1, item1, field2, item2],…)
GETPIVOTDATA 関数は、渡すパラメータに応じて、単一のセル値または動的配列を返すことができます。単一のセル値を取得するには、データフィールドの名前とピボットテーブルが必須パラメータです。フィールド名とアイテム名の組み合わせである第3パラメータはオプションです。しかし、動的配列を結果として取得する場合は、第3パラメータも必須であり、アイテム名は {"Canada","US","France"} のような配列または「A1:A3」のような範囲参照を設定することもできます。また、範囲にスピルされる動的配列を返すには、GETPIVOTDATA 関数の指定に IRange.Formula2 プロパティを使用する必要があります。なお、使いやすさのために、IRange.GenerateGetPivotDataFunction メソッドを使用して GETPIVOTDATA 関数を自動生成することもできます。ただし、IRange オブジェクトが単一のセルでない場合、GenerateGetPivotDataFunctionメソッドは null を返します。
単一のセルを返すGETPIVOTDATA関数を設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//GenerateGetPivotDataFunctionメソッドを使用して、選択したセルの数式を自動的に生成します var worksheet2 = workbook.Worksheets.Add(); worksheet.Range["H25"].Formula = worksheet.Range["G6"].GenerateGetPivotDataFunction(worksheet2.Range["A1"]); //GETPIVOTDATA 関数を使用して目的の結果を取得します worksheet2.Range["H24"].Formula = @"=GETPIVOTDATA(""Amount"",Sheet1!$A$1,""Category"",""Mobile"",""Country"",""Australia"")"; |
動的配列を返すGETPIVOTDATA関数を設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//Formula2 を GETPIVOTDATA と共に使用して、複数の値を取得します worksheet.Range["H10"].Formula2 = @"=GETPIVOTDATA(""Amount"",$A$1,""Category"",""Consumer Electronics"",""Country"",{""Canada"",""Germany"",""France""})"; |
平均値を超えているときにセルの色を設定して、ピボットテーブルレポートの最終行に条件付き書式を設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
//最終行に条件付き書式を設定します int rowCount = pivottable.DataBodyRange.RowCount; IAboveAverage averageCondition = pivottable.DataBodyRange.Rows[rowCount - 1].FormatConditions.AddAboveAverage(); averageCondition.AboveBelow = AboveBelow.AboveAverage; averageCondition.Interior.Color = Color.Pink; |
デフォルトでは、ピボットテーブルの日付/時刻列がグループ化されています。DioDocs for Excelでは、ピボットキャッシュを作成する前に、AutomaticGroupDateTimeInPivotTableプロパティをfalseに設定することで、このグループ化を無効にできます。
When AutomaticGroupDateTimeInPivotTable = False | When AutomaticGroupDateTimeInPivotTable = True (default) |
---|---|
C# |
コードのコピー
|
---|---|
//ピボットテーブルで日付/時刻フィールドの自動グループ化を無効にするには、falseに設定します workbook.Options.Data.AutomaticGroupDateTimeInPivotTable = false; |
DioDocs for Excelでは、IPivotItemインタフェースのShowDetailプロパティを使用して、ピボットテーブルフィールドのアウトラインを展開または折りたたむことができます。このプロパティのデフォルト値はTrueであり、ピボットテーブルフィールドを展開した状態で表示します。ただし、Falseに設定すると、折りたたんだ状態をで表示できます。
2つのピボットテーブルフィールドを折りたたんだ状態に設定する方法については、次のサンプルコードを参照してください。
C# |
コードのコピー
|
---|---|
worksheet.Range["A1:F16"].Value = sourceData; IPivotCache pivotCache = workbook.PivotCaches.Create(worksheet.Range["A1:F16"]); IPivotTable pivotTable = worksheet.PivotTables.Add(pivotCache, worksheet.Range["H7"], "pivottable1"); pivotTable.PivotFields["Product"].Orientation = PivotFieldOrientation.RowField; pivotTable.PivotFields["Country"].Orientation = PivotFieldOrientation.RowField; pivotTable.PivotFields["Category"].Orientation = PivotFieldOrientation.ColumnField; pivotTable.PivotFields["Amount"].Orientation = PivotFieldOrientation.DataField; //折りたたんだ状態を設定します pivotTable.PivotFields["Product"].PivotItems["Banana"].ShowDetail = false; pivotTable.PivotFields["Product"].PivotItems["Carrots"].ShowDetail = false; workbook.Save("CollapsePivotFields.xlsx"); |