ExcelVBAでグラフのデータ範囲を設定する方法

このQ&Aのポイント
  • ExcelVBAを使用してグラフのデータ範囲を設定する方法について説明します。
  • 特定の列をグラフのデータ範囲から除外するExcelVBAコードの修正方法について教えてください。
  • 選択範囲から特定の列を除外してグラフを作成する方法について解説します。
回答を見る
  • ベストアンサー

excelVBA:グラフのデータ範囲

With ActiveSheet.ChartObjects.Add(300, 300, 480, 300) .Chart.SetSourceData Range(Range(Cells(3, 2), Cells(11, 2)), Range(Cells(3, 4), Cells(11, 5))), xlColumns .Chart.ChartType = xlBarStacked100 '100%横棒グラフ 3列目を選択範囲から外す意図で、上記のようなコードを書いたのですが、このやり方ですと、3列目も選択されて、グラフ化されてしまいました。上記のコードをどのように修正すればよいか教えていただけないでしょうか? ローデータは、下記のようなものです。上記コードの3列目が下記データのN数の列にあたります。        N 男性 女性 segment1 N1 ○1 △1 segment2 N2 ○2 △2 segment3 N3 ○3 △3 segment4 N4 ○4 △4 segment5 N5 ○5 △5 segment6 N6 ○6 △6 segment7 N7 ○7 △7 segment8 N8 ○8 △8 ローデータ範囲をすべて選択し、グラフ化した後、「N数の列を削除」のような操作をすれば実質的にはOKなのですが、系列の色がずれてしまうため、今回このやり方はできなそうです。 どうかよろしくお願いいたします。

  • stripe
  • お礼率89% (1568/1752)

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

データ実例をもっと判りやすく書くこと。 質問の例は判りにくく、実際に試行に使えないじゃ無いか。 模擬例 Sheet1 C3:E11 B列   C列  D列  E列 a 1 12 23 b 3 34 34 c 12 53 52 d 4 24 61 e 5 13 24 f 6 34 52 g 7 54 14 h 9 41 27 (こういう書き方で判りやすいだろう) これで質問のコードを Sub test01() 'excelVBA: グラフのデータ範囲 ActiveSheet.Columns(3).Visible = False With ActiveSheet.ChartObjects.Add(300, 300, 480, 300) .Chart.SetSourceData Range(Range(Cells(3, 2), Cells(11, 2)), Range(Cells(3, 4), Cells(11, 5))), xlColumns .Chart.ChartType = xlBarStacked100 '100%横棒グラフ End With End Sub とするとB,C,D、E列のグラフになる。 ーーー そのコードの最初に Columns("C:C").EntireColumn.Hidden = True を入れて実行すると B,D、Eのグラフになるだろう。 非表示の見えないデータはグラフから除かれる原則。 このやり方は質問者の意図と違うかもしれないが、1つのやり方ではあろう。

stripe
質問者

お礼

お返事がおそくなり申し訳ありませんでした。 どうもありがとうございました!

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

離れた列範囲を選択して自動記録すると、文字列で与える方法が記録されると思いますが、 Rangeで与えたいなら、下記の様にすると簡便だと存じます。(データ範囲はご質問にはそっておらず適当です) ご参考まで。 Sub test() Dim targetRange As Range Set targetRange = Union(Range(Cells(4, 2), Cells(11, 2)), Range(Cells(4, 4), Cells(11, 4)), Range(Cells(4, 6), Cells(11, 6))) ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlColumnStacked100 ActiveChart.SetSourceData Source:=targetRange End Sub

