Excel VBA質問箱 IV

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

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


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

【72345】エクセルのグラフのマクロについて 12/7/19(木) 0:14 質問[未読]
【72346】Re:エクセルのグラフのマクロについて kanabun 12/7/19(木) 9:26 発言[未読]
【72348】Re:エクセルのグラフのマクロについて 12/7/19(木) 21:26 お礼[未読]
【72347】Re:エクセルのグラフのマクロについて kanabun 12/7/19(木) 9:47 発言[未読]

【72345】エクセルのグラフのマクロについて
質問   E-MAIL  - 12/7/19(木) 0:14 -

引用なし
パスワード
   エクセルのグラフについての質問です。

一つのシートの中に、4つの折れ線グラフがあり、この4つのグラフのうち2つは残りの2つのグラフをコピーしたものです。 とりあえずグラフ1、グラフ2、グラフ3、グラフ4とします。

そして、これら4つの折れ線グラフのY軸の最小値、最大値、目盛の間隔に別々の値を設定するようマクロを「マクロの記録」を使って記録しました。(下記のごとくマクロが記述されました。)

  ActiveSheet.ChartObjects("Chart 1").Activate
  ActiveChart.Axes(xlValue).MinimumScale = 100
  ActiveChart.Axes(xlValue).MaximumScale = 200
  ActiveChart.Axes(xlValue).MajorUnit = 20
  ActiveSheet.ChartObjects("Chart 2").Activate
  ActiveChart.Axes(xlValue).MinimumScale = 0
  ActiveChart.Axes(xlValue).MaximumScale = 50
  ActiveChart.Axes(xlValue).MajorUnit = 10
  ActiveWindow.SmallScroll Down:=21
  ActiveSheet.ChartObjects("Chart 1""").Activate
  ActiveChart.Axes(xlValue).MinimumScale = 500
  ActiveChart.Axes(xlValue).MaximumScale = 1000
  ActiveChart.Axes(xlValue).MajorUnit = 100
  ActiveWindow.SmallScroll Down:=15
  ActiveSheet.ChartObjects("Chart 2""").Activate
  ActiveChart.Axes(xlValue).Select
  ActiveChart.Axes(xlValue).MinimumScale = 0
  ActiveChart.Axes(xlValue).MaximumScale = 500
  ActiveChart.Axes(xlValue).MajorUnit = 100
  Range("Y59").Select

  ところが、いざ実行してみるととりあえずエラーとなりました。

  そこで
  
 ActiveSheet.ChartObjects("Chart 1""").Activate
            ↓
  ActiveSheet.ChartObjects("Chart 1").Activate 


  ActiveSheet.ChartObjects("Chart 2""").Activate
            ↓
  ActiveSheet.ChartObjects("Chart 2").Activate

 に変更したところ動きました。
 しかしながら、グラフの設定値がグラフ1、グラフ3 とグラフ2、グラフ4が同じ値となってしまいます。
 
 おそらく、グラフ3、グラフ4はグラフ1、グラフ2をコピーしたために、グラフ名が同じになっていることが原因であろうと思われますが、
そこで、なんとか個別に設定値をマクロで組み込む方法を教えて頂けないでしょうか。

【72346】Re:エクセルのグラフのマクロについて
発言  kanabun  - 12/7/19(木) 9:26 -

引用なし
パスワード
   ▼夢 さん:こんにちは〜

>一つのシートの中に、4つの折れ線グラフがあり、この4つのグラフのうち2つは残りの2つのグラフをコピーしたものです。 とりあえずグラフ1、グラフ2、グラフ3、グラフ4とします。

Excelは日本語バージョンですよね?
よくわからないのは、
>「マクロの記録」を使って記録
すると、
>  ActiveSheet.ChartObjects("Chart 1""").Activate

「Chart 1」をコピーしたグラフ名がなぜ「Chart 1"」になったのか?
「Chart 2」をコピーしたグラフの名前がなぜ「Chart 2"」になったのか?
というところです。
こちらでは「Chart 1」と「Chart 2」を作っておいてそれぞれをコピー
して作った複製グラフの名は「Chart 3」「Chart 4」ですけど?

いずれにしても、
あるワークシートに4つの埋め込みグラフがあれば、名前が何であれ、
それらは固有の「番号」(インデックス)をもちますので、名前の代わりに
このインデックスでアクセスできます。

↓で「グラフの番号」と「グラフの名前」の対応関係を確認してください

