Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4176 / 13646 ツリー ←次へ | 前へ→

【58048】VBA 上からの標準グラフの設定方法 L-way 08/9/29(月) 18:40 質問[未読]
【58049】Re:VBA 上からの標準グラフの設定方法 L-way 08/9/29(月) 18:55 質問[未読]
【58053】Re:VBA 上からの標準グラフの設定方法 kanabun 08/9/30(火) 1:47 発言[未読]
【58063】Re:VBA 上からの標準グラフの設定方法 L-way 08/9/30(火) 19:16 お礼[未読]

【58048】VBA 上からの標準グラフの設定方法
質問  L-way  - 08/9/29(月) 18:40 -

引用なし
パスワード
   Excel2007 で、
「グラフエリア選択」→「グラフの種類の変更ボタン」→「グラフ種類選択」→「標準グラフに設定ボタン」で、標準グラフを変更できますが、
これをVBA上から設定できるでしょうか?
(散布図(平滑線)グラフに設定させたいです)

と申しますのも、関数的なグラフを描写しているのですが、
例えば標準グラフの設定が折れ線等になっている Excel では、
期待するグラフにならないのです。

なぜかわかりませんが、標準グラフを(散布図(平滑線)グラフ)にしておくと、
期待通りのグラフが出力されます。

ですので、設定されている標準グラフを、ブックのオープンと同時にVBA上から変更しておけるといいのかな、と思ったのです。

本来であれば、なぜ期待する結果にならないかの根本的な解決をすべきでしょうが、
まずはVBA 上からの標準グラフの設定ができるかどうかを教えていただけるでしょうか?
よろしくお願いいたします。

【58049】Re:VBA 上からの標準グラフの設定方法
質問  L-way  - 08/9/29(月) 18:55 -

引用なし
パスワード
   追加します。

なぜ標準グラフが折れ線等の場合だと期待する結果にならないか、
具体例で説明します。

↓のアップローダにグラフソースのデータをアップしてます。
ht tp://www.uploda.org/uporg1697297.zip.html

このデータのA列のデータをグラフの横軸、
B列のデータをグラフの縦軸に設定します。

グラフ描写のためのソースは以下になります。
-----------------------------------
With ActiveSheet.ChartObjects.Add(gr.Left, gr.Top, gr.Width, gr.Height)
  .Name = "グラフ1"
  .Chart.SetSourceData SourceRange
  .Chart.ChartType = xlXYScatterSmoothNoMarkers
  .Chart.HasTitle = False
  .Chart.HasLegend = False
  .Chart.Axes(Type:=xlValue).HasTitle = True
  .Chart.Axes(Type:=xlValue).AxisTitle.Text = "スペクトル"
  .Chart.Axes(Type:=xlValue).MaximumScale = MaxValue
  .Chart.Axes(Type:=xlValue).MinimumScale = 0
  .Chart.Axes(Type:=xlValue).CrossesAt = 0
  .Chart.Axes(Type:=xlValue).MajorUnit = (MaxValue / 10)
  .Chart.Axes(Type:=xlValue).TickLabels.NumberFormat = "0.0E+00"

  .Chart.Axes(Type:=xlCategory).HasTitle = True
  .Chart.Axes(Type:=xlCategory).AxisTitle.Text = "周波数"
  .Chart.Axes(Type:=xlCategory).MinimumScale = 0.001
  .Chart.Axes(Type:=xlCategory).MaximumScale = 100.1
  .Chart.Axes(Type:=xlCategory).Crosses = xlAxisCrossesMinimum
  .Chart.Axes(Type:=xlCategory).ScaleType = xlScaleLogarithmic
  .Chart.Axes(Type:=xlCategory).LogBase = 10
  
End With

ActiveSheet.ChartObjects("グラフ1").Activate

  With ActiveChart.SeriesCollection(1).Border
    .ColorIndex = 1
    .Weight = xlThin
  End With
-----------------------------------

グラフ描写部のソースは同一なのですが、
標準グラフの設定が「散布図(平滑線)」の場合は、横軸の周波数がちゃんと表示されますが、
標準グラフの設定が「散布図以外」になっていると、横軸が1からの部分しか船が描写されません。

また、線の太さ、色の設定もデフォルトになってしまいます。
-------------------------
    .ColorIndex = 1
    .Weight = xlThin
-------------------------
の部分で設定しているにも関わらずです。

どうしてこうなるか皆目見当が付かないのが、正直なところです。

最初の投稿に書いたように、「標準グラフの設定」を「散布図(平滑線)」に設定すれば、ちゃんとグラフが出るため、
VBA上から標準グラフの設定ができればいいな、と思った次第です。

根本的な解決法(なぜグラフが出ないか)もわかる方がいらっしゃいましたら、
こちらについてもご教授いただければ幸いです。

長文失礼いたしました。
よろしくお願いいたします。

【58053】Re:VBA 上からの標準グラフの設定方法
発言  kanabun  - 08/9/30(火) 1:47 -

引用なし
パスワード
   ▼L-way さん:
こんばんは。

>グラフ描写部のソースは同一なのですが、
>標準グラフの設定が「散布図(平滑線)」の場合は、横軸の周波数がちゃんと表示されますが、
>標準グラフの設定が「散布図以外」になっていると、横軸が1からの部分しか船が描写されません。

よく検証してなくてゴメンですが、

標準グラフは変更なしで、
代わりに
グラフの元データ範囲を選択してから(もちろん、マクロ内で)グラフの種類を
宣言してみてはどうでしょう?

'-----------------------------------
Sub Test2()
 Dim SourceRange As Range
 Dim gr As Range
 Dim MaxValue#
 MaxValue = 300 '??? '◆要 変更
 
 With ActiveSheet
   Set SourceRange = .Range("A1").CurrentRegion
   SourceRange.Select '◆追加
   
   Set gr = .[D5].Resize(19, 8) '◆要 変更
   With .ChartObjects.Add(gr.Left, gr.Top, gr.Width, gr.Height)
    .Name = "グラフ1"
    .Chart.ChartType = xlXYScatterSmoothNoMarkers '◆順番変更
    .Chart.SetSourceData SourceRange, xlColumns
    .Chart.HasTitle = False
    .Chart.HasLegend = False
    With .Chart.Axes(Type:=xlValue)
      .HasTitle = True
      .AxisTitle.Text = "スペクトル"
      .MaximumScale = MaxValue
      .MinimumScale = 0
      .CrossesAt = 0
      .MajorUnit = (MaxValue / 10)
      .TickLabels.NumberFormat = "0.0E+00"
    End With
    With .Chart.Axes(Type:=xlCategory)
      .HasTitle = True
      .AxisTitle.Text = "周波数"
      .MinimumScale = 0.001
      .MaximumScale = 100.1
      .Crosses = xlAxisCrossesMinimum
      .ScaleType = xlScaleLogarithmic
      .LogBase = 10
    End With
    With .Chart.SeriesCollection(1).Border
      .ColorIndex = 1
      .Weight = xlThin
    End With
   End With
 End With

End Sub

【58063】Re:VBA 上からの標準グラフの設定方法
お礼  L-way  - 08/9/30(火) 19:16 -

引用なし
パスワード
   ▼kanabun さん:
ご教授いただきありがとうございました。

グラフの種類の宣言をグラフ範囲の後にして、
期待する結果になりました。

順番も関係あったんですね。勉強不足でした。

ありがとうございました〜。

4176 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free