• ベストアンサー

Excel VBA グラフ作成のときのエラー

VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

データ表がずれて表示されるので、整形してみました。   A B 1 a 1 2   2 3   3 4   4 5   5 6 b 6 7   7 8   8 9   9 10   10 11 c 11 12   12 13   13 14   14 15   15 16 d   '←便宜上入れてみました。 エラーになるのは、変数a_dataにセットされた値がおかしいのかも知れません。 因みに当方では、提示箇所でエラーは出ませんでしたが、変なグラフになります。 コードで、おかしな所、不要な箇所を修正削除してみました。 Sub test2()   Dim Wrow As Long   Dim a_data As Long   Dim b_data As Long   Dim c_data As Long   Dim d_data As Long   Dim i As Long      Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).row   For i = 1 To Wrow     If Worksheets("sheet1").Cells(i, "A").Value = "a" Then       a_data = Worksheets("sheet1").Cells(i, "A").row     ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then       b_data = Worksheets("sheet1").Cells(i, "A").row     ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then       c_data = Worksheets("sheet1").Cells(i, "A").row     ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then       d_data = Worksheets("sheet1").Cells(i, "A").row     End If   Next   ActiveSheet.ChartObjects.Add(150, 10, 400, 150).Select   ActiveChart.ChartType = xlLineMarkers   ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic   ActiveChart.SeriesCollection.NewSeries   ActiveChart.SeriesCollection.NewSeries   ActiveChart.SeriesCollection.NewSeries   ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")   ActiveChart.SeriesCollection(1).Values = Range(Cells(a_data, "B"), Cells(b_data - 1, "B"))   ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A")   ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data - 1, "B"))   ActiveChart.SeriesCollection(3).Name = Cells(c_data, "A")   ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data - 1, "B")) End Sub

goo397620
質問者

お礼

お礼が遅くなりました。 ご回答ありがとうございます。 しかし、xls88さんのコードでも、同じところで、「実行時エラー13 型が一致」とでました。。。パソコンやソフトが悪いのでしょうか。。。 ただ、自分のコードもxls88さんのコードでも、ステップインで一行ずつ実行すると、エラーなしに実行できます。不思議です。

その他の回答 (5)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

ぅわ。すみません。 >Sub try() >': >For Each r In .Range("A1", .Cells(.Rows.Count, 1)) For Each r In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp)) .End(xlUp)が抜けてましたorz Sub zikken()については、何故?、と訊かれると私にもわかりません。 そんな事もある...って事で。 知っておけば対処のしようがあるというプチ情報としてさらっと流しといてください。:D

goo397620
質問者

お礼

ご回答ありがとうございます。 修正し、実行すると問題なく動きました! 本当にありがとうございます!

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

>Cellsの列指定 "A" が影響してます。 一応、補足。 全ての状況で影響があるわけではないです。 ケースバイケースで使い分けされて構わないと思います。 ちょっと実験です。 '標準モジュール Option Explicit Sub zikken()   Dim ws As Worksheet   Dim r As Range   On Error GoTo errLine   Set ws = ActiveSheet   Set r = ws.Cells.Item(1, "A")   If Not r Is Nothing Then Debug.Print r.Address(0, 0);   Set r = Nothing   Set r = ws.Cells.Item(1, 2)   If Not r Is Nothing Then Debug.Print r.Address(0, 0)   Set r = Nothing   With ws.ChartObjects.Add(0, 0, 200, 100).Chart     Set r = ws.Cells.Item(2, "A")     If Not r Is Nothing Then Debug.Print r.Address(0, 0);     Set r = Nothing     Set r = ws.Cells.Item(2, 2)     If Not r Is Nothing Then Debug.Print r.Address(0, 0)     Set r = Nothing     With .SeriesCollection.NewSeries  '■       Set r = ws.Cells.Item(3, "A")       If Not r Is Nothing Then Debug.Print r.Address(0, 0);       Set r = Nothing       Set r = ws.Cells.Item(3, 2)       If Not r Is Nothing Then Debug.Print r.Address(0, 0)       Set r = Nothing       .Delete     End With     Set r = ws.Cells.Item(4, "A")     If Not r Is Nothing Then Debug.Print r.Address(0, 0);     Set r = Nothing     Set r = ws.Cells.Item(4, 2)     If Not r Is Nothing Then Debug.Print r.Address(0, 0)     Set r = Nothing     .Parent.Delete   End With   Set r = ws.Cells.Item(5, "A")   If Not r Is Nothing Then Debug.Print r.Address(0, 0);   Set r = Nothing   Set r = ws.Cells.Item(5, 2)   If Not r Is Nothing Then Debug.Print r.Address(0, 0)   Set r = Nothing   Set ws = Nothing   Exit Sub errLine:   Debug.Print Err.Number; Err.Description;   Resume Next End Sub ステップ実行ではエラーが出ません。普通に実行してみてください。 結果は[イミディエイトウィンドウ]に書き出されます。 [win2000/xl2000][winXP/xl2003]で同じ結果になりました。

