• ベストアンサー

ピポットテーブルで個数どうしの割合の出し方

図のようにデータから個数を出し、その個数どうしから割合を出すやり方を教えてください。 実際には他にもいろいろなデータがあるので、ピポットテーブルにもたくさんの項目がある状態です。

質問者が選んだベストアンサー

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

ピボット(pivot)テーブルでは期待のことはできないと思います。 少なくとも私にはできません。 私だったら、VBAとSQLを使って実現します。 以下がサンプルコードです。 シート名がDataとなっている前提のコードです。 Option Explicit Sub Sample()    Dim SQL As String  Dim cn As Object  Dim rs As Object  Dim i As Long  Dim DRange As Range    'SQL全文を組み立て  SQL = "SELECT [動物]," & vbCrLf  SQL = SQL & "count([動物]) as [頭数]," & vbCrLf  SQL = SQL & "count([死亡原因]) as [死亡数]," & vbCrLf  SQL = SQL & "[死亡数]/[頭数] as [死亡率]" & vbCrLf  SQL = SQL & "FROM [" & "Data" & "$A1:B9]" & vbCrLf  SQL = SQL & "GROUP BY [動物]" & vbCrLf  SQL = SQL & "ORDER BY [動物]" & vbCrLf    'SQLを実行  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.Path & "\" & ThisWorkbook.Name  rs.Open SQL, cn    '出力先を定義してクリアー  With ThisWorkbook.Sheets("Data")   Set DRange = Range(.Cells(3, 4), .Cells(7, 9))  End With  DRange.ClearContents    '列名を出力  For i = 0 To (rs.Fields.Count - 1)   DRange.Cells(1, i + 1).Value = rs.Fields(i).Name  Next    '結果セットを出力  DRange.Cells(2, 1).CopyFromRecordset rs    '後処理  rs.Close  Set rs = Nothing  cn.Close  Set cn = Nothing End Sub

kanzakifujisawa
質問者

お礼

HohoPapa様 詳しく答えてくださってありがとうございます。 ピポットテーブルではできないのですね。 ありがたくこちらのコードを使わせていただきます。

その他の回答 (1)

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

G4セルに、=F2/E2 と記入して下にドラッグコピーしてみてください。

kanzakifujisawa
質問者

お礼

回答ありがとうございます。 言葉が足りなくて申し訳ございませんが、 ピポットテーブルのデータとして行うことはできないでしょうか。

関連するQ&A