Excel VBA質問箱 IV

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

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


8086 / 13645 ツリー ←次へ | 前へ→

【35187】グラフの最大値と最小値について ぷーちゃん 06/2/23(木) 14:08 質問[未読]
【35190】Re:グラフの最大値と最小値について Kein 06/2/23(木) 14:44 回答[未読]
【35196】Re:グラフの最大値と最小値について ぷーちゃん 06/2/23(木) 16:31 質問[未読]
【35197】Re:グラフの最大値と最小値について Kein 06/2/23(木) 16:41 発言[未読]
【35205】Re:グラフの最大値と最小値について ぷーちゃん 06/2/23(木) 18:35 質問[未読]
【35208】Re:グラフの最大値と最小値について Kein 06/2/23(木) 20:29 発言[未読]
【35209】Re:グラフの最大値と最小値について ぷーちゃん 06/2/23(木) 20:35 お礼[未読]

【35187】グラフの最大値と最小値について
質問  ぷーちゃん  - 06/2/23(木) 14:08 -

引用なし
パスワード
   下のコードで、グラフ596のY軸の最大値と最小値を計算しているのですが、Y軸は3列あるので、3列すべての最大値と最小値を計算したいのです。
下のコードでは、1列目の最大値と最小値になってしまいます。
たぶん、SeriesCollection(1)のところを変更するのだと思いますが、どなたか解る方、よろしくお願い致します。

Set MyCh = ActiveSheet.ChartObjects("グラフ 596")
  Set MySe = MyCh.Chart.SeriesCollection(1)
  With WorksheetFunction
  MxP = .Ceiling(.Max(MySe.Values), 0.05)
  MiP = .Floor(.Min(MySe.Values), 0.05)

【35190】Re:グラフの最大値と最小値について
回答  Kein  - 06/2/23(木) 14:44 -

引用なし
パスワード
   やっぱり応用が出来なかったのですね・・。それなら初めから「系列は3つある」と
条件を提示すればよかったと思います。二度手間にならずに済むのだから。
ま、いちおうこんな感じで。

Sub MyChart_Set_Axis2()
  Dim MyCh As Chart, MySe As Variant
  Dim i As Integer
  Dim MxP As Single, MiP As Single
 
  Set MyCh = ActiveSheet.ChartObjects(1).Chart
  Set MySe = MyCh.SeriesCollection
  With WorksheetFunction
   For i = 1 To MySe.Count
     If i = 1 Then
      MxP = .Max(MySe.Item(i).Values)
      MiP = .Min(MySe.Item(i).Values)
     Else
      If .Max(MySe.Item(i).Values) > MxP Then
        MxP = .Max(MySe.Item(i).Values)
      End If
      If .Min(MySe.Item(i).Values) < MiP Then
        MiP = .Min(MySe.Item(i).Values)
      End If
     End If
   Next i
   MxP = .Ceiling(MxP, 0.05)
   MiP = .Floor(MiP, 0.05)
  End With
  With MyCh.Axes(xlValue)
   .MajorUnit = 0.05
   .MinimumScale = MiP
   .MaximumScale = MxP
  End With
  Set MySe = Nothing: Set MyCh = Nothing
End Sub

【35196】Re:グラフの最大値と最小値について
質問  ぷーちゃん  - 06/2/23(木) 16:31 -

引用なし
パスワード
   ▼Kein さん:
>Sub MyChart_Set_Axis2()
>  Dim MyCh As Chart, MySe As Variant
>  Dim i As Integer
>  Dim MxP As Single, MiP As Single
> 
>  Set MyCh = ActiveSheet.ChartObjects(1).Chart
>  Set MySe = MyCh.SeriesCollection
>  With WorksheetFunction
>   For i = 1 To MySe.Count
>     If i = 1 Then
>      MxP = .Max(MySe.Item(i).Values)
>      MiP = .Min(MySe.Item(i).Values)
>     Else
>      If .Max(MySe.Item(i).Values) > MxP Then
>        MxP = .Max(MySe.Item(i).Values)
>      End If
>      If .Min(MySe.Item(i).Values) < MiP Then
>        MiP = .Min(MySe.Item(i).Values)
>      End If
>     End If
>   Next i
>   MxP = .Ceiling(MxP, 0.05)
>   MiP = .Floor(MiP, 0.05)
>  End With
>  With MyCh.Axes(xlValue)
>   .MajorUnit = 0.05
>   .MinimumScale = MiP
>   .MaximumScale = MxP
>  End With
>  Set MySe = Nothing: Set MyCh = Nothing
>End Sub