goo397620
質問者

お礼

ご回答ありがとうございます。 普通に実行してみると、[イミディエイトウィンドウ]に A1B1 A2B2 13 型が一致しません。B3 13 型が一致しません。B4 A5B5 とでました。 そして、ステップ実行では、エラーはでませんでした。 不思議ですね。。。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

>ANo.1のお礼 デバッグについて http://members.jcom.home.ne.jp/rex-uchida/vba110.htm エラー行にブレークポイントを設けてデバッグすればどうなるでしょうか。 ブレークポイントからF5キーで実行して、エラーなくマクロが実行されるかどうかを確認してください。 >ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") 上記の書き方は、Excel2002でも問題なく使えていました。 A1形式に慣れているので、直観的に列をイメージし易く、良く使っていました。

goo397620
質問者

お礼

ご回答ありがとうございます。 >エラー行にブレークポイントを設けてデバッグすればどうなるでしょ >うか。 >ブレークポイントからF5キーで実行して、エラーなくマクロが実行さ >れるかどうかを確認してください。 今回の質問で例にあげさせて頂いたシンプルデータでは、エラー部にブレークポイントを付けると、エラーなく動きました! が、実は、ブレークポイントを付けたり、エラー部で、コメントアウトしてみたりしてテストしていました。 そうすると、次の ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) でエラーがでました。。。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 Cellsの列指定 "A" が影響してます。(環境にもよります。[xl2007]ではOK) ステップ実行だと通るからちょっとタチ悪いですね。 とりあえず ': ActiveChart.SeriesCollection(1).Name = Cells(a_data, 1) ' ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, 2), Cells(c_data - 1, 2)) ActiveChart.SeriesCollection(2).Name = Cells(b_data, 1) ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, 2), Cells(d_data - 1, 2)) ActiveChart.SeriesCollection(3).Name = Cells(c_data, 1) ': "A"を 1 に。"B"を 2 に修正してみてください。 余談ですが、変数を工夫すれば以下のような書き方もできます。 Sub try()   Dim ws As Worksheet   Dim r As Range     'Loop用Range型変数   Dim i As Long      'Loopカウンタ   Dim rs(1 To 4) As Long  'データの区分行   Set ws = Worksheets("Sheet1")   With ws     For Each r In .Range("A1", .Cells(.Rows.Count, 1))       Select Case r.Value       Case "a": rs(1) = r.Row       Case "b": rs(2) = r.Row       Case "c": rs(3) = r.Row       Case "d": rs(4) = r.Row       End Select     Next     With .ChartObjects.Add(30, 10, 500, 200).Chart       .ChartType = xlLineMarkers       .Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic       For i = 1 To 3         With .SeriesCollection.NewSeries           .Values = ws.Range(ws.Cells(rs(i), 2), ws.Cells(rs(i + 1) - 1, 2))           .Name = ws.Cells(rs(i), 1)         End With       Next     End With   End With   Set ws = Nothing End Sub

goo397620
質問者

お礼

>"A"を 1 に。"B"を 2 に修正してみてください。 いろいろ試したものの中に、上記があったのですが、その時もエラーがでました。 しかし、職場で使ってる複雑なデータ(コード)でなく、今回例にあげさせて頂いたシンプルデータ(コード)でなら、エラーなく実行できました! tryプロシージャも試したところ、問題なく動きました! データ系列を複数作成するのに、For~Next使うことは、思いつかなかったので、勉強になりました! 本当にありがとうございました!

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