関連するQ&A

  • グラフのデータ範囲をCellsで指定するとエラー

    あるサイトを参考に、VBAでChartType が xlStockOHLC 形式のグラフを作成しようとしています。 ところがデータ範囲の指定方法で .SetSourceData Source:=wsdata1.Range("b1:e100"), PlotBy:=xlColumns あるいは i = 100 .SetSourceData Source:=wsdata1.Range("b1:e" & i), PlotBy:=xlColumns とすれば、正常に動作しますが、 .SetSourceData Source:=wsdata1.Range(Cells(1, 2), Cells(100, 5)), PlotBy:=xlColumns とすると、Rangeメソッドは失敗しました。_worksheetオブジェクト となります。 両者は同じ範囲を指定しているつもりなのですが、どこが間違いでしょうか。 Option Explicit Sub sample() Dim ws As Worksheet Dim wsdata0, wsdata1 As Worksheet Dim topPosition As Double Dim leftPosition As Double Dim width As Double Dim height As Double Dim chartObj As ChartObject Dim chart0, chart1 As chart Dim i As Integer 'グラフを作成するシートを指定 Set ws = Worksheets("Sheet1") Set wsdata0 = Worksheets("saya00") Set wsdata1 = Worksheets("saya01") 'グラフを表示させる位置を取得 ※例としてセル「G2」の位置を取得 With ws.Range("a1") leftPosition = .Left topPosition = .Top End With 'グラフの横と縦のサイズを設定 width = 1000 height = 500 'ChartObjectオブジェクトを作成 Set chartObj = ws.ChartObjects.Add(leftPosition, topPosition, width, height) 'ChartObjectオブジェクトの名前を設定 chartObj.Name = "saya" 'Chartオブジェクト(グラフ)を作成 Set chart0 = chartObj.chart With chart0 'グラフの作成元としてセル「B2」から一覧の範囲を指定 ' .SetSourceData Source:=wsdata.Range("b1:e100"), PlotBy:=xlColumns ' .SetSourceData Source:=ws.Range("b1:e100"), PlotBy:=xlColumns ' i = 100 ' .SetSourceData Source:=wsdata1.Range("b1:e" & i), PlotBy:=xlColumns .SetSourceData Source:=wsdata1.Range(Cells(1, 2), Cells(10, 5)), PlotBy:=xlColumns 'グラフの種類を「折れ線グラフ」に指定 .ChartType = xlStockOHLC 'グラフのタイトルを表示 .HasTitle = True 'グラフのタイトルを設定 .ChartTitle.Text = "saya-1" 'グラフのタイトルのフォントサイズを設定 .ChartTitle.Font.Size = "12" End With '後片付け Set chart0 = Nothing Set chart1 = Nothing Set chartObj = Nothing End Sub

  • グラフ表示

    アクセスのデータをエクセルにインポートして、エクセルを操作して、グラフを作っているのですが、グラフを描くための範囲選択をしたいのですが、うまくいきません。 MyChart.Chart.SetSourceData xlSheet.Range("A1:A20"), xlColumns だとA1からA20まで範囲選択されます。 MyChart.Chart.SetSourceData xlSheet.Range("A1").End(xlDown), xlColumns だと最終行のだけ範囲選択されます。 A1から最終行までしたいのですがどうすればいいのでしょうか。 お願いします。 VB6.0 EXCEL2000です。

  • Excelマクロによるグラフ作成時の元データの取得について

     Excelマクロでグラフを作成したいのですが、以下(1)のように書いたら、Grp1.Chart.SetSourceData・・・のところでエラーになってしまいました。そこで、Rangeのところを(2)の様に変更したら、うまくいきました。ただ、自分としては、(1)のようにRangeの中にCellsを使う書き方でやりたいのですが、そのようにはできないでしょうか。  なお、マクロ初心者なので、簡単な表現でお願いします。 (1) Sub グラフ挿入_Macro() Set Grp1 = Sheets("グラフ1").ChartObjects.Add(10, 10, 500, 200) Grp1.Chart.SetSourceData _ Source:=Sheets("データ").Range(Cells(3, 1), Cells(10, 2)), _ PlotBy:=xlColumns End Sub (2) Sub グラフ挿入_Macro() Set Grp1 = Sheets("グラフ1").ChartObjects.Add(10, 10, 500, 200) Grp1.Chart.SetSourceData _ Source:=Sheets("データ").Range("A3:B10"), _ PlotBy:=xlColumns End Sub

  • グラフ作成

    グラフ作成のマクロを作りたくて、マクロの記憶を用いて試してみたのですが、うまくいかないので、もしよろしければおしえてください。 選択範囲をアルファベットを用いたものではなく、cells(k,i)で表したいと思っています。 <マクロ> Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("元データ").Range( _ "A1:B1,A927:B987,Y1:Z1,Y927:Z987"), PlotBy:=xlColumns ’←このグラフ範囲をcells(,)の形式にしたい。 ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3" どうぞよろしくお願いします。

  • VBAでグラフ作成

    過去のログから色々探したのですが、原因が分かりません。お願いいたします。 エクセルのグラフの元データの範囲を ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("J11:M35"), PlotBy:=xlColumns から ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(11, 10), Cells(35, 13)), PlotBy:=xlColumns に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

  • VBAでグラフ作成

    過去のログから色々探したのですが、原因が分かりません。お願いいたします。 エクセルのグラフの元データの範囲を ActiveChart.SetSourceData Source:=Sheets(\"sheet1\").Range(\"J11:M35\"), PlotBy:=xlColumns から ActiveChart.SetSourceData Source:=Sheets(\"sheet1\").Range(Cells(11, 10), Cells(35, 13)), PlotBy:=xlColumns に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

  • vba グラフ データ範囲設定

    今折れ線グラフを作成しています。 データの範囲設定で悩んでいます。 項目軸ラベルのセル範囲と、グラフデータのセル範囲を指定を以下のように設定し折れ線グラフを作成しました。 Set RngData = Union(Wb3Sh6.Range(Cells(範囲1, 1), Cells(範囲2 - 1, 1)), _             Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), _              Wb3Sh6.Range(Cells(範囲1, 18), Cells(範囲2 - 1, 18)), _              Wb3Sh6.Range(Cells(範囲1, 33), Cells(範囲2 - 1, 33)), _             Wb3Sh6.Range(Cells(範囲1, 34), Cells(範囲2 - 1, 34)), _             Wb3Sh6.Range(Cells(範囲1, 39), Cells(範囲2 - 1, 39)), _             Wb3Sh6.Range(Cells(範囲1, 40), Cells(範囲2 - 1, 40))) ActiveChart.SetSourceData Source:=RngData, PlotBy:=xlColumns ですが。 項目軸を「Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), 」 のみとしたいのに 項目軸が「Wb3Sh6.Range(Cells(範囲1, 1), Cells(範囲2 - 1, 1)), _             Wb3Sh6.Range(Cells(範囲1, 12), Cells(範囲2 - 1, 12)), _              Wb3Sh6.Range(Cells(範囲1, 18), Cells(範囲2 - 1, 18)), _              Wb3Sh6.Range(Cells(範囲1, 33), Cells(範囲2 - 1, 33)), _             Wb3Sh6.Range(Cells(範囲1, 34), Cells(範囲2 - 1, 34)), _             Wb3Sh6.Range(Cells(範囲1, 39), Cells(範囲2 - 1, 39)), _」 となってしまいます。 項目軸を確実に設定したいのですが、どうすればよいでしょうか。

  • エクセルのマクロでCells(j,i)を使用してデータ範囲を指定してグラフを作成する方法

    エクセルのマクロでグラフを描く時に、2つの離れた列(1列目とi列目)のデータを Cells を使用して範囲指定をしたいのですが、エラーがでてしまします。どこが間違っているか教えていただけないでしょうか? よろしくお願いいたします。 下記の式では正常にグラフは作成されます。 ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:A19,C1:C19"), PlotBy _ ' :=xlColumns 下記表現でエラーが発生します。 Dim c1, c2, c3 As Range Set c1 = Worksheets("Sheet1").Range(Cells(1, 1), Cells(jmax, 1)) Set c2 = Worksheets("Sheet1").Range(Cells(1, i), Cells(jmax, i)) Set c3 = Union(c1, c2) ActiveChart.SetSourceData Source:=Sheets("Sheet1").c3, PlotBy _ :=xlColumns エラー内容 実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。

  • VBA グラフX軸の変更

    A列:X軸(日付) H列:Y軸(値) といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか? 現在は以下のようなソースまで組めます。 あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。 --------------------------------------------------------------- Dim chart1 As Chart Set chart1 = Charts.Add 'H列グラフ化 chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI)) chart1.ChartType = xlLineStacked chart1.HasLegend = False --------------------------------------------------------------- どなたかアドバイスいただければ幸いです。

  • グラフの範囲指定をVBAで可変にしたい

    1シートに複数のグラフがあり、値を入れて完成させているファイルがあります。 データ範囲が毎回違うため、いちいちグラフを選択し、範囲を変更しています。 系列:行 データ範囲:A列から~H列までだったり、A列からJ列までだったりします データがH列までの場合はI列は値が入っていませんが、L列からまた他のグラフのデータ範囲になっているという形です。 データが始まる位置はすべて固定です。 シートにある複数のグラフを一度に変更したいのですが、どのようにしたら良いのでしょうか? (選択しているグラフのグラフ変更ではなく、選択していないものも変更したい) 以下のようなマクロを仮で組んでみたのですが、うまく動きません。 よろしくお願いします。 Sub グラフ範囲変更() Dim lastcolumn As Integer lastcolumn = Range("A2").End(xlToRight).Column ActiveChart.SetSourceData Source:=Range(Cells(1, 1), Cells(1, lastcolumn)) End Sub

専門家に質問してみよう