Keinさん。二度手間をとらせて申し訳ありません。
それで、どうしてもグラフごとの最小値をもとにして切のいい値をグラフスケールの最大値と最小値にしたかったので、Keinさんに教えてもらった上のコードと合わせて下記のコードを作ったのですが、
With MyCh.Chart.Axes(xlValue) の .Chart のところで、コンパイルエラー(メソッドまたはデータメンバが見つかりません)となってしまいます。
まだ、なにも解っていない超初心者なので変なコードになっていると思いますが、どのようにすればいいのか教えて頂きたく、お願い致します。
(長くなって、すいません。)


  Dim MyCh As Chart, MySe As Variant
  Dim i As Integer
  Dim MxP As Single, MiP As Single
  Dim KanB As Single

  AAA1 = 5
  AAA2 = 10
  AAA3 = 50
  AAA4 = 500
  AAA5 = 5000
  AAA6 = 50000
  AAA7 = 500000

  BBB = 5

ActiveSheet.ChartObjects("グラフ 809").Activate
  Set MyCh = ActiveSheet.ChartObjects(1).Chart
  Set MySe = MyCh.SeriesCollection
  With WorksheetFunction
   For i = 1 To MySe.Count
     If i = 1 Then
      MxP = .Max(MySe.Item(i).Values)
      MiP = .Min(MySe.Item(i).Values)
     Else
      If .Max(MySe.Item(i).Values) > MxP Then
        MxP = .Max(MySe.Item(i).Values)
      End If
      If .Min(MySe.Item(i).Values) < MiP Then
        MiP = .Min(MySe.Item(i).Values)
      End If
     End If
   Next i

   MxP = .Ceiling(MxP, 0.05)
   MiP = .Floor(MiP, 0.05)

  End With
  
If MiP < 100 Then KanB = AAA1
If MiP >= 100 And MiP < 1000 Then KanB = AAA2
If MiP >= 1000 And MiP < 10000 Then KanB = AAA3
If MiP >= 10000 And MiP < 100000 Then KanB = AAA4
If MiP >= 100000 And MiP < 1000000 Then KanB = AAA5
If MiP >= 1000000 And MiP < 10000000 Then KanB = AAA6
If MiP > 10000000 Then
KanA = AAA7
End If
   
  With WorksheetFunction
   MxP = .Ceiling(.MxP, KanB)
   MiP = .Floor(.MiP, KanB)
  End With
    
  With MyCh.Chart.Axes(xlValue)
   .MinimumScale = MiP
   .MaximumScale = MxP
  End With

  BMa1 = MyCh.Chart.Axes(xlValue).MajorUnit
  BMi1 = MyCh.Chart.Axes(xlValue).MinimumScale
  BBB1 = BMi1 + BMa1
  BBB4 = BMi1 + BMa1 * (BBB - 1)
  BBB5 = BMi1 + BMa1 * BBB
  
  BBB11 = ((BBB1 / BMi1) - 1) * 100
  BBB55 = ((BBB5 / BBB4) - 1) * 100
 
  Range("IT1") = Round(BBB11, 1)
  Range("IU1") = Round(BBB55, 1)

【35197】Re:グラフの最大値と最小値について
発言  Kein  - 06/2/23(木) 16:41 -

引用なし
パスワード
   >With MyCh.Chart.Axes(xlValue) の .Chart のところで、コンパイルエラー
今回のレスからは、変数 MyCh を ChartObject ではなく、それのプロパティである
Chart を指定するように変更しています。なので宣言のところが

Dim MyCh As Chart

になっていて、それにオブジェクトをセットするコードは

Set MyCh = ActiveSheet.ChartObjects(1).Chart

