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

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

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

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

Q&A

解決済

2回答

1358閲覧

vba excel2010 散布図のデータ指定方法

yamatail

総合スコア77

VBA

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

0グッド

0クリップ

投稿2018/10/15 00:55

編集2018/10/16 06:55

1つ目のマクロで、テキストファイルのデータをグラフにプロットさせます。

2つ目のマクロで、1つ目のテキストファイルが更新されていればその分のデータを追加し、
追加分グラフにも反映させるようなプログラムを作っています。

1つ目は出来ました。
以下、コード(グラフ作成部分)とイメージです。

VBA

1 'グラフ作成 2 Dim j As Integer 3 Dim rowMax As Long 4 Dim colMax As Long 5 Dim MyRange As Range 6 Dim chartObj As ChartObject 7 Dim Color As String 8 Dim ColorNo As Integer 9 10 rowMax = Cells(Rows.Count, 1).End(xlUp).Row 11 Cells(2, UBound(arr) + 2) = "rowMax" 12 Cells(2, UBound(arr) + 3) = rowMax 13 14 colMax = UBound(arr) 15 16 Set MyRange = Columns("B:F") 17 18 Set chartObj = ActiveSheet.ChartObjects.Add(500, 100, 450, 300) 19 20 With chartObj.Chart 21 '元データ範囲の設定 22 .SetSourceData MyRange, xlColumns 'データ範囲 23 .PlotArea.Interior.ColorIndex = 2 'プロットエリア背景色 城 24 .ChartArea.Fill.BackColor.SchemeColor = 2 '背景色 白 25 .Axes(xlCategory).MinimumScaleIsAuto = True 26 .Axes(xlCategory).MaximumScaleIsAuto = True 27 .HasTitle = True 'タイトル表示 28 .ChartTitle.Text = "Data-Plot" 'タイトル 29 '全系列に対する処理 30 For j = 1 To .SeriesCollection.Count 31 With .SeriesCollection(j) 32 .ChartType = xlXYScatterLinesNoMarkers 'マーカー付き折れ線グラフ 33 .MarkerSize = 2 'マーカーサイズ 34 .Format.Fill.ForeColor.RGB = RGB(255, 255, 255) 'マーカー白抜き 35 .Format.Line.Weight = 1.5 '線の細さ 36 ColorNo = 4 + j 37 .Format.Line.ForeColor.ObjectThemeColor = ColorNo '系列の色 38 Select Case j 39 Case 1, 2, 3 '温度(K) 40 .MarkerStyle = xlMarkerStyleCircle '円形のマーカー 41 .AxisGroup = 1 '主軸 42 Case 4 '電圧(V) 43 .MarkerStyle = xlMarkerStyleX '円形のマーカー 44 .AxisGroup = 2 '第2軸 45 End Select 46 End With 47 Next 48 End With

イメージ説明

これに、データを追加してデータ範囲を指定する時に指定方法がわからず上手くグラフを更新できません。
1つ目と同じ指定方法をしても青枠のようになってしまい、x軸が無くなってしまいます。

vba

1 'グラフプロット 2 Dim MyRange As Range 3 Dim Targetchart As ChartObject 4 5 Set MyRange = Columns("B:F") 6 Set Targetchart = ActiveSheet.ChartObjects(1) 7 Targetchart.Chart.SetSourceData Source:=MyRange, PlotBy:=xlColumns 8

イメージ説明

詳しい方、どうかご教授頂けませんでしょうか。
宜しくお願い致します。m(_ _)m

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

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

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

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

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

guest

回答2

0

Set chartObj = ActiveSheet.ChartObjects.Add(500, 100, 450, 300)の前に
以下のように、グラフがあればグラフを一旦削除するステートメントを追加してはいかがでしょうか。
そうすれば、データを追加した場合でも1つ目のマクロをそのまま使えます。

VBA

1 Set MyRange = Columns("B:F") 2 3 If ActiveSheet.ChartObjects.Count > 0 Then 4 ActiveSheet.ChartObjects.Delete 5 End If 6 7 Set chartObj = ActiveSheet.ChartObjects.Add(500, 100, 450, 300) 8

投稿2018/10/15 03:20

tatsu99

総合スコア5438

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

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

yamatail

2018/10/15 04:36

ご助言ありがとうございます。理想の動作が実現しました。 一度消して、リメイクする場合、データが増えていくと少し重くなるでしょうかね。そこは、ちょっと使いながら検証してみます。 しかしながら、範囲をクリック&ドラックで変えるだけの動作なのにマクロだとややこしくなりますね。。。初心者の私には手を焼く作業です。
guest

0

自己解決

ファイルを読み込む際のMyRangeのデータ範囲を固定することで、2つ目のマクロの追加テキストがエクセルシートに追加したタイミングでグラフも更新するようになりました。

しかしデータ範囲をあまりに大きくしてしまうと、マクロ自体が重くなるようなので、注意が必要です。

tatsu99様のアドバイスのように一度消して、再描写のほうが早いような気がします。

vba

1 Dim MyRange As Range 2 Dim Targetchart As ChartObject 3 4 Set MyRange = Columns(Cells(1, 2), Cells(5000, 6)) 5 Set Targetchart = ActiveSheet.ChartObjects(1) 6 Targetchart.Chart.SetSourceData Source:=MyRange, PlotBy:=xlColumns

投稿2018/10/16 05:41

yamatail

総合スコア77

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問