Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 Pro : Excel 2013)
vbaで散布図作成
投稿日時: 18/07/15 20:08:34
投稿者: tansandaisuki

 
いつもお世話になっております。
vbaでのグラフ作成においてわからないことがありますので、下記のご回答をお願いいたします。
 
内容:
·r列からw列までデータを散布図にしたいのですが、いっぺんにやろうとすると変なグラフになるので個別に作成しようとしています。rとs, tとu, vとw がペアになります。
·散布図を作成するためのコードを作成していますが、グラフのコードは範囲の前にワークシート名が入るので、ワークシート名が変わってしまうとエラーになってしまい困っています。
 
質問:
1. いっぺんに散布図を作成する方法はありますか?
2. アクティブシート名でのコードを作成など対応策ありますでしょうか?

回答
投稿日時: 18/07/15 22:59:02
投稿者: simple

VBAより前に、まずは、ワークシート上でグラフを書くことをマスターしてください。
"Excel 散布図 複数列"などでネット検索すれば参考記事があるはずです。
そのほうが図解もあり、理解しやすいと思いますし、
VBAとは直接関係しない話題ですから。
 
そうすればそれをマクロ記録してVBAにすることも可能になるはずです。

投稿日時: 18/07/16 11:52:02
投稿者: tansandaisuki

 
良さそうなサイトを見つけましたが、この通りにコードを組んでもうまく行かず、行き詰まってしまいましたのでご助言下さい。
3本のグラフを作成したいのですが、はじめ6本作成され、最後に1本になるまで1本ずつ削除されてしまいます。コードの意味がすべて理解できていませんので、修正できていませんが、if の部分がスキップされてしまうのが気になります。
 
http://foundknownanddone.dots2pattern.com/2014/03/xx-yexcel-x1y1x2y2-sub.html?m=1
 

ChartwithMultiXYdata()
'X軸データ、Y軸データの列が交互に並んだ選択範囲から散布図を作成するマクロ
'使用方法:セル範囲を選択→このマクロを実行→グラフが作成される。
  
    Dim targetSeries As Series
    Dim dest As String
    Dim data As Range
      
    'シート名を退避しておく(埋め込みグラフにする時に移動先)
    dest = ActiveSheet.Name
    Set data = Selection
      
    'グラフ作成
    With Charts.Add
        .ChartType = xlXYScatterLines
        .Location Where:=xlLocationAsObject, Name:=dest
            '埋め込みグラフにしたくない場合は上の行を消す
    End With
          
    '系列にデータを設定(データはX、Yの順番で列ごとに並んでいる必要あり)
    For i = 1 To data.Columns.Count / 2
        If i > ActiveChart.SeriesCollection.Count Then
            Set targetSeries = ActiveChart.SeriesCollection.NewSeries
        Else
            Set targetSeries = ActiveChart.SeriesCollection(i)
        End If
         
        targetSeries.XValues = data.Columns(i * 2 - 1)
        targetSeries.Values = data.Columns(i * 2)
    Next
      
    '余った系列を削除(セル範囲を選んで開始しているので、勝手に系列が出来てしまう。)
    For i = data.Columns.Count / 2 + 1 To ActiveChart.SeriesCollection.Count
        ActiveChart.SeriesCollection(data.Columns.Count / 2 + 1).Delete
    Next
End Sub

回答
投稿日時: 18/07/16 20:13:43
投稿者: simple

ネット上のコードを見つけました。→ 実行しました → うまくいきません → 質問
というサイクルではなく、
ご自分の手で散布図を作って、そのマクロ記録をとってみたらどうですか?
  
そうすれば、
・自分の行った動作が、コードではどう表されるかが理解できます。
・修正が必要とすれば、どのあたりを修正すればよいかを考える切っ掛けができます。
   
そうしたことを通じたグラフについての理解がなければ、
コードも理解しにくいと思います。
   
【想定される手順】
(1)2列の散布図(基本形)を作る。
(2)デザイン ー データの選択 ー系列名、系列のXの値、系列のYの値を指定する。
(3)必要なだけ、(2)を繰り返す。
まずは、これを実行してみて、マクロ記録を採ってはどうでしょうか。
   
# 提示されたコードの修正を提示することも可能は可能ですが、
# 上記のプロセスを採られることをお薦めします。

回答
投稿日時: 18/07/16 20:26:02
投稿者: simple

上記のコードは、数値部分だけを選択状態にして実行すれば、グラフは書けます。
ただ、あなたの理解のためにも上記したことを実行することを薦めます。
自習下さい。私はこれで失礼します。

投稿日時: 18/07/17 05:39:05
投稿者: tansandaisuki

範囲を選択してから実行でうまく行きました。
マクロ記録で自習を繰り返すことでコードが理解できました。
今回も大変勉強になりました。
ありがとうございました。