はじめまして。
Excelマクロ初心者です。
現在、Excelのグラフの凡例の位置を変更するマクロが作れなくて困っております。
=前提条件=
・マクロを記録するbook(1)とグラフを含むbook(2)は別のファイル
・book(1)よりマクロを実行し、book(2)を開き、グラフの凡例の位置を変えたい
=book(2)の構成=
・複数のシートが存在(Hiddenも存在)
・各シートにグラフが複数存在
=現時点で作成したマクロ=
Sub graph()
Workbooks.open "C:\********\book(2).xls"
Workbooks("book(2).xls").Active
Dim i AS Integer, wsCnt AS Integer
i = 0
wsCnt = Worksheets.Count
For i = 0 To wsCnt
Worksheets(i).Active
If ActiveSheet.Visible = -1 - xlSheetVisibe Then
For Each ChartObject In ActiveSheet.ChartObjects
With ActiveChart
ActiveChart.ChartArea.Select
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlBottom
End With
Next ChartObject
End If
Next i
End Sub
現在、各シートがActiveになることまでは確認できています。
各グラフを掴めているかは確認できておりません。
以上となります。
ご多忙とは思いますが、ご教授いただけると幸いです。
宜しくお願い致します。
No.6ベストアンサー
- 回答日時:
手動操作できて、コードも得られるのですから、普通なら回答番号:No.2のマクロが効くはずだと思います。
知識不足で、何故効かないのかよく解りません。
「マクロの記録」したシートで下記マクロを試してみてください。
Sub testグラフ凡例3()
Dim mycht As Variant
Dim i As Integer
mycht = Array("グラフ 2", "グラフ 7", "グラフ 12")
For i = LBound(mycht) To UBound(mycht)
With ActiveSheet.ChartObjects(mycht(i)).Chart
.HasLegend = True
.Legend.Position = xlBottom
End With
Next i
End Sub
グラフ名の連番が、5飛びになっているのは他の種類のオブジェクトが描画挿入されていると思います。
オートシェイプとかも含めて、オブジェクトが描画挿入された順に連番が振られるようです。
xls88さん
返答が大変遅くなり申し訳ございませんでした。
当方、仕事の関係で頂いたソースを試すことができませんでした。
さて、頂いたマクロの実行結果ですが、
どうやら対象となるxlsファイルを生成しているアプリケーション側に問題があるようで、
> With ActiveSheet.ChartObjects(mycht(i)).Chart
にてエラーが生じてしまい、実行が止まってしまいました。
xls88さんには何度も知恵を貸して頂き、
真に感謝しております。
今回のxlsファイルへのマクロの作成は一度保留とし、
アプリケーション側から何か有効な情報を得次第、
再度挑戦したいと考えております。
私自身もマクロを勉強し、困っている方を助けられるよう努めたいと思います。
今後とも宜しくお願い致します。
ありがとうございました。
No.5
- 回答日時:
≪グラフの名前の件≫
>新規グラフを作成したところ、このグラフも「グラフエリア」と表示されました。
>このBook自体に何か設定がなされているのでしょうか。
新規グラフで、何故「グラフエリア」という名前になるのか理解できません。
デフォルトで、そのような設定が出来るとは聞いたことがありません。
グラフウイザードとかで、普通にグラフを作成した場合、「グラフ 1」のように連番付きの名前になります。
ただ、この名前は自由に変えることができます。
もしかして、マクロでグラフを作成しているとかで、コード内で名前を付けているとか
あるいは、名前を変更された「元のグラフ」をコピーして使っているとかはないでしょうか?
≪マクロが動作しないシートの件≫
マクロが動作しないシートで、グラフを選択する作業を「マクロの記録」してみてください。
得られたコードを拝見したいのですが、提示していただけないでしょうか。
xls88さん
早速のご対応ありがとうございます。
>≪グラフの名前の件≫
>もしかして、マクロでグラフを作成しているとかで、コード内で名前を付けているとか
>あるいは、名前を変更された「元のグラフ」をコピーして使っているとかはないでしょうか?
■新規グラフの作成は新たに表を作成し、
そこから手動でグラフを作成致しました。
■今回相談をさせて頂いておりますマクロの実行対象のファイルは、
他の部署の方より受領しているファイルの為どの様なプロセスで
作成されたのかは把握できておりませんが、
恐らく何かのアプリケーションから自動で作成しているものと思われます。
≪マクロが動作しないシートの件≫
>マクロが動作しないシートで、グラフを選択する作業を「マクロの記録」してみてください。
>得られたコードを拝見したいのですが、提示していただけないでしょうか。
数か所名称等を伏せさせて頂きますが、以下の様になります。
(※対象シートは既にアクティヴな状態よりスタート)
Sub Macro1()
ActiveSheet.ChartObject("グラフ 2").Activate
AvtiveChart.ChartArea.Select
ActiveWindow.Visible = False
Windows("******************.xls").Activate
ActiveSheet.ChartObject("グラフ 7").Activate
AvtiveChart.ChartArea.Select
ActiveWindow.Visible = False
Windows("******************.xls").Activate
ActiveSheet.ChartObject("グラフ 12").Activate
AvtiveChart.ChartArea.Select
・・・・
End Sub
グラフ名が"グラフ *"と与えられているようです。
(なぜが等差で命名されておりますが…)
以上となります。
度々申し訳ございませんが、
お気づきの点など御座いましたらご教授頂けると幸いです。
No.4
- 回答日時:
>名前ボックスとは、Excelの画面.左上部のウィンドウでしょうか。
>(ex. デフォルトのA1セルの場合、[A1]と表示されるウィンドウ)
その通りです。
グラフが選択されると、グラフオブジェクトの名前が表示されます。
>こちらには、各グラフ(全シートにおける)にて、
>「グラフ エリア] と表示されます。
普通「グラフ 1」とかなら解るのですが、「グラフ エリア」となりますか?
もしかするとグラフオブジェクトの名前が「グラフ エリア」ですか?
名前が?ですが、グラフオブジェクトの名前が表示されているようですから、掴めていると思います。
下記マクロをF8キーでステップ実行してみてください。
ステップ実行
http://hp.vector.co.jp/authors/VA016119/step/ste …
Sub testグラフ凡例2()
Dim cht As ChartObject
Dim i As Integer, wsCnt As Integer
wsCnt = Worksheets.Count
For i = 1 To wsCnt
If Worksheets(i).Visible = True Then
Worksheets(i).Select
For Each cht In Worksheets(i).ChartObjects
cht.Select
Exit For
'With cht.Chart
'.HasLegend = True
'.Legend.Position = xlBottom
'.Legend.Position = xlLegendPositionBottom
'End With
Next cht
End If
Next i
End Sub
先のコメントで訂正があります。
.Legend.Position = xlBottom
と
.Legend.Position = xlLegendPositionBottom
どちらも、項目軸と重なる場合と項目軸の更に下方に配置される場合が確認されました。
どういう条件でそうなるのか解りません。
>xls88さん
見ず知らずの私の質問にも関わらず、
たびたびご対応頂き、ありがとうございます。
>その通りです。
>グラフが選択されると、グラフオブジェクトの名前が表示されます。
>普通「グラフ 1」とかなら解るのですが、「グラフ エリア」となりますか?
>もしかするとグラフオブジェクトの名前が「グラフ エリア」ですか?
現在マクロの実行対象となるExcelファイル内に、
新規グラフを作成したところ、このグラフも「グラフエリア」と表示されました。
このBook自体に何か設定がなされているのでしょうか。
>ステップ実行
参照まで添えてのご指示ありがとうございます。
大変助かりました。
さて、実行しての結果ですが、
■マクロが正常に動作するシートの場合
頂いたソースの中で、実行(黄色く反転)されたものを○
実行されずスキップされたもの×
として記します。
○If Worksheets(i).Visible = True Then
○ Worksheets(i).Select
○ For Each cht In Worksheets(i).ChartObjects
○ cht.Select
○ Exit For
(省略)
× Next cht
○End if
■マクロが動作しないシートの場合
頂いたソースの中で、実行されたものを○
実行されずスキップされたもの×
として記します。
○If Worksheets(i).Visible = True Then
○ Worksheets(i).Select
○ For Each cht In Worksheets(i).ChartObjects
× cht.Select
× Exit For
(省略)
× Next cht
○End if
どうやら>cht.Select<が動作していないようですね…
>.Legend.Position = xlBottom
>.Legend.Position = xlLegendPositionBottom
>どちらも、項目軸と重なる場合と項目軸の更に下方に配置される場合>が確認されました。
>どういう条件でそうなるのか解りません。
補足ありがとうございます。
今のところ、私の実行対象ファイルでは、
どちらでも意図する場所へ配置され、問題はないようで幸いです。
以上となります。
xls88さんに任せっきりになっているようで、
大変恐縮ではありますが、
上記報告で何かお気づきの点等ございましたら、
ご対応宜しくお願い申し上げます。
No.3
- 回答日時:
>しかし、最初の1シート目は上記の様に動作をしてくれるのですが、
>2シート目以降はアクティヴになることは確認できたのですが、
>どうやらグラフを掴めていないようです。
おかしいです。該当シートにグラフは存在していますか?
試しに
Worksheets(i).Select
cht.Select
を入れてみてください。
名前ボックスにグラフ名が表示されるかどうか確認してください。
この回答への補足
xls88さん
たびたびサポート、ありがとうございます。
>If Worksheets(i).Visible = True Then
でHiddenシートがスキップされていれば、
該当する全てのシートにグラフが存在しております。
>試しに
>Worksheets(i).Select
>cht.Select
>を入れてみてください。
以下の位置へ挿入してみましたが、これで良いのでしょうか。
If Worksheets(i).Visible = True Then
>Worksheets(i).Select<
For Each cht In Worksheets(i).ChartObjects
>cht.Select<
・
・
・
名前ボックスとは、Excelの画面.左上部のウィンドウでしょうか。
(ex. デフォルトのA1セルの場合、[A1]と表示されるウィンドウ)
こちらには、各グラフ(全シートにおける)にて、
「グラフ エリア] と表示されます。
また、「マクロの記録」を用いた際もChartObjectsとして認識されております。
以上となります。
ご多忙とは思いますが、
お時間のある際にでもご確認宜しくお願いいたします。
No.2
- 回答日時:
Sub testグラフ凡例1()
Dim cht As ChartObject
Dim i As Integer, wsCnt As Integer
wsCnt = Worksheets.Count
For i = 1 To wsCnt
If Worksheets(i).Visible = True Then
For Each cht In Worksheets(i).ChartObjects
With cht.Chart
.HasLegend = True
.Legend.Position = xlLegendPositionBottom
End With
Next cht
End If
Next i
End Sub
.Legend.Position = xlBottom
↑の場合、項目軸と重なってしまいます。
.Legend.Position = xlLegendPositionBottom
↑の場合、項目軸の更に下方に配置されました。
>xls88さん
ご返答ありがとうございます。
頂いたソースにて動作させましたところ、
凡例の位置はしっかり下へ移動されており、
大変参考になりました。
しかし、最初の1シート目は上記の様に動作をしてくれるのですが、
2シート目以降はアクティヴになることは確認できたのですが、
どうやらグラフを掴めていないようです。
私自身で、どうにか対処できるよう努めますが、
度々、お手数をお掛け致しますが、
お気づきの点など御座いましたら宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでグラフタイトルが折...
-
エクセルにおける、グラフの指...
-
エクセルグラフの一括設定。
-
~エクセル~円グラフのみを抽...
-
たくさん作った同じ設定のグラ...
-
パワーポイントに貼り付けたエ...
-
エクセルのグラフが作成した通...
-
EXCEL・複数ある円グラフの円の...
-
エクセルのグラフの一部拡大
-
エクセルグラフの数値軸(Y)の...
-
Excelで作ったグラフをIllustra...
-
エクセル(Excel)の目盛りの一...
-
EXCELグラフ作成について
-
エクセル:ぴったり重なった後...
-
エクセル作業中・・「参照が正...
-
グラフ作成のときの表示
-
エクセルで散布図をつくったとき
-
EXCELでの棒グラフの太さについて
-
イラレのグラフがグループ解除...
-
Excel 2007 の棒グラフで差を表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでグラフタイトルが折...
-
たくさん作った同じ設定のグラ...
-
エクセルにおける、グラフの指...
-
パワーポイントに貼り付けたエ...
-
~エクセル~円グラフのみを抽...
-
エクセルグラフの一括設定。
-
EXCEL・複数ある円グラフの円の...
-
イラレのグラフがグループ解除...
-
エクセルのグラフの一部拡大
-
エクセル(Excel)の目盛りの一...
-
エクセルグラフの数値軸(Y)の...
-
エクセル作業中・・「参照が正...
-
エクセルで作業ごとの時間をグ...
-
エクセルのグラフデータのリン...
-
エクセル:ぴったり重なった後...
-
パワーポイントで時計を表示で...
-
EXCELでの棒グラフの太さについて
-
Excel:とびとびの日付のデータ...
-
エクセルのグラフが作成した通...
-
Excelで作ったグラフをIllustra...
おすすめ情報