DioDocs for Excel
DioDocs for Excel
ピボットテーブルへのフィルタの追加
機能 > ピボットテーブル > ピボットテーブルへのフィルタの追加

DioDocs for Excelではピボットテーブルの値をフィルタ処理できます。IPivotItemインターフェイスのVisibleプロパティを使用して行フィールドまたはページを非表示に設定できます。また、IPivotFieldインターフェイスのPivotFiltersプロパティを使用して、IPivotFiltersインターフェイスのAddメソッドでパラメーターとして渡される PivotFilterType 列挙を使用して、ピボットテーブルのフィールドにラベル、値、または日付フィルタを追加できます。

さらに、DioDocs for ExcelはIPivotTableインターフェイスのAllowMultipleFiltersプロパティを提供し、ラベルフィルタと値フィルタを同時に同じピボットフィールドに追加できます。このプロパティのデフォルト値はtrueです。このプロパティをfalseに設定した後複数のフィルタを追加すると、後で追加されたフィルタしか使用されません。

メモ: AllowMultipleFiltersの値がtrueからfalseに変更されると、すべてのIPivotFieldに適応します。IPivotFieldにラベルフィルタと値フィルタの両方が設定されている場合、falseに変更されると両方のフィルタが破棄されます。

DioDocs for Excelは、フィルタを削除するためのClearLabelFilter、ClearValueFilter、および ClearAllFiltersメソッドも提供します。ClearLabelFilterはラベルフィルタを削除し、ClearValueFilterは値フィルタを削除します。ClearAllFiltersは、フィールドに追加されたすべてのフィルタを削除します。

メモ: Addメソッドを使用して2つのラベルフィルタまたは2つの値フィルタを同時に追加すると、2番目のフィルタが最初のフィルタに置き換わります。
       

メモ: IPivotFilterインターフェイスのプロパティのほとんどは読み取り専用ですが、WholeDayFilterプロパティは読み書き可能です。ただし、WholeDayFilterプロパティの値を変更しても、現在のピボットテーブルの更新はトリガーされません。したがって、フィルタ結果を更新するには、IPivotTableインターフェイスのUpdateメソッドまたはRefreshメソッドを呼び出す必要があります。

ピボットテーブルには、次の種類のフィルタを適用できます。

フィルタの適用

Visibleプロパティを使用して行フィールドまたはページを非表示にする方法については、次のサンプルコードを参照してください。

C#
コードのコピー
// Create a new workbook.
Workbook workbook = new Workbook();

// Add data for the pivot table.
object[,] sourceData = new object[,] {
{ "Order ID", "Product",               "Category",              "Amount", "Date",                    "Country" },
{ 1,          "Bose 785593-0050",      "Consumer Electronics",  4270,     new DateTime(2018, 1, 6),  "United States" },
{ 2,          "Canon EOS 1500D",       "Consumer Electronics",  8239,     new DateTime(2018, 1, 7),  "United Kingdom" },
{ 3,          "Haier 394L 4Star",      "Consumer Electronics",  617,      new DateTime(2018, 1, 8),  "United States" },
{ 4,          "IFB 6.5 Kg FullyAuto",  "Consumer Electronics",  8384,     new DateTime(2018, 1, 10), "Canada" },
{ 5,          "Mi LED 40inch",         "Consumer Electronics",  2626,     new DateTime(2018, 1, 10), "Germany" },
{ 6,          "Sennheiser HD 4.40-BT", "Consumer Electronics",  3610,     new DateTime(2018, 1, 11), "United States" },
{ 7,          "Iphone XR",             "Mobile",                9062,     new DateTime(2018, 1, 11), "Australia" },
{ 8,          "OnePlus 7Pro",          "Mobile",                6906,     new DateTime(2018, 1, 16), "New Zealand" },
{ 9,          "Redmi 7",               "Mobile",                2417,     new DateTime(2018, 1, 16), "France" },
{ 10,         "Samsung S9",            "Mobile",                7431,     new DateTime(2018, 1, 16), "Canada" },
{ 11,         "OnePlus 7Pro",          "Mobile",                8250,     new DateTime(2018, 1, 16), "Germany" },
{ 12,         "Redmi 7",               "Mobile",                7012,     new DateTime(2018, 1, 18), "United States" },
{ 13,         "Bose 785593-0050",      "Consumer Electronics",  1903,     new DateTime(2018, 1, 20), "Germany" },
{ 14,         "Canon EOS 1500D",       "Consumer Electronics",  2824,     new DateTime(2018, 1, 22), "Canada" },
{ 15,         "Haier 394L 4Star",      "Consumer Electronics",  6946,     new DateTime(2018, 1, 24), "France" },
};

// Access first worksheet.
IWorksheet worksheet = workbook.Worksheets[0];

// Add values to the range.
worksheet.Range["G1:L16"].Value = sourceData;

