• 締切済み

Excel VBA PivotItemのことで

添付画像のようなデータを使用し、ピボットテーブルを作成し、それを下記のようなマクロでフィールド:flgのPivotItemがどのようになっているか見てみると、添付画像の下部のような結果を示し、同じ内容となっています。 項目:figに対し、数値の1とテキストの1が混在しているデータを扱うさい、どのようにしてPivotItemの判別をすればよいのでしょうか? Sub tes() Set a = ActiveSheet.PivotTables(1).PivotFields("flg").PivotItems Set p1 = a(1) Set p2 = a(2) Set p3 = a(3) End Sub

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ご質問で正に書かれているようにIndexで識別するか,若しくは敢えて言えばlabelrangeで判別する事になります。 一意のアイテムについては pivotitems("(空白)") などのようにcall by name出来ますが,名称がダブってるアイテムについては不可です。 もちろん,とりあえず可能なindexなどで取得してcaptionを書き換え一意のアイテムにしてしまえば,残った方はpivotitems("1")で取得できるようになります。

mtgoogoo
質問者

お礼

回答ありがとうございます。 質問したようなデータを、毎回他の部門からいただいて処理をするため、マクロの中で判別できるような方法がないかを探しておりました。

関連するQ&A

  • エクセルマクロの条件コード

    お世話になります。自社便だけのデータ抽出のため下のようなマクロにしたところ、データ上にどれか1便(例えば「西濃便」)がないとエラーとなります。 全ての便が揃っていなくともエラーにならないようにするためには、どうしたら良いでしょうか? With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("総数") .Orientation = xlDataField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("便 名") .PivotItems("ヤマト便").Visible = False .PivotItems("佐川便").Visible = False .PivotItems("日通便").Visible = False .PivotItems("西濃便").Visible = False .PivotItems("チャーター便").Visible = False End With Application.CommandBars("PivotTable").Visible = False End Sub

  • ピボットテーブルをVBAで管理

    ご教授下さい。 ・車両管理をしており、データの集計をとるため、ピボットテーブルを使用しています。 ・データは(日付)(車番)(品番)(品目)(数量)となっていまして、入力する際はフォームで記入しています。 ・品目は10個あり、シート上に品番表を作り、LOOKUP関数で参照しています。 (品番を入力すれば品目が自動転記される形です。) ・品目(品番)は使われない場合もあります。(ここでつまづいてます。) 品目毎にシートを分けて、10個ピボットテーブルを作っていて、 全品目を使用している場合問題はないのですが、 9品目しか使用していない場合でピボットアイテムエラーが出てしまいます。この部分を回避する策はありませんでしょうか? また、テーブルを10個に分けているため、コード自体もかなり長くなっています。もっと簡素化できる方法があれば併せて教えていただければと思います。 コードも載せておきます。(これと同様のものが10回ループしてます。) '軽油 Dim strDataRng1 As String strDataRng = ActiveWorkbook.Worksheets("燃料").Range("A1").CurrentRegion.Address(, , xlR1C1) ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'燃料'!" & strDataRng).CreatePivotTable TableDestination:="", _ TableName:="軽油", DefaultVersion:=xlPivotTableVersion10 With ActiveSheet.PivotTables("軽油").PivotFields("車番") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("軽油").AddDataField ActiveSheet.PivotTables( _ "軽油").PivotFields("数量"), "合計 / 数量", xlSum With ActiveSheet.PivotTables("軽油").PivotFields("日付") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("軽油").PivotFields("品目") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("軽油").PivotFields("品目") .PivotItems("軽油").Visible = True .PivotItems("灯油").Visible = False .PivotItems("ガソリン").Visible = False .PivotItems("ハイオク").Visible = False .PivotItems("オイル").Visible = False .PivotItems("エレメント").Visible = False .PivotItems("クーラント").Visible = False .PivotItems("バッテリー液").Visible = False .PivotItems("洗車").Visible = False .PivotItems("電球").Visible = False End With

  • 複数のピボットテーブルのフィルタを一括選択

    マクロ(VBA2007)で、作業中の1つのシートにある、複数のピボットテーブルのレポートフィルターを一括で選択しようとしております。以下のマクロでは”ピボットテーブル1”と名前のついたピボットしか操作できませんでした。複数のピボットを一括で選択する方法を教えていただけますか?(メーカー名がA、B、Cとあるフィルターです) ******************* Sub try()   Dim pf As PivotField   Dim p As PivotItem   Set pf = ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("メーカー")   pf.Orientation = xlPageField   pf.ClearAllFilters   For Each p In pf.PivotItems     Select Case p.Value     Case "A", "C" '表示アイテム名をカンマ区切りで指定     Case Else       p.Visible = False     End Select   Next End Sub *********************** よろしくお願いいたします。

  • Excel VBA:

    A1~AB11542 (先頭はタイトル行) の表をマクロでピボットテーブルを作りたいです。データを追加して範囲が変わっても、ピボットテーブルの範囲が変わってくれません。下記のマクロの意味が分からないのですが、どう修正すればいいのでしょうか。お願いします。 Range("A1").Select Selection.CurrentRegion.Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'200804~累計'!R1C1:R10501C28").CreatePivotTable TableDestination:="", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveWorkbook.ShowPivotTableFieldList = True With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入先名称") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入検収月") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("合価"), "合計 / 合価", xlSum ActiveSheet.Name = "月別集計" ActiveWorkbook.ShowPivotTableFieldList = False

  • Withステートメントの使い方

    プログラムの中で単一のシートやセルなど一つの処理内容 に対して一連の処理をする時「With」ステートメントで ひとくくりで記述できます。 と参考書やwebサイトで見ました。 とりあえず自力で作成した構文は完璧では有りませんが 「With」ステートメントを使えるようになりました。 さて以下の2種類の構文ですがマクロの記録で作成されています。 これを簡素化しようと思ったのですが すでにWith~End Withが散乱しています。 これはもう纏めるのは無理なのでしょうか? 私が思うに同じ単語が何回も出てくるので もう少し簡素化できるのではと挑戦しましたが 誤動作になってしまいます。 すでにWith~End Withでくくられていますので そのくくりはやはり崩すと駄目なのでしょうか? くくり内の2行→1行にする程度が限度でしょうか? これはどのようにすれば簡素化できるのか コツを教えてください。 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("順番") .Orientation = xlColumnField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("区分") .Orientation = xlColumnField .Position = 2 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("区分名") .Orientation = xlColumnField .Position = 3 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品番") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品名") .Orientation = xlRowField .Position = 3 End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("棚番") .Orientation = xlRowField .Position = 4 End With (省略) With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品名") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("棚番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("順番") .PivotItems("(空白)").Visible = False End With ActiveWindow.SmallScroll ToRight:=3 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("親品番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("親品名") .PivotItems("(空白)").Visible = False End With

  • ピボットテーブルのマクロに関して

    ピボットテーブルのマクロを組む際に、必要な項目だけを表示させたいのですが、うまく行きません。 私は、マクロを学び始めて1カ月で、まだよくわかっていません。 下の例の場合 --------------------------------------------------------------- Sub Macro1() ' ' Macro1 Macro ' ' Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "データ!R1C1:R255C6", Version:=xlPivotTableVersion10).CreatePivotTable _ TableDestination:="Sheet2!R3C1", TableName:="ピボットテーブル2", DefaultVersion _ :=xlPivotTableVersion10 Sheets("Sheet2").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("課名") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("地区名") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("売上額"), "データの個数 / 売上額", xlCount With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("課名") .PivotItems("営業第1課").Visible = False .PivotItems("営業第4課").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("地区名") .PivotItems("いなべ町").Visible = False .PivotItems("海南町").Visible = False .PivotItems("吉野川町").Visible = False .PivotItems("魚津町").Visible = False .PivotItems("篠山町").Visible = False .PivotItems("小諸町").Visible = False .PivotItems("小野田町").Visible = False .PivotItems("西予町").Visible = False .PivotItems("石垣町").Visible = False .PivotItems("滝川町").Visible = False .PivotItems("東根町").Visible = False .PivotItems("南足柄町").Visible = False .PivotItems("日南町").Visible = False .PivotItems("萩町").Visible = False .PivotItems("八日町町").Visible = False .PivotItems("浜田町").Visible = False .PivotItems("府中町").Visible = False .PivotItems("本荘町").Visible = False End With End Sub --------------------------------------------------------------- 「営業第2課・営業第3課」を表示させるために、一度、課名を全部 表示させてから「営業第1課・営業第4課」を非表示にしています。 そして、町に関しても、いったん全部を表示させてから、不必要な町を 非表示にしています。 これを、表示したい項目だけ選択できるようなマクロに修正は できないでしょうか。 実際のデータは会社から持ち出せないようになっていて、 わかりづらかったら済みません。

  • ピボットテーブルの操作をマクロの記録で

    退職者が残したエクセルファイルがあります。 ピボットテーブル生成の操作をマクロの記録を使って自動化したようです。 私はピボットテーブルを一度も操作した事が有りません。 ですがマクロの記録で作られた構文を VBEのF8キーで1行づつ動作させると画面が変化していくので どういう操作をしてマクロの構文が出来たのかは分かりました。 ですが以下の部分だけ画面上の変化が無く何をどうすると この構文が作成されるのかまったく分かりません。 ピボットテーブルに関する件を検索しようにも マクロを使わない手操作でどういう操作、どういう機能を使ったのかが わからないので検索する事も出来ません。 ピボットテーブルウィザードから ワークシートが挿入されてテーブルを作成する際に どういう操作を行うとこのような構文が出来るのか 教えてください。お願いします。 With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("仕入先") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品名") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("棚番") .PivotItems("(空白)").Visible = False End With With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("番号") .PivotItems("(空白)").Visible = False End With

  • 変数にするとエラーになる理由は?

    エクセル2007のピボットテーブルをvbaで操作しています。 vbaの仕組みについて分からないので教えてください。 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("年").PivotItems("2008").ShowDetail = True だとエラーにならずにピボットテーブルが開かれるのに Dim intYear As Long intYear = 2008 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("年").PivotItems(intYear).ShowDetail = True だとエラーになってしまいます。 エラー内容は 実行時エラー '1004': PivotTableクラスのPivotFieldsプロパティを取得できません。 です。 変数にするとエラーになる理由は何でしょうか?

  • アクセスVBAからエクセルの操作

    おはようございます。 アクセスVBAを使用し作成しているのですが、ここ数 日悩んでしまっている事があります。ご教授頂ける と幸いです。宜しくお願い致します。 <悩み・相談> アクセス側からエクセルに出力させた際、オートにて、ピボットテーブルを作成しようと考えております。毎月のデータ件数が違う為(月毎にピボットテ ーブル作成のセル範囲が変わります)、どのように VBAを組めば良いのか悩んでいます。 今現状のVBは、下記の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'受注データ(確定)'!R1C1:R7231C31").CreatePivotTable TableDestination:="", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").PrintTitles = True ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("処理区分名", _ "地区", "集計コード", "病院名", "データ"), ColumnFields:="大分類名", PageFields:=Array("担当グループ" _ , "集計地区", "担当者", "中分類") With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("本・個") .Orientation = xlDataField .Position = 1 End With 毎月のデータ件数が、7231で終われば良いのですが、毎月データ件数がランダムな為、上のVBでは使えないですよね??データ件数に関係なく、ピボットテーブルを自動で作成するには、どこをどのように変えたら宜しいでしょうか?? お手数ですが、ご教授頂けると幸いです。

  • Excelマクロでピポットテーブルを作りたい

    マクロを使ってピポットテーブルを作ろうとしていますが、エラーメッセージがあちこちに出てしまい何が悪いのかわかりません。どうかご助言の程、何卒よろしくお願い申し上げます。 Sub 名別_M() ' ' 名別_M Macro ' Range("A2").Select With Worksheets.Add() '新しいシートを作成し、名前を「名別」にする処理 .Name = "名別" Dim NewSheetName As String NewSheetName = InputBox("新しいシート名を入力ください") ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ NewSheetName!R1C1:R95C18,Version:=xlPivotTableVersion15). CreatePivotTable TableDestination:="名別!R3C1", TableName:="ピボットテーブル1" _ , DefaultVersion:=xlPivotTableVersion15 End With '「名別」にした最後の処理 Sheets("名別").Select Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("UserName") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル1").PivotFields("作業時間"), "合計 / 作業時間", xlSum Range("A3").Select ActiveSheet.PivotTables("ピボットテーブル1").CompactLayoutRowHeader = "UerName" Rows("1:2").Select Selection.Delete Shift:=xlUp Range("E26").Select End Sub

専門家に質問してみよう