2007年11月10日土曜日

第58回目 グラフ関係(その4;グラフのデータ系列を取る)

○第58回目 グラフ関係(その4;グラフのデータ系列を取る)

 今回は、グラフからデータ系列の情報を取り出しましょう。
 データ系列の情報は4つで、シート名、表札の座標、横軸の座標、データ値の座標のことです。
 これはそれほど難しくないのですが、コマンドが何を使うのかがわかりません。
 いろいろ調べてみた結果、
 ActiveChart.SeriesCollection.item(i).Formula
 を使うことがわかりました。
 Dim d_graph(30)
 With ActiveChart.SeriesCollection
  xx_suu = .Count  'グラフの数です
  For i = 1 To xx_suu
  d_graph(i) = .item(i).Formula
  MsgBox "系列" & i & "のソースデータ範囲は ⇒" _
    & vbCrLf & d_graph(i)             '確認用
  Next i
 End With
 を動かして、データ系列の情報がどうなっているかみてください。

 =SERIES(y=ax2+bx+c!$B$1,y=ax2+bx+c!$A$2:$A$98,y=ax2+bx+c!$B$2:$B$98,1)
 となっているので、これを分解し、データ系列の4項目を求めます。
 ttt = "=SERIES(y=ax2+bx+c!$B$1,y=ax2+bx+c!$A$2:$A$98,y=ax2+bx+c!$B$2:$B$98,1)"
 として、分解してみます。
 p1=instr(ttt,"(")
 p9=instr(ttt,"!")
 x_sheet(i)=mid(ttt,p1+1,p9-p1-1)
 ttt=mid(ttt,p9+1) '使った部分は取り除いていきます

 p1=instr(ttt,",")
 x_name(i)=left(ttt,p1-1)
 ttt=mid(ttt,p1+1)

 p1=instr(ttt,"!")
 p9=instr(ttt,",")
 x_midashi(i)=mid(ttt,p1+1,p9-p1-1)
 ttt=mid(ttt,p9+1)

 p1=instr(ttt,"!")
 p9=instr(ttt,",")
 XX(i)=mid(ttt,p1+1,p9-p1-1)
 ttt=mid(ttt,p9+1)

 p1=instr(ttt,")")
 g_no(i)=left(ttt,p1-1)

 これをfor toでxx_suu繰り返し情報をとります。

 次にこの情報をワークシートに書き込みます。
 シート移動の機能でシートを最寄のワークシートに移してください。

 そのシートの特別な場所に書き込みます。グラフ管理表が作成されているので、その場所に書き込みました。F5から書き込みます。
 for i=1 to xx_suu
cells(lr004+i,lc005) = "=" & x_sheet(i) & "!" & x_name(i)  '計算式グラフの表札
  cells(lr004+i,lc005+1)=x_sheet(i)
  cells(lr004+i,lc005+2)=x_name(i)
  cells(lr004+i,lc005+3)=x_midashi(i)
  cells(lr004+i,lc005+4)=XX(i)
 next i











 このデータ系列の情報を活用して、新しいデータ系列の情報を作ってみてください。それを前回のマクロでグラフに追加してみてください。









0 件のコメント: