• 締切済み

任意にデータの範囲を選択し、グラフを描画したい

質問を閲覧していただきありがとうございます。 できればみなさんのお力を貸していただきたいことがあり、質問しました。 以下にマクロ作成に用いたプログラムの仕様とコードを貼りますので、ご指摘等いただけましたら幸いです。 まず、今回のマクロの目的は ・既に存在するエクセルデータから、x軸、y軸のデータ列の長さに応じたグラフを描画するVBプログラムを書く事 です。 ・可能ならば、既存のふたつのグラフを結合したものを新しく表示する ※データシートの画像は添付しましたのでご覧ください。 以上のふたつとなります。 理想形としては、 A2 ~ A1025までをx軸のデータ、B2~B1025までの実データ値としたグラフAを一つ D2 ~ E1025までをx軸のデータ、E2~E1025までの実データ値としたグラフBを一つ 上記二つのグラフを結合したグラフを一つ の3つのグラフが自動的に作成され、エクセルファイル上に表示されている といったような感じです。 私の書いたコードの問題点としては、 ・グラフAグラフBともに「x軸と実データが正しく対応していない」 →本来両方のグラフにおいてはグラフの右端まで折れ線グラフが続いているはずですが、x軸の値にして約1000の所でデータが終わってしまっています。 ・グラフBでは、D2 ~ D344, E2 ~ E344 を基にしたグラフ一つのみが描画されているはずですが、ここには何故か二つ以上の折れ線グラフがあるようにみえ、グラフB右には系列1~5までがあるように書かれています。(理想としては5個ではなく実データを示すもの一つのみ) ・ふたつのグラフの結合方法が不明 という感じです。 以下にプログラムを貼ります。 お時間ありましたら、ご指摘の程宜しくお願い致します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub グラフ描画() chart_title1 = "グラフA" chart_title2 = "グラフB" '軸のタイトル x_title = "周波数[Hz]" y_title = "パワー" ' -------------------------グラフ作成---------------------- ' グラフを描画 Dim chartObj1 As ChartObject Set chartObj1 = ActiveSheet.ChartObjects.Add(1, 1, 300, 200) With chartObj1.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("B2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("A2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With Dim chartObj2 As ChartObject Set chartObj2 = ActiveSheet.ChartObjects.Add(1, 320, 300, 200) With chartObj2.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("E2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("D2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • crein
  • お礼率50% (2/4)

みんなの回答

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

#1です。 A,B列と、C,D列のデータ数が異なる場合は、それぞれ別個に取得してやれば良いです。 少しはスッキリさせたいと、他のところも多少いじってあります。ご参考まで。 Sub グラフ描画() Dim chart_title1 As String, chart_title2 As String Dim x_title As String, y_title As String Dim chartObj1 As ChartObject Dim chartObj2 As ChartObject Dim dataRange1 As Range, dataRange2 As Range Dim strFormula As String Dim mySheet As Worksheet Dim seriesA1 As Series, seriesA2 As Series, seriesB As Series Const seriesFormula = "=SERIES(myColTytle,myXValues,myValues,myNo)" chart_title1 = "グラフA" chart_title2 = "グラフB" '軸のタイトル x_title = "周波数[Hz]" y_title = "パワー" ' -------------------------グラフ作成---------------------- ' グラフを描画 Set mySheet = ActiveSheet Set chartObj1 = mySheet.ChartObjects.Add(200, 1, 200, 300) With mySheet Set dataRange1 = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)).Resize(, 2) Set dataRange2 = .Range(.Range("C2"), .Range("C" & .Rows.Count).End(xlUp)).Resize(, 2) End With With chartObj1.Chart Set seriesA1 = .SeriesCollection.NewSeries seriesA1.XValues = dataRange1.Columns(1) seriesA1.Values = dataRange1.Columns(2) Set seriesA2 = .SeriesCollection.NewSeries seriesA2.XValues = dataRange2.Columns(1) seriesA2.Values = dataRange2.Columns(2) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .SetElement msoElementLegendTop .HasTitle = True .ChartTitle.Characters.Text = chart_title1 .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title End With Set chartObj2 = mySheet.ChartObjects.Add(420, 1, 200, 300) With chartObj2.Chart .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 Set seriesB = .SeriesCollection.NewSeries strFormula = seriesFormula strFormula = Replace(strFormula, "myColTytle", "") strFormula = Replace(strFormula, "myXValues", _ "(" & mySheet.Name & "!" & dataRange1.Columns(1).Address & "," & mySheet.Name & "!" & dataRange2.Columns(1).Address & ")") strFormula = Replace(strFormula, "myValues", _ "(" & mySheet.Name & "!" & dataRange1.Columns(2).Address & "," & mySheet.Name & "!" & dataRange2.Columns(2).Address & ")") strFormula = Replace(strFormula, "myNo", "1") seriesB.Formula = strFormula ' オプションをセット .HasTitle = True .SetElement msoElementLegendTop .ChartTitle.Characters.Text = chart_title2 .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title End With End Sub

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

無理矢理ですが、下記の様なコードでいかがでしょうか。 データを統合するのに、XValues, Valuesを指定する方法は分かりませんでしたので(UnionではNG)、Formulaを指定しています。適当な試験データを使ったので、軸の最大値、最小値指定は削りました。Replaceを使っているのは文字列の合成がやたらと長くなるのを防止するためですが、十分長いですね(^^;) グラフBのseries formulaは、「=SERIES(,(Sheet1!$A$2:$A$1025,Sheet1!$C$2:$C$1025),(Sheet1!$B$2:$B$1025,Sheet1!$D$2:$D$1025),1)」となっています。 Sub グラフ描画() Dim chart_title1 As String, chart_title2 As String Dim x_title As String, y_title As String Dim chartObj1 As ChartObject Dim chartObj2 As ChartObject Dim targetRange As Range Dim strFormula As String Const seriesFormula = "=SERIES(myColTytle,myXValues,myValues,myNo)" chart_title1 = "グラフA" chart_title2 = "グラフB" '軸のタイトル x_title = "周波数[Hz]" y_title = "パワー" ' -------------------------グラフ作成---------------------- ' グラフを描画 Set chartObj1 = ActiveSheet.ChartObjects.Add(200, 1, 200, 300) With ActiveSheet Set targetRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)).Resize(, 4) End With With chartObj1.Chart .SeriesCollection.NewSeries '本来は下記で十分 第二段階への伏線でテスト '.SeriesCollection(1).XValues = targetRange.Columns(1) '.SeriesCollection(1).Values = targetRange.Columns(2) strFormula = seriesFormula strFormula = Replace(strFormula, "myColTytle", "") strFormula = Replace(strFormula, "myXValues", ActiveSheet.Name & "!" & targetRange.Columns(1).Address) strFormula = Replace(strFormula, "myValues", ActiveSheet.Name & "!" & targetRange.Columns(2).Address) strFormula = Replace(strFormula, "myNo", "1") .SeriesCollection(1).Formula = strFormula .SeriesCollection.NewSeries '.SeriesCollection(2).XValues = targetRange.Columns(3) '.SeriesCollection(2).Values = targetRange.Columns(4) strFormula = seriesFormula strFormula = Replace(strFormula, "myColTytle", "") strFormula = Replace(strFormula, "myXValues", ActiveSheet.Name & "!" & targetRange.Columns(3).Address) strFormula = Replace(strFormula, "myValues", ActiveSheet.Name & "!" & targetRange.Columns(4).Address) strFormula = Replace(strFormula, "myNo", "2") .SeriesCollection(2).Formula = strFormula ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .SetElement msoElementLegendTop .HasTitle = True .ChartTitle.Characters.Text = chart_title1 .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title End With Set chartObj2 = ActiveSheet.ChartObjects.Add(420, 1, 200, 300) With chartObj2.Chart .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .SeriesCollection.NewSeries strFormula = seriesFormula strFormula = Replace(strFormula, "myColTytle", "") strFormula = Replace(strFormula, "myXValues", _ "(" & ActiveSheet.Name & "!" & targetRange.Columns(1).Address & "," & ActiveSheet.Name & "!" & targetRange.Columns(3).Address & ")") strFormula = Replace(strFormula, "myValues", _ "(" & ActiveSheet.Name & "!" & targetRange.Columns(2).Address & "," & ActiveSheet.Name & "!" & targetRange.Columns(4).Address & ")") strFormula = Replace(strFormula, "myNo", "1") .SeriesCollection(1).Formula = strFormula ' オプションをセット .HasTitle = True .SetElement msoElementLegendTop .ChartTitle.Characters.Text = chart_title2 .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title End With End Sub

参考URL:
http://okwave.jp/qa/q8310732.html
crein
質問者

お礼

早速の返信ありがとうございます! 私が提示していた問題点についてなのですが、 データがx軸に正しく対応してない問題は解消できました! ただ、もし宜しければ一つお聞きしたいことがあります。 今回の二つのグラフを一つの図に書く場合、 「二つのグラフの要素数が等しい場合」には問題なく動いたのですが 「二つのグラフの要素数が異なる場合」にはグラフの描画を行うことができませんでした。 この、「二つのグラフの要素数が異なる場合」にも、 一つの図に二つのグラフを書く為にはどの様にすればいいのでしょうか? 私の説明不足もあり再度の質問となってしまし申し訳ありません。 もしお時間ありましたらご回答いただければと思います。 以上 回答ありがとうございました

関連するQ&A

  • Sub M()

    Sub M() Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range("A1:A289,B289").Select Range("B289").Activate Range(Selection, Selection.End(xlUp)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("08.31_n3_rev477_fai0_x300_y20_z"). _ Range("A1:B289"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T[sec]" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "U[v]" End With Sheets("08.31_n3_rev477_fai0_x300_y20_z").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range("A1:A289,C289").Select Range("C289").Activate Range(Selection, Selection.End(xlUp)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("08.31_n3_rev477_fai0_x300_y20_z"). _ Range("A1:A289,C1:C289"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T[sec]" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "U[v]" End With End sub このプログラムなのですが、 A289をx軸 B289~IV289までがy軸 上のプログラムをIV289までまわそうとFor文を 使って繰り返そうとしていますが、うまくできません。 どのようにFor文を使ったらいいでしょうか? サンプルをお願いします。

  • 自動グラフ作成マクロの作り方に関してアドバイスを下さい

    Sub Macro4() For i = 4 To 8 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=zero!R13C1:R1013C1" ActiveChart.SeriesCollection(1).Values = "=zero!R13C" & i & ":R1013C" & i ActiveChart.SeriesCollection(1).Name = "=zero!R12C" & i ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x axis" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y axis" End With Next End Sub これはzeroというシートから自動的に複数のグラフを作成するマクロなのですが、 これを現在選択しているシートにするためにはどうすれば良いのでしょうか? それと作成するグラフの名称を自分で設定したセルの内容にしたいのですが、 どうすれば良いのでしょうか? よろしくお願い致します。

  • Excelでのグラフ作成用マクロについて。

    「新しいマクロを記録する」でグラフ作成用のマクロを作りました。 内容は、 1.sheet1のBC列を散布図でsheet2に出力。(4つほど別々のグラフを作成) 2.プロットエリアの拡大 3.図の位置調整・図の大きさ調整。(4つが重ならないように) というものです。 一応出来たのですが、何故か選択列を変更して(マクロ内の列選択を変更)出力・プロットエリア拡大までは出来るのですが、3が出来ません。 それで、分からないなりにマクロ内を覗いてみたところ、図の位置を調整する際に、対象となる図が ActiveSheet.Shapes("グラフ 17").IncrementLeft -177.75 などと言うように、グラフ17を参照してしまっているためにうまく動かないのだと思いました。 (そもそも、名前なんて付けていないはず・・・と思って調べていたら、どうやら「グラフウインドウ」で見ることが出来る名前を参照しているようでした。) いっそのこと、グラフをクリック・ドラッグで移動させるのではなく、出力する際に整然と並ぶように設定したいです。どうすればよいでしょう? 一応、作成したものを載せておきます。 ・1~2 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "mass" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "counts" End With ActiveChart.HasLegend = False ActiveChart.PlotArea.Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Selection.Top = 1 Selection.Width = 323 Selection.Height = 180 Selection.Left = 15 Selection.Width = 334 Selection.Height = 194 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 0 .MaximumScale = 50 .MinorUnitIsAuto = True .MajorUnit = 5 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With End Sub 3. ActiveSheet.Shapes("グラフ 17").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 17").IncrementTop -105.75 End Sub

  • エクセルグラフの軸ラベルを一括変換出来なくて困っています。

    お世話になります。 初めて投稿いたします。 VBA初心者です。エクセルグラフの軸ラベルを一括変換したいのですが、分からなくて困っています。 過去ログ、個人HPなどを参考にして、一つのグラフを選択、下記マクロを実行すれば、一つのグラフのみなら軸ラベルを変更する事が出来たのですが、ワークシート内の複数の埋め込みグラフを一発でラベル変更する場合のマクロが作成できません。 当方会社員、データをまとめる為、今回100ヶほどのグラフを一括変換したいため、どうしてもマクロ処理したいと考えています。 For Each・・・Next でループさせたいのですが、何分初心者勉強中の為、エラー多発、何方かお分かりの方、お助け下さい。 Sub 軸ラベル一括変換() With ActiveChart With .Axes(xlCategory, xlPrimary) .HasTitle = True .AxisTitle.Text = "X" End With With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = "y" End With End With End Sub

  • VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

    始めまして、VBA初心者のものです。 ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。 Sub 繰り返し() '繰り返し Dim s As Integer For s = 0 To 17 Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select Range("cells(8,s+2)").Activate Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _ "cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns ActiveChart.SeriesCollection(1).Name = "=""0810p2x""" ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "0810p2x" .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t" .Axes(xlValue, xlPrimary).HasTitle = False End With Next End Sub

  • グラフの自動描画を行うときに系列名を非表示に

    下記のマクロでグラフを自動描画しています。 この中で、いくつかの点で自分の思うような描画ができていません。今は、描画後に手動にて対応していますが、できることならその手間を省きたく思っています。 ・系列名は不要 ・縦軸、横軸のフォントサイズを指定したい ・データラベルが「0(ゼロ)」の場合は表示しない 何しろマクロ初心者なものです。ご教示をお願いします。 Sub グラフ作成() With ActiveSheet.Shapes.AddChart.Chart .ChartType = xlColumnClustered .SetSourceData Range("V5:W49") End With Dim i As Long With ActiveSheet.ChartObjects(1).Chart For i = 1 To .SeriesCollection.Count .SeriesCollection(i).HasDataLabels = True Next i End With With ActiveSheet.ChartObjects(1).Chart .HasTitle = True .ChartTitle.Characters.Text = Range("W2") & "製造年別グラフ" With .ChartTitle.Format.TextFrame2.TextRange.Font .Size = 6 .Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2 End With With .Axes(xlCategory, xlPrimary) '---主軸項目軸 .HasTitle = True '---軸ラベル表示 .AxisTitle.Text = "製造年" '---軸ラベル文字列設定 .AxisTitle.Font.Size = 4 End With With .Axes(xlValue, xlPrimary) '---主軸数値軸 .HasTitle = True '---軸ラベル表示 .AxisTitle.Text = "数量" '---軸ラベル文字列設定 .AxisTitle.Font.Size = 4 End With End With End Sub

  • Excelでのグラフ作成用マクロについて

    Excelで、グラフ作成をするマクロを作りました。 sheet1のBC列選択→sheet2に出力→プロットエリア拡大まではうまくいったのですが、肝心の「図の位置調整・サイズ調整」が出来ませんでした。 中身を見たところ、「グラフ12」とかいう名前が勝手についていたらしく、何回やってもその名前を変更することが出来ませんでした。 参照する列を変更してグラフを作成しようとすると、次のグラフが「グラフ13」となってしまい、図の位置調整のところでエラーになります。 マクロは次のようなものなのですが、どうすれば「グラフ12」ではなく、「先ほど作ったばかりのグラフ」を参照してくれるのでしょうか? グラフ12という部分に任意の名前さえつけられれば、何とかなりそうなのですが・・・ グラフ12というものは、「グラフウインドウ」で見られるもののようです。 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With ActiveSheet.Shapes("グラフ 12").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 12").IncrementTop -105.75 ActiveSheet.Shapes("グラフ 12").ScaleWidth 1.48, msoFalse, msoScaleFromTopLeft ActiveSheet.Shapes("グラフ 12").ScaleHeight 1.21, msoFalse, msoScaleFromTopLeft ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.PlotArea.Select Selection.Top = 1 Selection.Width = 526 Selection.Height = 242 End Sub

  • 【Excel】マクロでグラフ系列に不明なデータが追加されてしまう問題

    はじめまして。 数日ほど色々な文献を調べたのですが、どうしても解決法が見つからなかったので質問させてください。 利用環境:Windows XP SP2 使用ソフト:Excel 2003 SP3 【問題】 マクロで自動的にデータを取り込み、複数のグラフを作成すると 2ワークシートごとに不明な系列データが追加されてしまう。 【具体的な症状】 Excelファイル(.xls)は1つのみです。 そこに1つのワークシートがあります。 例:RH001 そして、そのワークシートには以下の範囲に12個のデータが載っています。 AB12:AB112、AC:12:AC112、AD:12:AD112、AE12:AE112(28~31列) AJ12:AJ112、AK:12:AK112、AL:12:AL112、AM12:AM112(36~39列) AR12:AR112、AS:12:AS112、AT:12:AT112、AU12:AU112(44~47列) X軸は何も使用していません。 このデータをマクロを利用してグラフ化する際に ループで3つのワークシートを作り、4つのデータ系列を追加しています。 しかし、ワークシートの偶数番目(今回はワークシート2番)になると なぜか、ループとは関係の無いデータ系列が存在しています。 今回は、通常4つのところを9つのデータ系列にになってしまいます。 どうも調べてみると、余分なデータ系列は 「通常のデータ系列の数+1」だけ追加されるようです。 自分なりにデータをいじったり、ネットの文献を色々と調べてみたのですが、 数日経った今も全く解決出来ておりません。 どなたか解決方法をご教授ください。 よろしくお願いします。 ---------------------------------------------------------------- Sub test() 'ループで参照するワークシートを設定 strNameWorkSheet = "RH001" 'AB~AE、AJ~AM/AR~AUのデータをワークシートに分けるためのループ For q = 1 To 3 'グラフの作成 Charts.Add ActiveChart.ChartType = xlLineMarkers 'AB/AC/AD/AE、AJ/AK/AL/AM、AR/AS/AT/AUごとに新しいデータ系列を作るためのループ For m = 1 To 4 '新しい系列を追加 ActiveChart.SeriesCollection.NewSeries 'ループ時に列を横にずらしていく。qで8列ずらし、mで1列ずらす ActiveChart.SeriesCollection(m).Values = _ Sheets(strNameWorkSheet).Range(Sheets(strNameWorkSheet).Cells(12, 8 * q + 19 + m), _ Sheets(strNameWorkSheet).Cells(112, 8 * q + 19 + m)) Next m 'グラフのワークシート名を設定 strGraphName = strNameWorkSheet & q ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=strGraphName With ActiveChart .HasTitle = True .ChartTitle.Text = strGraphName .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "スラスト方向変位(mm)" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "各方向磁気力(N)" End With Next q End Sub

  • 現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成

    現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成中です。 以下のようなマクロまでは作ることができましたが、ひとつだけ不満があります。 それは、初期値です。 できれば、最初に選択したグラフの設定を初期としてダイアログの入力欄に記入してある状態にしたいのですが、どうすればよいかわかりません。 知恵を貸してください!! よろしくお願いいたします!!! Sub 選択したグラフ縦横軸変更() Dim chartObj As ChartObject Dim myObj As Object Dim xmin As Double Dim xmax As Double Dim ymin As Double Dim ymax As Double xmin = Application.InputBox("x軸最小値") xmax = Application.InputBox("x軸最大値") ymin = Application.InputBox("y軸最小値") ymax = Application.InputBox("y軸最大値") For Each myObj In Selection Set chartObj = ActiveSheet.ChartObjects(myObj.Name) With chartObj.Chart.Axes(xlCategory) .MaximumScale = xmax .MinimumScale = xmin End With With chartObj.Chart.Axes(xlValue) .MaximumScale = ymax .MinimumScale = ymin End With Next myObj End Sub

  • AccessからEXCELのグラフの操作をしたい

    AccessからExcelのシートのデータを参照して EXCELのグラフを操作しています グラフのテキストに任意の文字を入れたいのですが msoTextOrientationHorizontal で(定数が定義されていません) とコンパイルエラーになってしまいます これを回避する方法がありましたらご教授ください 初めてグラフを操作するので困っています         '// グラフのデータを設定    ActiveChart.SetSourceData Source:=Sheets("DATA").Range("B1:B7,D1:D7") '// グラフテキスト ActiveChart.ChartTitle.Text = "テスト" ' /// X数値軸ラベル" ActiveChart.Axes(xlCategory).AxisTitle.Text = "X数値軸ラベル" '/// Y数値軸ラベル ActiveChart.Axes(xlValue).AxisTitle.Text = "Y数値軸ラベル" ' '//グラフ内にテキストボックスの埋め込み With ActiveChart With .Shapes.AddTextbox(msoTextOrientationHorizontal, 13, 10, 70, 50) .TextFrame.Characters.Text = "へのへのもへじ End With End With

専門家に質問してみよう