質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

6545閲覧

VBAでグラフサイズの取得ができない

Justmeaning

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/07/02 11:54

編集2016/07/02 16:31

ある一つのグラフに他のグラフのサイズを合わせるために、グラフサイズの取得をしたいのですが以下のコードでは
「メソッドまたはメンバーが見つかりません」
というエラーが出て取得できません。

Sub Adjust_Graph_Size() ' ' Adjust_Graph_Size Macro ' ' Dim Achart As Chart Set Achart = ActiveChart Gwidth = Achart.Width 'エラー箇所 Gheight = Achart.Height 'エラー箇所 MsgBox "Width:" & Gwidth & "× Height:" & Gheight End Sub

ActiveSheet.Shapes("グラフ 1").Width
とした場合には取れるのですが、この形ですとアクティブなグラフが設定できずに困っています。

ネットを探しても案外解決法がなかったので、解決法をご教授いただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

解決済みでしたが、後にこの質問を参照された方のために補足させていただきます。


Excelのグラフには「埋め込みグラフ」と、「グラフシート」というものがあります。

「埋め込みグラフ」はワークシート上に描画オブジェクトとして貼り付けているものです。
「グラフシート」は1つのグラフを専用のシートにしたものです。

このどちらを対象とするかで取得の方法が異なります。
「埋め込みグラフ」:WorkSheet.ChartObjectsコレクションから取得
「グラフシート」:Application.Chartsコレクションから取得

(ActiveChartで取得する場合はどちらも取得できますが、当然ながら事前に対象のオブジェクトまたはグラフシートをActiveにしておく必要があります。)

今回は複数のグラフの幅や高さを設定したいということですので、「埋め込みグラフ」を対象とされているものと思います。

ちなみに「グラフシート」は名前の通り"シート"の一種ですので、Chart型にWidthというプロパティはありません。
今回の質問で「メソッドまたはメンバーが見つかりません」 と怒られているのはこの点だと思います。


以下、グラフ名でプロパティ参照・設定するコード例です。

Sub Adjust_Graph_Size() ' ' Adjust_Graph_Size Macro ' ''埋め込みグラフ名の確認 'Dim i As Integer 'For i = 1 To ActiveSheet.ChartObjects.Count ' MsgBox ActiveSheet.ChartObjects(i).Name 'Next i ''グラフシート名の確認 'For i = 1 To Charts.Count ' MsgBox Charts(i).Name 'Next i Dim Achart As ChartObject Set Achart = ActiveSheet.ChartObjects("Chart 1") Dim Bchart As ChartObject Set Bchart = ActiveSheet.ChartObjects("Chart 2") Gwidth = Achart.Width 'エラー箇所 Gheight = Achart.Height 'エラー箇所 MsgBox "Width:" & Gwidth & "× Height:" & Gheight Bchart.Width = Gwidth Bchart.Height = Gheight End Sub

参考までに。

投稿2016/07/04 03:14

編集2016/07/04 03:16
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下のように修正してみてください。

VBA

1Gwidth = Achart.Width 'エラー箇所 2Gheight = Achart.Height 'エラー箇所

VBA

1Gwidth = Achart.Parent.Width 2Gheight = Achart.Parent.Height

Chartオブジェクトの上にChartObject オブジェクトというのがあるということらしいです(ややこしい)

参考ページ
ChartObject オブジェクト (Excel)

投稿2016/07/04 02:05

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Justmeaning

2016/07/04 02:16

親の方だったんですね。子の方から探していて、メンバやメソッドが見つからないのに、オブジェクト生成しない場合には普通にメソッド使えていないので不思議に思っていました。 ありがとうございました。
guest

0

先にアクティブにしないといけないようですよ。

Chart オブジェクト (Excel)

グラフがアクティブになっているときには、ActiveChart プロパティを使って、そのグラフにアクセスすることができます。グラフ シートがアクティブになるのは、ユーザーがそのシートを選択した場合、あるいは、Chart オブジェクトの Activate メソッドまたは ChartObject オブジェクトの Activate メソッドによってそのシートがアクティブにされた場合です。次の使用例は、グラフ シート 1 をアクティブにし、グラフの種類とタイトルを設定します。

VBA

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

とでもすればいいんじゃないですかね ^^

投稿2016/07/02 12:13

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Justmeaning

2016/07/02 16:35 編集

すみません、グラフ名の指定の話ではなく、オブジェクトの話です。 質問文を全文読んでいただきたいです。 上記のコードの改修方法を教えてください。
Mr_Roboto

2016/07/04 02:04

怒られちゃったw もう解決しましたか? ここだとコードが書きにくいので別で回答書きますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問