• 締切済み

ピボットテーブル内のフィールド値を求める計算式

セル位置(行や列)を引数に、別の表にあるセルの値をINDIRECT関数で 参照するような感じと同様に、ピボットテーブル中のフィールド値の種別 を参照する計算式の書き方が分かれば教えてください。 図のように、ピボットテーブル内のフィールド値の中に、 複数の重複した要素がある場合に、 ピボットテーブルの行番号を指定して、その行にある値は INDIRECTで求められますが、フィルターの見出しにあたる (この図の例では「型式」のフィールド区分)を求める 計算式(あるいは計算式の組み合わせ)が分かりませんでした。 ピボットテーブルが固定されていれば、行列番号が変わらない 前提で方法はありそうですが、 ピボットテーブルのフィールドの順番を入れ替えても (この図の例では区分と型式を入れ替えても) 大丈夫なように、汎用的な式が書ければと思っています。 よろしくお願いします。 (1)重複した要素のある元データ表 (2)行フィルターに複数のテーブル条件を指定 (3)できがったピボットテーブル (4)行番後を指定して、INDIRECTで値を求めるのと同様、行フィルターの元のフィールドを計算式で求められるか。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

既成の関数で取得する方法はわかりません。m(_ _)m もし仮に、 型式別、区分別の数値合計のリストがあればOK、 あるいは、 型式別、区分別の数値合計のリストがあれば、 そこから期待の資料を作ることができる。 かつ、 VBAを持ち込んでよい。 ということであれば、 ピボットテーブルを使う代わりに 以下のコードで集計する対応はいかがでしょうか? なお、 Sheet1が集計元、Sheet3が集計先のシートの場合、 かつ、集計元テーブルがB1から始まっている場合のコードです。 Option Explicit Sub SampleSQL()  Dim cn As Object  Dim rs As Object  Dim wkSQL As String  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName  With ThisWorkbook.Sheets("Sheet3")      .Rows("2:65000").ClearContents '出力先クリアー      wkSQL = ""      '以下SQL文組み立て   wkSQL = wkSQL & "SELECT [型式],[区分],sum([数値])"   wkSQL = wkSQL & "FROM [Sheet1$B2:Z65000]" & vbCrLf   wkSQL = wkSQL & "GROUP BY [区分],[型式]" & vbCrLf   wkSQL = wkSQL & "order BY [区分],[型式]" & vbCrLf      rs.Open wkSQL, cn   'SQL文実行      .Cells(2, 2).CopyFromRecordset rs   '結果セットを格納  End With    rs.Close           '以下、後処理  Set rs = Nothing  cn.Close  Set cn = Nothing   End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

GETPIVOTTABLE関数のことかな。 このことなら、Googleで照会のこと。たくさん記事があります。 例えば下記の記事など。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/getpivotdata.htm

関連するQ&A

専門家に質問してみよう