グラフはセルの範囲!のデータに基づいて描くものです。 セルの範囲にはB1:B6のように指定のほか、名前をつけて、その名前を使える場合があります(ほとんどの場合使えるでしょう) ForNextの内のコードの場合、セル範囲に名前をつけているのでしょうか?つけてないようですが。 >ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") と質問にあるので、名前の仕組みを使う気があるものと思います。 それにdと名づける範囲はどうした、無いのでは? ーーーー 私なら、質問者の意向を尊重しつつ(囚われつつ)やる方法で、下記に参考にコードを挙げます。良いと思った点があれば今後の参考にしてください。 ーーー データ例  A2:B19 A B a 23 45 43 22 12 b 26 17 53 38 29 c 11 19 5 16 11 d 12 18 名前づけルーチンの私案 Sub test03() d = Range("B65536").End(xlUp).Row fst = "y" '最初のブロック pm = 3 '第3行目から始まる k = 1 '名前のサブ番号1から振る For i = 3 To d If Cells(i, "A") <> "" And fst = "n" Then Range(Cells(pm, "A"), Cells(i - 1, "B")).Name = "nm" & k pm = i k = k + 1 End If fst = "n" Next i Range(Cells(pm, "A"), Cells(i - 1, "B")).Name = "nm" & k End Sub これで、nm1-nm4間での名前の定義が出来る。 ーー グラフを描く Sub test04() For k = 1 To 4 ActiveSheet.ChartObjects.Add(30, (k - 1) * 250 + 50, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Range("nm" & k), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet3" Next k End Sub テストデータでは4つのグラフが、Sheet3にカスケード型に並びました。 ほかに、問題点として、質問データだと、項目軸の項目名称が抽象的になる(欠点がある)わけですが、質問者はどう考えていたのかな。

goo397620
質問者

お礼

最初の質問がわかりづらくすいません。 もう少し詳しく説明させて頂くと、 B列のデータは数万行あります。 A列:項目名、B列:データとなります。 (例)aという項目名のデータが1~1000あり、項目名はA列のA1にしか入っていません。 下記のように項目毎に列が別れていればよかったのですが。 A B C D E F 1a 1 b 3 c 5 2 2 4 6 imogasiさんのコードのように「名前づけ」と「グラフ作成」をわけることができるということを知りました。 その方法で、新しく作ってみたいと思います。 ご回答ありがとうございました。

