2017-07-30 22 views
2

私はピボットテーブルで利用可能なデータからチャートを生成しています。グラフにセカンダリ軸を追加する

ピボットテーブルから縦棒グラフを生成したいと考えています。

ピボットテーブルにはパーセント値と絶対値があります。私は列DとEのパーセンテージ値と、列BとCの絶対数を持っています。パーセンテージでグラフのセカンダリy軸を持っていきたいと思います。誰も私がこれをどのように進めることができるか教えてもらえますか?

私は以下のコードを進めました。それはです(今後の記事のために、このコードを使用します。

With cht 
    .HasAxis(xlValue, xlSecondary) = True ' add the secondary axis 
    .Axes(xlSecondary).TickLabels.NumberFormat = "0.0%" ' format it to percentage 
End With 

編集1

Sub charts() 
Dim cht As Chart 
'ThisWorkbook.Sheets("Status").ChartObjects.delete 
If ActiveSheet.PivotTables.Count = 0 Then Exit Sub 
Set ptable = ActiveSheet.PivotTables(1) 
Set ptr = ptable.TableRange1 
Set Sh = ActiveSheet.ChartObjects.Add(Left:=1, _ 
    Width:=390, _ 
    Top:=100, _ 
    Height:=250) 
Sh.Select 
Set cht = ActiveChart 
With cht 
.SetSourceData ptr 
.ChartType = xlColumnClustered 

End With 
'cht.SeriesCollection(2).Axes(xlValues, xlSecondary).MaximumScale = 10 
cht.SeriesCollection(1).HasDataLabels = True 
cht.SeriesCollection(2).HasDataLabels = True 
cht.SeriesCollection(3).HasDataLabels = True 
cht.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(0, 255, 0) '<~~ Red 
cht.SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) 
cht.SeriesCollection(3).Format.Fill.ForeColor.RGB = RGB(0, 0, 255) 
cht.HasTitle = True 
cht.ChartTitle.Text = "Status" 
End Sub 

任意のリードは、あなたがchtオブジェクトを設定した後

+1

セカンダリ軸を追加するマクロを記録しましたか?これは、(Excelのバージョンに応じて)あなたが探索してから借りることができるコードを生成します。 –

+0

cht.SeriesCollection(3).AxisGroup = 2 –

答えて

1

は、このコードを追加します。参考になりますあなたのもの)は、ActiveSheetSelectActiveChartまたはSelectionを使用していないためです。

また、常にOption Explicitを使用して、すべての変数とオブジェクトを事前に定義してください。 D、E列ARの

コード

Option Explicit 

Sub charts() 

Dim ChtObj As ChartObject 
Dim Sht As Worksheet 
Dim PvtTbl As PivotTable 
Dim PvtRng As Range 

' first set the sheet object 
Set Sht = ThisWorkbook.Worksheets("Sheet1") '<-- modify to your sheet's name 

If Sht.PivotTables.Count = 0 Then Exit Sub 

' set the Pivot Table 
Set PvtTbl = Sht.PivotTables(1) 

' set the Range of the Chart (from the Pivot Table's range) 
Set PvtRng = PvtTbl.TableRange1 

' set the Chart Object 
Set ChtObj = Sht.ChartObjects.Add(Left:=1, Width:=390, _ 
          Top:=100, Height:=250) 

' modify the Chart Object's properties 
With ChtObj.Chart 
    .SetSourceData PvtRng 
    .ChartType = xlColumnClustered 

    'cht.SeriesCollection(2).Axes(xlValues, xlSecondary).MaximumScale = 10 

    ' add series to chart and format them 
    .SeriesCollection(1).HasDataLabels = True 
    .SeriesCollection(2).HasDataLabels = True 
    .SeriesCollection(3).HasDataLabels = True 
    .SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(0, 255, 0) '<~~ Red 
    .SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) 
    .SeriesCollection(3).Format.Fill.ForeColor.RGB = RGB(0, 0, 255) 

    ' add title 
    .HasTitle = True 
    .ChartTitle.Text = "Status" 

    ' add a secondary axis, and format it 
    .HasAxis(xlValue, xlSecondary) = True ' add the secondary axis 
    .Axes(xlSecondary).TickLabels.NumberFormat = "0.0%" ' format it to percentage 
End With 

End Sub 
+0

私は同じコードを使用しました。これは私の主Y軸をパーセンテージに変更したものであり、セカンダリ軸は追加されていません – Jenny

+0

私を助けることができますか? – Jenny

+0

他の投稿を使用してください。軸を追加する前にセカンダリ軸グループに1つまたは複数の系列を割り当てる必要があります。実際には、通常、セカンダリ軸グループにシリーズが割り当てられると、セカンダリ値軸がデフォルトで追加されます。 –

1

seriescollectionsはAxisGroup = 2によってグループ化されます。

Sub charts() 
Dim cht As Chart 
Dim ptable As PivotTable 
Dim ptr As Range 
Dim Sh As ChartObject 
'ThisWorkbook.Sheets("Status").ChartObjects.delete 
If ActiveSheet.PivotTables.Count = 0 Then Exit Sub 
Set ptable = ActiveSheet.PivotTables(1) 
Set ptr = ptable.TableRange1 
Set Sh = ActiveSheet.ChartObjects.Add(Left:=1, _ 
    Width:=390, _ 
    Top:=100, _ 
    Height:=250) 

Set cht = Sh.Chart 
With cht 
.SetSourceData ptr 
.ChartType = xlColumnClustered 

End With 
'cht.SeriesCollection(2).Axes(xlValues, xlSecondary).MaximumScale = 10 
cht.SeriesCollection(1).HasDataLabels = True 
cht.SeriesCollection(2).HasDataLabels = True 
'cht.SeriesCollection(3).HasDataLabels = True 

cht.SeriesCollection(3).AxisGroup = 2 
cht.SeriesCollection(4).AxisGroup = 2 
cht.SeriesCollection(3).ChartType = xlLine 
cht.SeriesCollection(4).ChartType = xlLine 

cht.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(0, 255, 0) '<~~ Red 
cht.SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) 
cht.SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(0, 0, 255) 
cht.SeriesCollection(4).Format.Line.ForeColor.RGB = RGB(110, 110, 255) 

cht.HasTitle = True 
cht.ChartTitle.Text = "Status" 
cht.Axes(xlValue, xlSecondary).TickLabels.NumberFormat = "0%" 
End Sub 
関連する問題