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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

23202閲覧

VBAでグラフの連続生成 グラフの位置をずらす方法

U.s

総合スコア11

VBA

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2017/06/19 03:30

こんにちは。先日は、グラフの連続作成を行うマクロの構成にご協力頂き、ありがとうございました!グラフの生成はできるようになりましたが、位置合わせがうまく作動しないので質問いたしました。

グラフ書き出し

VBA

1 2Sub Macro1() 3' 4' Macro1 Macro 5' 6' 7maxRow = Range("A1").End(xlDown).Row 8 9For i = 1 To maxRow Step 17 10 11 12 With ActiveSheet.Shapes.AddChart.Chart 13 .ChartType = xlLine 14 .SetSourceData Source:=Sheets("updown").Range(Cells(i, 2), Cells(i + 16, 2)) 15 .Axes(xlValue).MaximumScale = 3 '数値軸の変更 16 17 End With 18 19 With ActiveSheet.ChartObjects 20 .Top = Cells(5, 5).Top 21 .Left = Cells(5, 5).Left '位置を設定 22 '.Top = Range("D" & i).Top 23 '.Left = Range("D" & i).Left '位置を設定 24 25 .Height = 200 26 .Width = 400 '大きさを設定 27 End With 28

グラフの生成位置に変数を入れるとグラフが書き出しされない問題が発生しています。
以下の部分です。

VBA

1 With ActiveSheet.ChartObjects 2 .Top = Cells(5, 5).Top 3 .Left = Cells(5, 5).Left '位置を設定 4 '.Top = Range("D" & i).Top 5 '.Left = Range("D" & i).Left '位置を設定 6 7 .Height = 200 8 .Width = 400 '大きさを設定 9 End With

(5.5)の部分を(i,5)のように変数を入れて、グラフの書き出す位置を変更したいのですが、
(i.5)にするとグラフのグラフが書き出されません。エラーも出ないので、どう対応すればいいのか分かりません。

どなたか、原因のわかる方はいらっしゃいませんでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

恐らく、With ActiveSheet.ChartObjectsとなっているので、forループの度に「グラフのオブジェクト全てを毎度一括で位置合わせ」をしています。つまるところ、forループの最後のグラフの位置に、すべてのグラフが重なっているようです。

なので、やることは、グラフを作り終った後に、作ったグラフに対してforループの中でも外でも良いので、1つ1つ位置を合わせて行くことです。

下の例はグラフを作り終わった後に、最後にすべてのグラフを位置合わせしています。

VBA

1Sub Macro1() 2 ' 3 ' Macro1 Macro 4 ' 5 ' 6 maxRow = Range("A1").End(xlDown).Row 7 8 For i = 1 To maxRow Step 17 9 10 11 With ActiveSheet.Shapes.AddChart.Chart 12 .ChartType = xlLine 13 .SetSourceData Source:=Sheets("Sheet1").Range(Cells(i, 2), Cells(i + 16, 2)) 14 .Axes(xlValue).MaximumScale = 3 '数値軸の変更 15 16 End With 17 18 19 Next i 20 21 With ActiveSheet.ChartObjects 22 .Height = 200 23 .Width = 400 '大きさを設定 24 End With 25 26 For i = 1 To ActiveSheet.ChartObjects.Count 27 ActiveSheet.ChartObjects(i).Left = ActiveSheet.ChartObjects(1).Left 28 ActiveSheet.ChartObjects(i).Top = ActiveSheet.Range("B" & i).Top 29 30 Next 31 32End Sub 33

困ったらVBAでのグラフ作成を参照ください。

///このようにやらなくても、グラフを作るたびにグラフの名前を拾って位置を合わせる、もできそうですね。

投稿2017/06/21 06:19

編集2017/06/21 06:22
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問