になります。だから With MyCh.Chart.Axes(xlValue) では Chart が
重複してしまってエラーになるわけです。そこは当然

With MyCh.Axes(xlValue)

としなくてはならないことが、お分かりになるはずです。
こちらのレスも細かい改良を追加しているので、注意深くみてください。

【35205】Re:グラフの最大値と最小値について
質問  ぷーちゃん  - 06/2/23(木) 18:35 -

引用なし
パスワード
   ▼Kein さん:

>With MyCh.Axes(xlValue)

すいません。こんどは、下記コードで、エラーはでないのですが、なにも変わらないのですが...

  Dim MyCh As Chart, MySe As Variant
  Dim i As Integer
  Dim MxP As Single, MiP As Single
  Dim KanB As Single

  AAA1 = 5
  AAA2 = 10
  AAA3 = 50
  AAA4 = 500
  AAA5 = 5000
  AAA6 = 50000
  AAA7 = 500000

  BBB = 5

ActiveSheet.ChartObjects("グラフ 809").Activate
  Set MyCh = ActiveSheet.ChartObjects(1).Chart
  Set MySe = MyCh.SeriesCollection
  With WorksheetFunction
   For i = 1 To MySe.Count
     If i = 1 Then
      MxP = .Max(MySe.Item(i).Values)
      MiP = .Min(MySe.Item(i).Values)
     Else
      If .Max(MySe.Item(i).Values) > MxP Then
        MxP = .Max(MySe.Item(i).Values)
      End If
      If .Min(MySe.Item(i).Values) < MiP Then
        MiP = .Min(MySe.Item(i).Values)
      End If
     End If
   Next i

   MxP = .Ceiling(MxP, 0.05)
   MiP = .Floor(MiP, 0.05)
  End With
 
If MiP < 100 Then KanB = AAA1
If MiP >= 100 And MiP < 1000 Then KanB = AAA2
If MiP >= 1000 And MiP < 10000 Then KanB = AAA3
If MiP >= 10000 And MiP < 100000 Then KanB = AAA4
If MiP >= 100000 And MiP < 1000000 Then KanB = AAA5
If MiP >= 1000000 And MiP < 10000000 Then KanB = AAA6
If MiP > 10000000 Then
KanA = AAA7
End If

  With WorksheetFunction
   MxP = .Ceiling(MxP, KanB)
   MiP = .Floor(MiP, KanB)
  End With
    
  With MyCh.Axes(xlValue)
   .MinimumScale = MiP
   .MaximumScale = MxP
  End With

  BMa1 = MyCh.Axes(xlValue).MajorUnit
  BMi1 = MyCh.Axes(xlValue).MinimumScale
  BBB1 = BMi1 + BMa1
  BBB4 = BMi1 + BMa1 * (BBB - 1)
  BBB5 = BMi1 + BMa1 * BBB
  
  BBB11 = ((BBB1 / BMi1) - 1) * 100
  BBB55 = ((BBB5 / BBB4) - 1) * 100
 
  Range("IT1") = Round(BBB11, 1)
  Range("IU1") = Round(BBB55, 1)
 
Set MySe = Nothing: Set MyCh = Nothing

【35208】Re:グラフの最大値と最小値について
発言  Kein  - 06/2/23(木) 20:29 -

引用なし
パスワード
   厳しいことを言うようですが、自分の課題に対しては自分で試行錯誤して解決していく
ことが原則です。掲示板の回答は、それをサポートする程度のものと考えて下さい。
サポートという範囲内であれば、既に充分にやってきたはずですよ。

【35209】Re:グラフの最大値と最小値について
お礼  ぷーちゃん  - 06/2/23(木) 20:35 -

引用なし
パスワード
   ▼Kein さん:
>厳しいことを言うようですが、自分の課題に対しては自分で試行錯誤して解決していく
>ことが原則です。掲示板の回答は、それをサポートする程度のものと考えて下さい。
>サポートという範囲内であれば、既に充分にやってきたはずですよ。


わかりました。すいませんでした。
いろいろ教えて頂き、ありがとうございました。

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