[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ピボットテーブルのデータを計算して表示する』(ちろ)
作業名とそれに対する作業時間が
秒表記で記載されたデータがあります
このデータをピボットで表にした際に
分単位で表示させたいのですが、ピボットを使う際にデータ自体に計算を加えて表示(秒/60=分表記)させることは可能でしょうか?
ピボットの値フィールド設定で計算するなども調べたのですが比率などでしか計算することができず困っております。
データ自体を分表記に変えるしか術はないでしょうか。
いい案がございましたらご教示いただきたく思います。
データ
名前 作業名 作業時間
Aさん B作業 3000(秒)
Aさん C作業 6000(秒)
Bさん A作業 4500(秒)
出したい形
A作業 B作業 C作業
Aさん 0(分) 50(分)100(分)
Bさん 75(分) 0(分) 0(分)
< 使用 Excel:Excel2010、使用 OS:Windows10 >
|[A] |[B] |[C]
[1]|名前 |作業名|作業時間
[2]|Aさん|B作業 | 3000
[3]|Aさん|C作業 | 6000
[4]|Bさん|A作業 | 4500
新たにシート名 TMPXXX、 PVT の2シートが作成されますので
同名のシートが有る場合は随時、要変更です。
こそっと情報をコピペで拝借して、分に換算して作成後、削除しています
元情報はコピーするだけですので、変化は有りません。 A(^^;
一案ですので、何かの足しにでも。。。思い通りにならない場合はゴミ箱ポイ
お願い致します。でわ。。。m(__)m
Option Explicit
Sub OneInstanceA()
Dim i As Long
Dim r As Range
Dim v() As Variant
Dim tWb As Workbook
Dim wS1 As Worksheet
Dim wSp As Worksheet
Dim pC As Object
Dim pT As Object
Set tWb = ThisWorkbook
If Not Evaluate("=ISREF(TMPXXX!A1)") Then Sheets.Add.Name = "TMPXXX"
Set wS1 = Worksheets("TMPXXX")
Worksheets("Sheet1").Cells(1).CurrentRegion.Copy wS1.Cells(1)
Set r = wS1.Cells(1).CurrentRegion
v = r.Value
For i = 2 To r.Rows.Count
r(i, 3) = Application.Round(r(i, 3) / 60, 0)
Next
If Not Evaluate("=ISREF(PVT!A1)") Then Sheets.Add.Name = "PVT"
Set wSp = Worksheets("PVT")
wSp.Cells.Delete
Set pC = tWb.PivotCaches.Add(xlDatabase, wS1.Name & "!" & r.Address)
Set pT = pC.CreatePivotTable(wSp.Name & "!r3c3", TableName:="PBXA1")
With pT
With .PivotFields("名前")
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields("作業名")
.Orientation = xlColumnField
.Position = 1
End With
.AddDataField .PivotFields("作業時間"), "分単位 / 合計", xlSum
wSp.PivotTables("PBXA1").TableStyle2 = "PivotStyleMedium16"
End With
tWb.ShowPivotTableFieldList = False
Application.DisplayAlerts = False
wS1.Delete
Application.DisplayAlerts = True
Erase v
wSp.Activate
End Sub
(隠居Z) 2021/11/27(土) 16:46
マクロだと2010でも動くと思います。(excel2016)
Sub test()
Const Newf = "作業時間(分)" '新しいフィールド名
Dim src As Range
Set src = ActiveSheet.Range("A1").CurrentRegion 'Range("A1"):データの左上に変更のこと
With ActiveWorkbook.PivotCaches.Create(xlDatabase, src.Address(, , xlR1C1, True)) _
.CreatePivotTable(src.Offset(, src.Columns.Count + 1))
.CalculatedFields.Add Newf, "=作業時間/60", True
With .PivotFields(Newf)
.Orientation = xlDataField
.NumberFormat = "0(""分"")" '(分)表記
End With
.PivotFields("名前").Orientation = xlRowField
.PivotFields("作業名").Orientation = xlColumnField
End With
End Sub
(kazuo) 2021/11/27(土) 22:59
おはようございます ^^ なるほど、なるほど、とても 勉強になります。( ..)φメモメモ ちろ さん kazuoさんのコードを参考にして下さい 私のは、ごりおし、の力技的なコードでした。反省。。。m(_ _)m ありがとうございます。 ひとつ、賢くなりました。←。。。あやしい。。。^^; でわ (隠居Z) 2021/11/28(日) 07:05
遅くなってしまい申し訳ありません。
なるほど、マクロでも集計フィールドでも計算は可能なのですね。
せっかくなのでどちらの方法も試して今後のために勉強しておこうと思います。
ありがとうございました!
(ちろ) 2021/11/29(月) 14:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.