[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ピボットグラフ』(てんてん)
どなたかお教えいただきたいのですが
ピボットテーブルからピボットグラフにて職員の人事考課のデータ報告書
の作成を考えているのですが、部署ごとに可変式するとした場合に
人数分のレーダーパラメータ形式のグラフを一枚の紙に部署ごとに配置して
部署が変わればグラフの数も変更するようなデータを作りたいと思っております
その様なことは可能でしょうか? 一つのグラフですと今のところレーダデータは複数作成できない為、グラフ自体を参照セルあるいはスライサーで増減コントロールしたいです
< 使用 Excel:Office365、使用 OS:unknown >
ピボットテーブルだと、 一つのレーダーチャートに複数人のデータを系列として含む、 一つのレーダーチャートが作られるはずです。
仮に対象を一人に絞ったとしても、 レーダーチャートを複数枚並列的に自動作成することはできないのでは?
また、スライサーは一つのグラフの視点を変えていくもののようなので、 あくまでもグラフは一つでしょう。
人数分のレーダーチャートを作るなら、ピボットグラフを忘れたほうがいいかもしれませんね。 (γ) 2022/09/30(金) 16:11
(マナ) 2022/09/30(金) 17:20
.ChartObjects.Add でやってみたのですが、初期化[前回の作成した画像化グラフ等削除]時 少しトラブっています。ごり押しで、解決は出来るのですが 心のどこかに不安が残っています。( ̄▽ ̄) ごり押し=エラーが出て削除出来ないのですが、出来るまで エラーを無視して繰り返し削除出来るまで、頑張るよ〜な ロジックになっています。。。^^; m(_ _)m Err.Description=指定したコレクションに対するインデックスが境界を超えています。 Err.Number=-2147024809 Option Explicit Sub OneInstanceMain() Const zProgramID As String = "IJ00500.xlsm" Dim ztb As Workbook Dim urr As Range Dim v() As Variant Dim i As Long Dim j As Long Dim x As Long Dim y As Long Dim r As Range Dim crr As Range Dim prr As Range Dim pc As Object Dim ch As Object Dim zD As Object Dim mk() As Variant Dim t As Double t = Timer Set ztb = Workbooks(zProgramID) With ztb.Worksheets("Sheet1") Do i = i + 1 If sHapesDelete(ztb) Then Exit Do If i Mod 32 = 0 Then DoEvents Loop i = 0 Do i = i + 1 If cHartObjectsDelete(ztb) Then Exit Do If i Mod 32 = 0 Then DoEvents Loop i = 0 Set zD = CreateObject("Scripting.Dictionary") Set r = .Cells(1).CurrentRegion v = r.Value For i = 2 To UBound(v, 1) zD(v(i, 2)) = Empty Next If zD.Count = 0 Then End mk = zD.keys y = 15: x = 1 For i = 0 To UBound(mk) Set urr = r.Rows(1) Set crr = .Cells(1, 11).Resize(10, 6) Set ch = .ChartObjects.Add(crr.Left, crr.Top, crr.Width, crr.Height) For j = 2 To UBound(v, 1) If v(j, 2) = mk(i) Then Set urr = Union(urr, r.Rows(j)) End If If j Mod 8 = 0 Then DoEvents Next With ch With .Chart .SetSourceData urr .ChartType = xlRadar .HasTitle = True .ChartTitle.Text = "賞与査定" End With .CopyPicture .Delete End With Application.Goto .Cells(y, x) .Paste Set prr = .Cells(y, x).Resize(10, 6) Set pc = .Shapes(i + 1) With pc .Left = prr.Left .Top = prr.Top .Width = prr.Width .Height = prr.Height End With x = x + 6 Set urr = Nothing If i Mod 8 = 0 Then DoEvents Next End With If Not zD Is Nothing Then zD.RemoveAll Erase v, mk MsgBox "終了 " & Format(Int(Timer - t) / 24 / 60 / 60, "hh : mm : ss") & _ Format((Timer - t) - Int(Timer - t), ".000") & " 秒" End Sub Private Function sHapesDelete(ByVal ztb As Object) As Boolean sHapesDelete = False Dim i As Long On Error Resume Next With ztb.Worksheets("Sheet1") For i = 1 To .Shapes.Count .Shapes(i).Delete Next If .Shapes.Count = 0 Then sHapesDelete = True End If End With On Error GoTo 0 End Function Private Function cHartObjectsDelete(ByVal ztb As Object) As Boolean cHartObjectsDelete = False Dim i As Long On Error Resume Next With ztb.Worksheets("Sheet1") For i = 1 To .ChartObjects.Count .ChartObjects(i).Delete Next If .ChartObjects.Count = 0 Then cHartObjectsDelete = True End If End With On Error GoTo 0 End Function (隠居Z) 2022/10/01(土) 23:22
|[A] |[B] |[C] |[D] |[E] |[F] |[G] |[H] |[I] [1] |氏名 |部署 |役職 |販売力|統率力|説明|協調性|貢献度|勤務評価 [2] |名前7|部署4|アルバイト| 2| 9| 10| 1| 5| 3 [3] |名前3|部署1|係長 | 8| 9| 6| 7| 1| 6 [4] |名前4|部署1|課長 | 5| 2| 4| 6| 1| 1 [5] |名前1|部署1|主任 | 2| 1| 1| 3| 9| 8 [6] |名前6|部署3|嘱託 | 1| 1| 5| 7| 8| 4 [7] |名前5|部署2|正社員 | 7| 2| 2| 8| 1| 7 [8] |名前9|部署4|正社員 | 5| 9| 8| 1| 10| 1 [9] |名前2|部署1|部長 | 2| 6| 8| 10| 5| 2 [10]|名前8|部署4|臨時 | 5| 1| 5| 3| 6| 5 (隠居Z) 2022/10/01(土) 23:25
私のコーディングに問題ありでせうか?。。。(T.T)
(隠居Z) 2022/10/02(日) 07:39
.Shapes(i).Delete Next こうしないと、いけなかったよ〜です。。。( ̄▽ ̄) お騒がせ致しました。すみません。すみません。 おおお。はずかし〜〜〜〜\(◎o◎)/! m(__)m (隠居Z) 2022/10/02(日) 07:47
レーダーチャートを実務で使ったことがありませんので、 どんなピボットなのかイメージできないのですが
部署と氏名を、ページフィールドに配置し ピボットグラフも予め作成しておき マクロでは
1)部署と氏名を入れ替え 2)グラフを画像としてコピー 3)場所をずらしながら貼り付け
といった感じで考えていました。
通常のグラフであれば、画像にしなくてもよいのですが、 隠居Zさんのコードで、グラフは1個だけ用意しソース範囲を入れ替えていくイメージです。
(マナ) 2022/10/02(日) 08:23
おはようございます。^^ という事で、作り直して見ました。^^; ... m(_ _)m Option Explicit Sub OneInstanceMain() Dim urr As Range Dim v() As Variant Dim i As Long Dim j As Long Dim x As Long Dim y As Long Dim r As Range Dim crr As Range Dim prr As Range Dim pc As Object Dim ch As Object Dim zD As Object Dim mk() As Variant Dim t As Double t = Timer With Worksheets("Sheet1") For i = .Shapes.Count To 1 Step -1 .Shapes(i).Delete Next Set zD = CreateObject("Scripting.Dictionary") Set r = .Cells(1).CurrentRegion v = r.Value For i = 2 To UBound(v, 1) zD(v(i, 2)) = Empty Next If zD.Count = 0 Then End mk = zD.keys y = 15 x = 1 Set crr = .Cells(1, 12).Resize(10, 6) Set ch = .ChartObjects.Add(crr.Left, crr.Top, crr.Width, crr.Height) For i = 0 To UBound(mk) Set urr = r.Rows(1) For j = 2 To UBound(v, 1) If v(j, 2) = mk(i) Then Set urr = Union(urr, r.Rows(j)) End If If j Mod 8 = 0 Then DoEvents Next With ch With .Chart .SetSourceData urr .ChartType = xlRadar .HasTitle = True .ChartTitle.Text = "調査室査定" End With .CopyPicture End With Application.Goto .Cells(y, x) .Paste Set prr = .Cells(y, x).Resize(10, 6) 'シェイプズの一個目はグラフエリアなので2枚目[画像]から Set pc = .Shapes(i + 2) With pc .Left = prr.Left .Top = prr.Top .Width = prr.Width .Height = prr.Height End With x = x + 6 Set urr = Nothing If i Mod 8 = 0 Then DoEvents ch.Chart.ChartArea.ClearContents Next Application.Goto .Cells(1) ch.Delete End With If Not zD Is Nothing Then zD.RemoveAll Erase v, mk MsgBox "終了 " & Format(Int(Timer - t) / 24 / 60 / 60, "hh : mm : ss") & _ Format((Timer - t) - Int(Timer - t), ".000") & " 秒" End Sub (隠居Z) 2022/10/02(日) 09:43
・シートPivotに、元データ、ピボットテーブル、ピボットグラフを用意
部署 部署4 氏名 名前8
値 販売力 5 統率力 1 説明 5 協調性 3 貢献度 6 勤務評価 5
・ピボットグラフのサイズや書式を設定 ・各部署の名前のシートを作成 ・下記コードを、シートモジュールにコピペ
Sub test() Dim ws As Worksheet Dim pvt As PivotTable, cho As ChartObject Dim v, hdr, m1 As Long, m2 As Long Dim k As Long, n As Long, y As Long, x As Long Dim 部署 As String, 氏名 As String
On Error Resume Next For Each ws In Worksheets If ws.Name <> Me.Name Then ws.DrawingObjects.Delete End If Next On Error GoTo 0
Set pvt = PivotTables(1) Set cho = ChartObjects(1) v = Range(Application.ConvertFormula(pvt.SourceData, xlR1C1, xlA1)).Value hdr = Application.Index(v, 1) m1 = Application.Match("部署", hdr, 0) m2 = Application.Match("氏名", hdr, 0)
For k = 2 To UBound(v) 部署 = v(k, m1) 氏名 = v(k, m2) Set ws = Worksheets(部署) pvt.PivotFields(m1).CurrentPage = 部署 pvt.PivotFields(m2).CurrentPage = 氏名 cho.Chart.ChartTitle.Text = 氏名
cho.CopyPicture ws.Paste
n = ws.Shapes.Count y = (n - 1) \ 8 x = (n - 1) Mod 8 ws.Shapes(n).Top = y * (cho.Height + 5) + ws.Rows(2).Top ws.Shapes(n).Left = x * (cho.Width + 5) + ws.Columns(2).Left Next
End Sub
(マナ) 2022/10/02(日) 13:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.