2017-09-28 12 views
-2

私は300列のワークシートを持ち、同じワークシートにある他の2枚のシートからデータを取り込んで各列に1つの散布図を作成したいと考えています。 問題はVBAに慣れていないことと、一部のエラーコードがまったく役に立たないことです。VBAを使用してExcelで複数のグラフを作成

Private Sub Create_Charts() 
    Dim sh As Worksheet 
    Dim chrt As Chart 

    For i = 1 To 300 

     Set sh = ActiveWorkbook.Worksheets("Graphs") 
     Set chrt = sh.Shapes.AddChart.Chart 
     With chrt 
      'Data 
      .ChartType = xlXYScatter 
      .SeriesCollection.NewSeries 
      .SeriesCollection(1).Name = "=""Scatter Chart""" 


      'With the following parameters it works: 
      '.SeriesCollection(1).XValues = "=OP!$c$4:$c$1588" 
      '.SeriesCollection(1).Values = "=PV!$c$4:$c$1588" 

      'But I need something like this:     
      .SeriesCollection(1).XValues = CStr(Worksheets("PV").Range(Cells(i, 4), Cells(i, 1588))) 
      .SeriesCollection(1).Values = CStr(Worksheets("OV").Range(Cells(i, 4), Cells(i, 1588))) 

      'Location 
      .ChartArea.Left = 380 * i - 380 
      .ChartArea.Top = 100 
      .ChartArea.Height = 360 
      .ChartArea.Width = 360 

      'Formatting 
      .Axes(xlCategory).HasMajorGridlines = True 
      .Axes(xlValue).HasMajorGridlines = True 
      .HasAxis(xlCategory, xlPrimary) = False 
      .HasAxis(xlValue, xlPrimary) = False 

      .HasLegend = False 


     End With 

    Next i 

End Sub 
+1

質問、特定の問題やエラーや問題自体でそれを再現するために必要な最短のコードを希望の動作を含める必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。 [mcve]を参照してください。 –

+0

エラーコードは何を正確に示し、どの行が停止していますか? – BerticusMaximus

+0

"300列のワークシートがあり、同じワークシートにある他の2枚のシートからデータを取り込んで、各列に1つの散布図を作成したいと考えています。私はこれが十分に明確だと思った。 –

答えて

0

この行は列を参照:

.SeriesCollection(1).XValues = "=OP!$c$4:$c$1588" 

これは、行、列1588の列4からi行参照:

.SeriesCollection(1).XValues = CStr(Worksheets("PV").Range(Cells(i, 4), Cells(i, 1588))) 

をしかし、あなたはまた、唯一のない範囲を参照する必要がしかし細胞。そして文字列アドレスを渡す場合は、先行する "="が必要です。ある範囲を渡す方が簡単です。だから、これを試してみてください(「?なぜ、このコードが動作していない」)、デバッグの助けを求めている

Dim wsPV As Worksheet, wsOV As Worksheet 
Dim rngX As Range, rngY As Range 

Set wsPV = ActiveWorkbook.Worksheets("PV") 
Set wsOV = ActiveWorkbook.Worksheets("OV") 

Set rngX = wsPV.Range(wsPV.Cells(4, i), wsPV.Cells(1588, i) 
Set rngY = wsOV.Range(wsOV.Cells(4, i), wsOV.Cells(1588, i) 

chrt.SeriesCollection(1).XValues = rngX 
chrt.SeriesCollection(1).Values = rngY 
+0

FINE!ありがとう、ジョン! –

+0

喜んで助けてください。なぜそれをマークしていない、またはそれをupvote?ありがとう。 –

+0

申し訳ありません忘れてしまった!私の評判のせいで、私はupvoteできません。 –

関連する問題