関連するQ&A

  • VBA:2つの異なるシートからグラフを作成する

    VBA初心者です。(はじめてから3日目。。。) もしかすると、すごい簡単なことなのかもしれなくて申し訳ないのですが、質問させてください。 二つの異なるシートのデータを使って、円グラフを作製しようとしています。 ですが、「アプリケーション定義またはオブジェクト定義のエラー」が出てしまいます。 どこが間違っているのかをご教授願えませんでしょうか。 よろしくお願いします。 Sub graph() Charts.Add With ActiveChart .ChartType = xlPie .SeriesCollection(1).XValues = Worksheets(1).Range(Cells(2, 3), Cells(2, 5)) .SeriesCollection(1).Values = Worksheets(2).Range(Cells(3, 2), Cells(3, 4)) .SeriesCollection(1).Name = Worksheets(1).Cells(1, 1) .Location where:=xlLocationAsObject, Name:="sheet3" End With End Sub ちなみに、各セルにはちゃんとデータが入っております。 よろしくお願いいたします。

  • Excelマクロでグラフ作成

    現在、Excelのマクロでグラフを作成しようとしていますが、データ範囲の指定で悩んでいます。 マクロはド素人で右も左もわからない状態から、なんとなく雰囲気だけわかってきたような感じです。 とあるHPをそのまま貼り付け用シートにコピペして、そこからデータ抽出用シートにデータを抽出して蓄積していく形にしています。 品名が複数あるので、オートフィルタを使用してソートするために始点をどう決めるのかがわからないのと、データがどんどん蓄積していくために終点もどう決めたらいいのかわかりません。 「データ抽出用シート」のデータ形式は、 18行目にA:品目 B:最低値 C:平均値 D:最高値 G:日付 19行以降にデータ という形になっています。 とりあえず、通常のマクロを記録する方法でマクロの骨組みだけ作ってから細部をいじろうとしております。 データの範囲を指定する部分だけコピペしますので、ここをどういじったらいいのかご教授願います。 とある品目を指定してオートフィルタをかけた後に、グラフ作成手順のマクロを記録したら、こんな感じになりました。 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("データ抽出用シート").Range("L17") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(1).Values = "=データ抽出用シート!R19C2:R366C2" ActiveChart.SeriesCollection(1).Name = "=データ抽出用シート!R18C2" ActiveChart.SeriesCollection(2).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(2).Values = "=データ抽出用シート!R19C3:R366C3" ActiveChart.SeriesCollection(2).Name = "=データ抽出用シート!R18C3" ActiveChart.SeriesCollection(3).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(3).Values = "=データ抽出用シート!R19C4:R366C4" ActiveChart.SeriesCollection(3).Name = "=データ抽出用シート!R18C4" ActiveChart.Location Where:=xlLocationAsObject, Name:="データ抽出用シート" 宜しくお願いします。

  • マクロでグラフを作成したい

    Charts.Add ActiveChart.ChartType = xlXYScatterLinesNoMarkers For i = 1 To 25    ActiveChart.SeriesCollection.NewSeries    ActiveChart.SeriesCollection(i).XValues = "=APC!"(3,X)":"Range(lngYCut,X)    ActiveChart.SeriesCollection(i).Values = "=APC!Cells(3,Y):Cells(lngYCut,Y)"    ActiveChart.SeriesCollection(i).Name = "=APC!R1C&X"  X = i * 3 + 1   Y = i * 3 + 2 Next 上記のプログラムでグラフを作成しています。(X,Y,lngYCutは事前に定義しています。) 25個のデータをグラフにする為、For文の中でグラフデータを1つずつ追加していこうと思っています。 データ範囲を変数で指定したいため、=のあとを変えないといけないと思っています。 ただ=のあと""で囲っているため、文字として入力しているんだと思います。 その文字列として入力している場所にどうにかして変数を使いたいです。 どなたか ActiveChart.SeriesCollection(i).XValues = のあとに変数を使用できる方法を教えてください

  • excelのマクロによるグラフの指定方法

    マクロがどのように記録されるかを見ながら、VBAのスクリプトの書き方を学んでいる初心者です。 Sub Macro1() ' ' Macro1 Macro , ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveWindow.ScrollColumn = 1 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$B$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$B$4:$B$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$C$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$C$4:$C$18" ActiveChart.ChartType = xlLine ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$D$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$D$4:$D$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$E$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$E$4:$E$18" ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(3).Name = "='平均化'!$F$1" ActiveChart.SeriesCollection(3).Values = "='平均化'!$F$4:$F$18" End Sub 以上のマクロを作成し、実行したのですが、”指定した名前のアイテムが見つかりませんでした”と出て、上手く実行されませんでした。 操作対象のオブジェクトを行き来する方法を知りたいのですが、オブジェクトを作成するたびに ActiveSheet.ChartObjects("グラフ 1").Activate のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

  • Excel VBA グラフチャート名で指定するには

    ExcelのVBAでグラフを作成した後 ActiveChartでアクティブなチャートを指定するのではなく ActiveChart.Nameなどで取得したチャート名で指定するには どのように記述すればよいでしょうか。 例えば、以下のtest()のコードの中の ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows ActiveChart.SetElement (msoElementPrimaryCategoryAxisNone) ActiveChart.PlotArea.Select ActiveChart.Parent.Copy の部分をActiveChartを使わずチャート名(chart_nameなど)で指定するには どのように記述すればよいでしょうか。 よろしくお願いします。(Windows7,Excel2016) --------------------------------------- Sub test()  Dim chart_name As String  ThisWorkbook.Worksheets("Sheet1").Select  ThisWorkbook.Worksheets("Sheet1").Range("A1") = "A"  ThisWorkbook.Worksheets("Sheet1").Range("A2") = "B"  ThisWorkbook.Worksheets("Sheet1").Range("B1") = "75"  ThisWorkbook.Worksheets("Sheet1").Range("B2") = "25"  ThisWorkbook.Worksheets("Sheet1").Range("A10").Select  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart2(297, xlBarStacked100).Select  ThisWorkbook.Worksheets("Sheet1").Select  ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows  chart_name = ActiveChart.Name  chart_name = Trim(Right(chart_name, Len(chart_name) - Len(ActiveSheet.Name)))  ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).Activate  ActiveChart.SetElement (msoElementPrimaryCategoryAxisNone)  ActiveChart.PlotArea.Select  ActiveChart.Parent.Copy End Sub

  • EXCELで、範囲を検出してグラフを作成するマクロを作りたい!

    いつも本当にお世話になっております。 現在、データの範囲を検出して、グラフを作成するマクロを記録させて作っています。 ところが、範囲が固定されてしまい難儀しています。 下にそのマクロを転記いたしますので、ご指摘、ご指導頂ければと存じます。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/11 ユーザー名 : acmr ' ' Sheets("元データ入力").Select 上 = 3 左 = 1 下 = Range(Cells(上, 左), Cells(上, 左)).End(xlDown).Row 右 = Range(Cells(上, 左), Cells(上, 左)).End(xlToRight).Column Range(Cells(上, 左), Cells(下, 右)).Select Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("元データ入力").Range("A3:C459"), PlotBy _ :=xlColumns ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).XValues = "=元データ入力!R4C2:R459C2" ActiveChart.SeriesCollection(1).Name = "" ActiveChart.Location Where:=xlLocationAsObject, Name:="元データ入力" ActiveChart.HasLegend = False End Sub

  • グラフマクロで系列を変数にする方法を教えてください

    エクセルのグラフマクロについて質問します。 系列のxの値(Yの値も)の設定で、 グラフ化したいワークシートと範囲を変数にすることはできますか? 目的は、複数あるシートの複数のセルをグラフ化したい、というものです。 変数にてシート名と範囲を指定したいです。 ↓のようなプログラムを作成してみましたが、どうもうまく動きません。 12行目で止まってしまいます。 13行目はでたらめですが、範囲も変数bにできないかなぁと、勝手にイメージで作ってみました。 Sub () n = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To n Sheets("SHEET1").Select Range("A" & i).Select a = ActiveCell.Value Sheets(a).Select Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(a).Range("V22") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=sheets(a)!R2C4:R5C4" ActiveChart.SeriesCollection(1).Values = "=sheets(a)!range(b)" ActiveChart.Location Where:=xlLocationAsObject, Name:=Sheets(a) Next i End Sub 当方、マクロかじりたての初心者です。 どなたか、よろしくおねがいします!

  • エクセルVBAについて

    前回質問させていただきました件の追加機能になります。以前質問させていただきましたマクロが下記のものです。 Sub TESTa() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("C65536").End(xlUp).Row - 1 For C = 1 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 15) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 6) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 14) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 10) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 13) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("F65536").End(xlUp).Row '0欄の確認 For F = E To 1 Step -1 If Worksheets("Sheet2").Cells(F, 6) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub カウントするとデータ個数がSheet1で約120件になりSheet2においては、4倍になりますので約480件になります。 そこで Sheet1において12件ごとに、Sheet2,3,4...としたいのです。 Sh1 NO.1~12がSheet2 Sh1 NO.13~24がSheet3 ... 10枚のシートにしたいのですが、このマクロにどのような命令を加えればよろしいでしょうか? お手数ですがよろしくお願いいたします。

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

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

  • Excel VBAグラフチャート名で指定するには再

    以前に質問しましたが解決していませんので再度質問します。 ActiveChartではなく、具体的なチャート名で 指定するにはどのように記述すればよいでしょうか。 具体的には、以下のtest()のコードの最後の1行 ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows をActiveChartを使わずに記述するには、 どのように記述すればよいでしょうか。 回答例のように具体的なコードを教えてください。 よろしくお願いします。(Windows10,Excel2016) --------------------------------------- Sub test()  ThisWorkbook.Worksheets("Sheet1").Select  ThisWorkbook.Worksheets("Sheet1").Range("A10").Select  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart2(297, xlBarStacked100).Select  ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows End Sub --------------------------------------- (注1)test()を実行する前にSheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力してから実行してください。 (回答例) --------------------------------------- Sub test()  Dim chart_name As String  ThisWorkbook.Worksheets("Sheet1").Select  ThisWorkbook.Worksheets("Sheet1").Range("A10").Select  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart2(297, xlBarStacked100).Select  chart_name = ActiveChart.Name  chart_name = Trim(Right(chart_name, Len(chart_name) - Len(ActiveSheet.Name)))  ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows End Sub --------------------------------------- (注2)ただし、このコードではエラーになります。 (注3)回答例のようにチャート名を取得するためにActiveChartを使用するのは可です。

専門家に質問してみよう