- 締切済み
グラフの凡例のデータ範囲を変数を使って設定したい
エクセルで線グラフを作成し、凡例を設定するvbaの記述方法がわかりません。 凡例に設定したいデータは、連続する2つのセルの範囲で、変数を用い、記述できないかと模索しています。 線グラフは3つの系統あります。 記述内容は以下の通りです --------------------------------------------------------- Sub グラフ化() d = Worksheets("sheet1").Range("A10").End(xlUp).Row ThisWorkbook.Charts("Graph1").Activate With ActiveChart .ChartType = xlLine .HasDataTable = True .HasLegend = True End With For i = 1 to 3 ActiveChart.SeriesCollection(i).Name = Worksheets("sheet1").Range(Cells(i, 3), Cells(i, 5)) Next End Sub ----------------------------------------- 上記の記述ですと、 'Cells'メソッドは失敗しました.'Global'オブジェクト とエラー表示がでます。 すみませんが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- okormazd
- ベストアンサー率50% (1224/2412)
行きがかり上もう1度だけ解答します。 添付図のようなら、(添付図はアップの都合で、チャートオブジェクトにしてある) Sub グラフ化() d = Worksheets("sheet1").Range("A10").End(xlUp).Row ThisWorkbook.Charts("Graph1").Activate With ActiveChart .ChartType = xlLine .HasDataTable = True .HasLegend = True End With With Worksheets("Sheet1") For i = 2 To 4 ActiveChart.SeriesCollection(i - 1).Name = .Range(.Cells(i, 3), .Cells(i, 5)) Next End With End Sub で、特に問題はありません。with文をforの外に出したが、本質的には変わるものではありません。 グラフに3個のSeriesデータがちゃんとかかれていますか。データの無いSeriesじゃダメですよ。コードの問題ではないですね。
- okormazd
- ベストアンサー率50% (1224/2412)
はじめの質問の >'Cells'メソッドは失敗しました.'Global'オブジェクト は、解決したはずです。 はじめの質問もそうですが、エラーが起こるならどこでエラーになるか書いてください。 また、元のデータがどうなっているのか書かないとわかりません。 私の示したコードで、 「型が一致しません」 のエラーが出ることはちょっと考えられないので。
補足
なるほど。大変失礼しました。 ご回答ありがとうございます。 元のデータになりますが、以下のようです。 ---------------------------------------- A B C D E F G H I No. 名前 距離 種目 区分 25m 50m 75m 100m 1 ○○ 100m クロール 予選 12.4 14.2 15.4 15.0 2 ○○ 100m クロール 決勝 12.2 14.0 15.0 14.5 ・ ・ ・ ---------------------------------------- このように○○選手のLAPタイムの比較を線グラフで表現したいと考えています。 その際の凡例として、「.Range(.Cells(i, 3), .Cells(i, 5)」のように 100mクロール予選、という凡例と 100mクロール決勝、という凡例をつけたいのです。 上記の元のデータはワークシート「Sheet1」に、また 線グラフはグラフシート「Graph1」に描かれています。 VBAを実行すると、 With WorkSheet("Sheet1") ActiveChart.SeriesCollection(i).Name = .Range(.Cells(i, 3), .Cells(i, 5)) ←ココ End With この記述の箇所でエラーが発生します。 以前にも記述させていただきましたが、仮に ActiveChart.SeriesCollection(i).Name = Cells(i, 3) のようにコードを書くと、 「100m」だけは凡例に表示されます。 すみませんが、どうぞよろしくお願いいたします。
- okormazd
- ベストアンサー率50% (1224/2412)
>'Cells'メソッドは失敗しました.'Global'オブジェクト とは関係ありませんが、ミスがありましたね。 With WorkSheet("Sheet1") ↓ With WorkSheets("Sheet1") でした。 で、 いいはずですが。 Rangeの前、Cellsの前それぞれに「.」をつけてありますか。 「.Range」「.Cells」 です。
補足
ご回答ありがとうございます。 --------------------------------------------- For i = 1 To 3 With WorkSheets("Sheet1") ActiveChart.SeriesCollection(i).Name = .Range(.Cells(i, 3), .Cells(i, 5)) End With Next --------------------------------------------- ご指摘のように、上記の記述で実行してみたところ、今度は 「型が一致しません」 とのエラーが報告されました。 VBA記述でなければ、簡単に変更可能なのですが、、、 なかなか難しいです。
- okormazd
- ベストアンサー率50% (1224/2412)
現在アクティブなのは、ActiveChartです。ActiveChartにはCellはありません。それを参照しようとするので、エラーが出ます。 ActiveChart.SeriesCollection(i).Name = Worksheets("sheet1").Range(Cells(i, 3), Cells(i, 5)) ↓ With WorkSheet("Sheet1") ActiveChart.SeriesCollection(i).Name = .Range(.Cells(i, 3), .Cells(i, 5)) End With でどうですか。中味は知らない。
補足
ご回答ありがとうございます。 トライしてみたのですが、同様の 'Cells'メソッドは失敗しました.'Global'オブジェクト とエラーがでます。 以下のようなコードで書くと動作します。 ---------------------------------------------------- For i = 1 To 3 ActiveChart.SeriesCollection(i).Name = Worksheets("sheet1").Cells(i + 2, 3) Next ---------------------------------------------------- ただこの場合ですと、最後のCells(i + 2, 3)が1つのセルを参照しているだけです。 この部分を2つ以上のセルの参照に変更したいのですが。
補足
毎度ご説明ありがとうございます。 また、コードも全て記述していただきありがとうございます。 コードをそのままコピペしました。 しかし、残念ながら、前回と同様で 「型が一致しません」 というエラーが出てしまいます。 原因はよくわかりませんが、 今回のこの件はあきらめることにします。 丁寧にご指導くださいまして、本当にありがとうございました。