Sub test1()
  Dim obj As ChartObject
  Dim i As Long
  
  For Each obj In ActiveSheet.ChartObjects
    i = i + 1
    Debug.Print i, obj.Name
  Next
  
  
End Sub


シート内に4つのグラフがあれば、それらは 作成順に 1, 2, 3, 4
と Index が振られています。(ChartObjects(Index) です)
このIndexを使って「マクロ記録」を書きなおすと、↓のようになります。
> .ChartObjects(1)
というのは 埋め込みグラフの枠線のこと(グラフ本体を入れるコンテナ)
そのあとの
> .Chart
が実際のグラフです。

Sub test2()

  With ActiveSheet.ChartObjects(1).Chart
    .Axes(xlValue).MinimumScale = 100
    .Axes(xlValue).MaximumScale = 200
    .Axes(xlValue).MajorUnit = 20
  End With
  With ActiveSheet.ChartObjects(2).Chart
    .Axes(xlValue).MinimumScale = 0
    .Axes(xlValue).MaximumScale = 50
    .Axes(xlValue).MajorUnit = 10
  End With
  
  With ActiveSheet.ChartObjects(3).Chart
    .Axes(xlValue).MinimumScale = 500
    .Axes(xlValue).MaximumScale = 1000
    .Axes(xlValue).MajorUnit = 100
  End With
  With ActiveSheet.ChartObjects(4).Chart
    .Axes(xlValue).MinimumScale = 0
    .Axes(xlValue).MaximumScale = 500
    .Axes(xlValue).MajorUnit = 100
  End With

End Sub

また、.Axes(xlValue) オブジェクトまでもWith 句に入れてしまえば、
こうなります。

Sub test3()

  With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue)
    .MinimumScale = 100
    .MaximumScale = 200
    .MajorUnit = 20
  End With
  With ActiveSheet.ChartObjects(2).Chart
    .MinimumScale = 0
    .MaximumScale = 50
    .MajorUnit = 10
  End With
  
  With ActiveSheet.ChartObjects(3).Chart
    .MinimumScale = 500
    .MaximumScale = 1000
    .MajorUnit = 100
  End With
  With ActiveSheet.ChartObjects(4).Chart
    .MinimumScale = 0
    .MaximumScale = 500
    .MajorUnit = 100
  End With

End Sub

参考にしてください。

【72347】Re:エクセルのグラフのマクロについて
発言  kanabun  - 12/7/19(木) 9:47 -

引用なし
パスワード
   あと、
グラフの名前は 手動でも簡単に変えられます。
図形描画ツールバーの2番目に「矢印アイコン」がありますよね?
これを押すと(図の選択)モードになります(セル選択ができなくなります)
この状態で、最後に(コピーして作った)グラフを選択して、
数式バーの左の「名前ボックス」をみてください。なんと表示されて
ますか?
この「名前ボックス」内の名前をセルの値変更のように編集して確定すれば
選択グラフ名が 編集した名前にかわります。

たとえば 3番目と4番目のグラフ名を上記の方法で手動で変えておいて
「Chart 1」「Chart 2」「Copy1」「Copy2」
と名前でアクセスすることもできます。

Index番号は「作成した順」に割り当てられていくので、たとえば
途中のグラフを一度削除して 作り直したりすると 番号がぐちゃぐちゃ
になってしまい、マクロを書き換えないといけなくなります。

手動で名前を付けることにしておけば、マクロのほうを書き換える
必要はなくなります。

ま、名前をつかうか Index番号を使うかは 状況に応じてCase by Case
ですけどね(^^

【72348】Re:エクセルのグラフのマクロについて
お礼   E-MAIL  - 12/7/19(木) 21:26 -

引用なし
パスワード
   kanabun様早速のRES本当にありがとうございました。

コピーしたグラフの名前が1.2.3.4と振られないのは私も全くわかりません。

会社のパソコンで同じことをやってみましたが結果は同じでした。

コピー元のグラフに何か原因があったのかはわかりません。

とりあえず、教えて頂いたアドバイス通りグラフ名を1.2.3.4と番号を振ってみたところ、あっさりと解決しました。

本当にありがとうございました。おかげで、仕事が前に進みます。
このアプリケーションを使用することにより、月間の残業が、おそらく10時間程度は削減できる見通しです。助かりました。このような内容の事柄はマニュアル本にも記載されておらず。困り果てていたんです。
またよろしくお願いいたします。


また

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