フォーマット用Excelファイルがあります。
このExcelにはシートが2つあり(Graph, DATA)
Graphシートにはグラフが既に用意されています。
グラフはDATAシートに格納されているデータを元に描画されます。
VB6でDATAシートのデータの値を書き込み
Graphシートのグラフを表示させたいのですが、
DATAシートのデータの値の数が固定数ではありません。
そのため、グラフのデータの範囲をVB6から指定しなおしたいのですが
どうしたらよいかがわかりません。
データの値は
Dim lobj_Excel As Object
Dim FileName As String
Dim i As Integer
Dim iCnt As Integer
iCnt = (可変長)
FileName = "D:\Project\hoge.xls"
Set lobj_Excel = GetObject(FileName)
With lobj_Excel.Worksheets("DATA")
For i = 0 To iCnt
.Cells(1, 1+i) = (データ)
.Cells(1, 2+i) = (データ)
.Cells(1, 3+i) = (データ)
Next
End With
With lobj_Excel
.Windows(lobj_Excel.Name).Visible = True
.Application.DisplayAlerts = False
.SaveAs FileName:=ls_Temp
.Application.DisplayAlerts = True
.Close
End With
のようなプログラムで編集しています。
上記のiCntによりセルの列数が可変となります。
その可変のデータをグラフデータ範囲としたいのですが、
Graphシートのグラフの範囲を指定しなおすには
どのような方法がありますでしょうか?
何か方法がありましたら教えていただけるとありがたいです。
マクロの記録ができるはずですが、方法は分かりますか?
Chart.SetSourceData メソッド
とか、
Chart.SeriesCollection(Index).Values プロパティ
あたりでは?
# Excel の場合はバージョンによって使えるメソッドなどが
# 変わります。質問時にはバージョン情報も必須です。
お返事ありがとうございます。
>マクロの記録ができるはずですが、方法は分かりますか?
>Chart.SetSourceData メソッド
>とか、
>Chart.SeriesCollection(Index).Values プロパティ
>あたりでは?
Excelファイルのマクロで設定するということになるんでしょうか?
VB6でexeを作ってそのexeからExcelにグラフを出力するという形なのですが
SetSourceData,SeriesCollectionプロパティもVB6側で操作できるんですか?
その場合、グラフオブジェクトの指定の仕方がいまいちわかりません…。
すみません、情報不足でしたね。Excelのバージョンは2002です。
> Excelファイルのマクロで設定するということになるんでしょうか?
VBA マクロの自動記録機能を使うと、必要なプロパティやメソッドが
わかるので、あとはそれを [F2]キーのオブジェクトブラウザや、
[F1]のExcel開発者ヘルプなどと組み合わせて調べていけば、
VB6 から呼びだす場合のコードも書けるでしょう。
なお、[マクロの記録]では「変数」が使われないので、Selection 主体の
コードになってしまい、冗長 かつ オブジェクト参照が曖昧となります。
それらは、適切なオブジェクトへ置き換えてやらなければなりません。
> SetSourceData,SeriesCollectionプロパティもVB6側で操作できるんですか?
操作できますよ。いずれも Excel.Chart オブジェクトのメンバですし。
# なお、SeriesCollection はプロパティではなく、メソッドです。
> その場合、グラフオブジェクトの指定の仕方がいまいちわかりません…。
objSheet.ChartObjects から辿ると、Excel.ChartObject が得られますよね。
さらにその Chart プロパティから、Excel.Chart オブジェクトが得られますよ。
> Excelファイルのマクロで設定するということになるんでしょうか?
> VBA マクロの自動記録機能
Excel上の操作をコードとして記録するExcelに実装されている
機能を指します。これを使って手作業のコードを記録すれば、
VBからのコードの参考となります。
詳しくは過去ログ検索『マクロの記録』や[Excel]のヘルプで
キーワード検索してみてください。
みなさん、お返事ありがとうございます。
マクロの記録のコードおよび、みなさんの発言を参考にした結果
下記のコードで範囲の変更ができました。
lobj_Excel.Worksheets("GRAPH").ChartObjects("グラフ").Chart.SetSourceData Source _
:=lobj_Excel.Worksheets("DATA").Range( 新しい指定範囲 ), PlotBy _
:=xlRows
的確かつ親切な対応、ありがとうございました。
ツイート | ![]() |