• 締切済み

グラフの凡例のデータ範囲を変数を使って設定したい

エクセルで線グラフを作成し、凡例を設定する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'オブジェクト とエラー表示がでます。 すみませんが、よろしくお願いします。

みんなの回答

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

行きがかり上もう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じゃダメですよ。コードの問題ではないですね。

caribousjj
質問者

補足

毎度ご説明ありがとうございます。 また、コードも全て記述していただきありがとうございます。 コードをそのままコピペしました。 しかし、残念ながら、前回と同様で 「型が一致しません」 というエラーが出てしまいます。 原因はよくわかりませんが、 今回のこの件はあきらめることにします。 丁寧にご指導くださいまして、本当にありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

はじめの質問の >'Cells'メソッドは失敗しました.'Global'オブジェクト は、解決したはずです。 はじめの質問もそうですが、エラーが起こるならどこでエラーになるか書いてください。 また、元のデータがどうなっているのか書かないとわかりません。 私の示したコードで、 「型が一致しません」 のエラーが出ることはちょっと考えられないので。

caribousjj
質問者

補足

なるほど。大変失礼しました。 ご回答ありがとうございます。 元のデータになりますが、以下のようです。 ---------------------------------------- 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)
回答No.2

>'Cells'メソッドは失敗しました.'Global'オブジェクト とは関係ありませんが、ミスがありましたね。 With WorkSheet("Sheet1") ↓ With WorkSheets("Sheet1") でした。 で、 いいはずですが。 Rangeの前、Cellsの前それぞれに「.」をつけてありますか。 「.Range」「.Cells」 です。

caribousjj
質問者

補足

ご回答ありがとうございます。 --------------------------------------------- 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)
回答No.1

現在アクティブなのは、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 でどうですか。中味は知らない。

caribousjj
質問者

補足

ご回答ありがとうございます。 トライしてみたのですが、同様の 'Cells'メソッドは失敗しました.'Global'オブジェクト とエラーがでます。 以下のようなコードで書くと動作します。 ---------------------------------------------------- For i = 1 To 3 ActiveChart.SeriesCollection(i).Name = Worksheets("sheet1").Cells(i + 2, 3) Next ---------------------------------------------------- ただこの場合ですと、最後のCells(i + 2, 3)が1つのセルを参照しているだけです。 この部分を2つ以上のセルの参照に変更したいのですが。

関連するQ&A