プチIT化 PR

【対処法】PivotFieldクラスOrientationプロパティを設定できない時は?

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、わたあめです。今日は、ピボットテーブルをExcelマクロで操作している時に出会ったエラーについての記事です。

ピボットテーブルの列フィールドを削除(非表示)にしようとしたところ、以下のエラーが出ました。

実行時エラー'1004'
PivotFieldクラスのOrientationプロパティを設定できません。

このエラーについて、まとめていきます。それでは、いってみましょう!

事象詳細と原因

事象詳細:Orientationプロパティが設定できない

以下のようなExcelマクロで、とあるフィールドを非表示にしようとOrientationプロパティを設定しようとしていました。

ActiveSheet.PivotTables("ピボットテーブル名").PivotFields("フィールド名").Orientation = xlHidden

ですが、実行すると冒頭に記載したエラーが出て、マクロが途中で止まってしまいました。

実行時エラー'1004'
PivotFieldクラスのOrientationプロパティを設定できません。

原因:集計フィールドだから

集計フィールドにOrientationプロパティの設定をしようとするとエラーが出るようです。

集計フィールドとは?

集計フィールドとは、計算(数式を設定)することができるフィールドです。

例えば、手動で追加する場合、以下の手順で追加できます。

  1. ピボットテーブルを選択>[分析]タブをクリック
  2. [計算方法]欄>[フィールド/アイテム/セット]をクリック>[集計フィールド]をクリック
  3. [集計フィールドの挿入]画面で数式が設定ができます
    集計フィールドの数式設定

数式を記載することで、特定のフィールド同士の演算ができます。これが集計フィールドです。

ちなみに、VBAマクロで集計フィールドを追加する場合、"CalculatedFields.Add"を利用して以下のように記載します。(サンプルマクロ)

ActiveSheet.PivotTables("ピボットテーブル名").CalculatedFields.Add "計", "=フィールド1 + フィールド2", True
ActiveSheet.PivotTables("ピボットテーブル名").PivotFields("計").Orientation = xlDataField

この集計フィールドのOrientationプロパティを利用(設定)しようとするとエラーが出ました。

困った人
困った人
では、マクロではフィールドを削除できないの?

と思いましたが、フィールドを非表示ではなく削除することでやりたいことが実現できました。対処法を次章にまとめていきますね。

対処:フィールドを非表示ではなく削除する

マクロで列フィールドを非表示にするには、OrientationプロパティをxlHiddenで非表示にするのではなく、フィールド自体を削除してしまえばエラーは出ませんでした。

非表示にする場合のサンプルマクロ(集計フィールドの非表示にしようとした場合、エラーとなる)は以下です。

ActiveSheet.PivotTables("ピボットテーブル名").PivotFields("フィールド名").Orientation = xlHidden

これでは冒頭のエラーが出ます。エラーの出ない、フィールド自体を削除する場合のサンプルマクロは以下です。

ActiveSheet.PivotTables("ピボットテーブル名").PivotFields("フィールド名").Delete

注意点:非表示と削除の違い

今回、非表示と削除ではどう違うのか?を解説していきたいと思います。

ピボットテーブルフィールド非表示と削除の違い

上図のように、非表示はフィールドのチェックが外れた状態で一覧には残ります削除はフィールド自体が消えてしまいます。ですので、マクロで組む場合、削除すればエラーはでなくなりますが、フィールド自体も消えてしまうので扱いには注意が必要ということは念頭に置いておいてください。

さいごに

いかがだったでしょうか?マクロ作りのエラー解消の参考に、少しでもお役立ちできていれば幸いです。それでは、また!