2017-02-22 5 views
0

私はA2からAF17までのデータを含むスプレッドシートを持っていますので、大部分のカラムが隠されていました:I、AB、AD、ここで、列Iは軸ラベル範囲として必要な範囲であり、列AFは値範囲です。VBAチャート:ソースデータとして最後の空でない行までの範囲

I動的値として最後の非空行までの範囲を使用してグラフを作成するために、次の符号化:軸ラベルの範囲として得られるグラフを自動的に列Iを示しているにもかかわらず、それだけですぐ

Private Sub CommandButton2_Click() 

Dim MyEmbeddedChart As Chart 

Set MyEmbeddedChart = Sheets("Analysis").Shapes.AddChart(Width:=634, Height:=250).Chart 

With MyEmbeddedChart 
    .ChartType = xlBarClustered 
    .ChartStyle = 339 
    .SetSourceData Source:=Sheets("Analysis").Range("AF2", Cells(Rows.Count, 1).End(xlUp)) 
    .Legend.Delete 
    .Axes(xlValue).Delete 
    .Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse 
    .ApplyDataLabels 
End With 

End Sub 

を列Iは今すぐ左端に表示される列であるためです。つまり、実際にはソースデータの範囲はA2:AF17であり、軸ラベルの範囲は実際にはA2:AD17です。そして、私が列を再現するとすぐに、軸ラベルが自然に崩れてしまいました。

現在のグラフが私の目的を果たしても、間違いなく理想的です。では、最後の空でない行メソッドを使用し続けながら、ソースラベルデータを軸ラベル範囲と列AFとして正確に列Iに設定するにはどうすればよいですか?

私はまだ比較的新しいVBAですが、どんな助けにも感謝しています。

答えて

0

私が代わりにChartChartObjectを使用することを好むChart.Parentを使用するよりも、私は、すべてのプロパティの下に入れ子にすることが簡単にわかります。

以下のコードは、あなたのチャートを作成し、その後それがValuesのために定義されRange(完全修飾Range)でSeriesを追加し、列の「I」としてRangeXValues(X軸)のため。

コード

Option Explicit 

Private Sub CommandButton2_Click() 

Dim MyEmbeddedChart As ChartObject 
Dim Sht As Worksheet 

Set Sht = Worksheets("Analysis") 

Set MyEmbeddedChart = Sht.ChartObjects.Add(100, 100, 634, 250) 

With MyEmbeddedChart 
    With .Chart 
     .ChartType = xlBarClustered 
     .ChartStyle = 339 
     .Legend.Delete 
     .Axes(xlValue).Delete 
     .Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse 
     .ApplyDataLabels 
    End With 

    ' this is for one series , you need to do this for every series collection 
    With .Chart.SeriesCollection.NewSeries 
     .Name = "ser" & MyEmbeddedChart.Chart.SeriesCollection.Count 
     .Values = Sht.Range("AF2", Sht.Cells(Sht.Rows.Count, "AF").End(xlUp)) 
     .XValues = Sht.Range("I2", Sht.Cells(Sht.Rows.Count, "I").End(xlUp)) 
    End With 
End With 

End Sub 
関連する問題