// Set column width.
worksheet.Range["G:L"].ColumnWidth = 15;

// Create pivot cache.
var pivotcache = workbook.PivotCaches.Create(worksheet.Range["G1:L16"]);

// Add data to the pivot table.
var pivottable = worksheet.PivotTables.Add(pivotcache, worksheet.Range["A1"], "pivottable1");

// Set number format.
worksheet.Range["J1:J16"].NumberFormat = "$#,##0.00";

// Configure pivot table's fields.
var field_product = pivottable.PivotFields[1];
field_product.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields[3];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

var field_Country = pivottable.PivotFields[5];
field_Country.Orientation = PivotFieldOrientation.PageField;

// Add row field filter.
field_product.PivotItems["Bose 785593-0050"].Visible = false;
field_product.PivotItems["Haier 394L 4Star"].Visible = false;
field_product.PivotItems["Iphone XR"].Visible = false;

// Add page filter.
field_Country.PivotItems["United States"].Visible = false;
field_Country.PivotItems["Canada"].Visible = false;

worksheet.Range["A:B"].EntireColumn.AutoFit();
            
// Save WorkBook.
workbook.Save("FilterPivotTable.xlsx");

ラベルフィルタの適用

「mi」を含む商品名に基づいて製品をフィルタする方法については、次のサンプルコードを参照してください。

C#
コードのコピー
// Configure pivot table's fields.
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.ColumnField;

var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields["Amount"];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

// Filter for products where the product name contains 'mi'.
field_Product.PivotFilters.Add(PivotFilterType.CaptionContains, "mi");

worksheet.Range["A:D"].EntireColumn.AutoFit();

// Save the workbook.
workbook.Save("PivotLabelFilter.xlsx");

値フィルタの適用

次のサンプルコードは値に基づいて製品をフィルタ処理します。

C#
コードのコピー
// Configure pivot table's fields.
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.ColumnField;

var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields["Amount"];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

// Filter for products with sales volume greater than 7000.
field_Product.PivotFilters.Add(PivotFilterType.ValueGreaterThan, 7000, options: new PivotFilterOptions { AppliedDataField = 0 });

worksheet.Range["A:D"].EntireColumn.AutoFit();

// Save the workbook.
workbook.Save("PivotValueFilter.xlsx");
メモ: 値フィルタを使用する場合、どの DataField でフィルタするかを指定するために、PivotFilterOptions クラスの AppliedDataField プロパティを設定する必要があります。

日付フィルタの適用

指定された2つの日付の間の日付を持つ製品をフィルタ処理する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
// Configure pivot table's fields.
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.ColumnField;

var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.RowField;

var field_Date = pivottable.PivotFields["Date"];
field_Date.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields["Amount"];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

// Filter for products between two dates.
field_Date.PivotFilters.Add(PivotFilterType.DateBetween, new DateTime(2018, 1, 1), new DateTime(2018, 1, 15));

worksheet.Range["A:D"].EntireColumn.AutoFit();

// Save the workbook.
workbook.Save("PivotDateFilter.xlsx");

トップ10フィルタの適用

次のサンプルコードは値に基づいてトップ12の製品をフィルタ処理します。

C#
コードのコピー
// Configure pivot table's fields.
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.ColumnField;

var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields["Amount"];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

// Filter for top 12 products.
field_Product.PivotFilters.Add(PivotFilterType.Count, 12, options: new PivotFilterOptions { IsTop10Type = true });

worksheet.Range["A:D"].EntireColumn.AutoFit();

// Save the workbook.
workbook.Save("PivotTopTenFilter.xlsx");

複数のフィルタの適用

次のサンプルコードはラベルフィルタと値フィルタの両方を使用して製品をフィルタ処理します。

C#
コードのコピー
// Configure pivot table's fields.
var field_Category = pivottable.PivotFields["Category"];
field_Category.Orientation = PivotFieldOrientation.ColumnField;

var field_Product = pivottable.PivotFields["Product"];
field_Product.Orientation = PivotFieldOrientation.RowField;

var field_Amount = pivottable.PivotFields["Amount"];
field_Amount.Orientation = PivotFieldOrientation.DataField;
field_Amount.NumberFormat = "$#,##0.00";

// Allow adding label filter and value filter to a field at the same time.
pivottable.AllowMultipleFilters = true;

// Filter for products with sales volume greater than 7000.
field_Product.PivotFilters.Add(PivotFilterType.ValueGreaterThan, 7000, options: new PivotFilterOptions { AppliedDataField = 0 });

// Filter for products where the product name contains 'mi'.
field_Product.PivotFilters.Add(PivotFilterType.CaptionContains, "mi");

worksheet.Range["A:D"].EntireColumn.AutoFit();

// Save the workbook.
workbook.Save("MultipleFilter.xlsx");