[[20211127125046]] 『ピボットテーブルのデータを計算して表示する』(ちろ) >>BOT

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ピボットテーブルのデータを計算して表示する』(ちろ)

作業名とそれに対する作業時間が
秒表記で記載されたデータがあります

このデータをピボットで表にした際に
分単位で表示させたいのですが、ピボットを使う際にデータ自体に計算を加えて表示(秒/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 >


Sheet1
    |[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

Excel2010だとちょっと違うかも知れませんが、
集計フィールドを追加すれば可能です。
挿入-テーブル-ピボットテーブルで設計図が出たときに
分析-計算方法-フィールド/アイテム/セット-集計フィールドで
数式に =作業時間/60 として新しいフィールドを作成し、それでΣします。

マクロだと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

隠居Zさん、kazuoさん

遅くなってしまい申し訳ありません。
なるほど、マクロでも集計フィールドでも計算は可能なのですね。
せっかくなのでどちらの方法も試して今後のために勉強しておこうと思います。

ありがとうございました!
(ちろ) 2021/11/29(月) 14:11


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.