- 締切済み
ピボットテーブル内のフィールド値を求める計算式
セル位置(行や列)を引数に、別の表にあるセルの値をINDIRECT関数で 参照するような感じと同様に、ピボットテーブル中のフィールド値の種別 を参照する計算式の書き方が分かれば教えてください。 図のように、ピボットテーブル内のフィールド値の中に、 複数の重複した要素がある場合に、 ピボットテーブルの行番号を指定して、その行にある値は INDIRECTで求められますが、フィルターの見出しにあたる (この図の例では「型式」のフィールド区分)を求める 計算式(あるいは計算式の組み合わせ)が分かりませんでした。 ピボットテーブルが固定されていれば、行列番号が変わらない 前提で方法はありそうですが、 ピボットテーブルのフィールドの順番を入れ替えても (この図の例では区分と型式を入れ替えても) 大丈夫なように、汎用的な式が書ければと思っています。 よろしくお願いします。 (1)重複した要素のある元データ表 (2)行フィルターに複数のテーブル条件を指定 (3)できがったピボットテーブル (4)行番後を指定して、INDIRECTで値を求めるのと同様、行フィルターの元のフィールドを計算式で求められるか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
既成の関数で取得する方法はわかりません。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)
GETPIVOTTABLE関数のことかな。 このことなら、Googleで照会のこと。たくさん記事があります。 例えば下記の記事など。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/getpivotdata.htm