Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7706 / 13645 ツリー ←次へ | 前へ→

【37230】連続グラフ作成 ハーレー 06/4/26(水) 13:10 発言[未読]
【37232】Re:連続グラフ作成 Kein 06/4/26(水) 15:09 回答[未読]
【37237】Re:連続グラフ作成 ハーレー 06/4/26(水) 17:08 質問[未読]
【37240】Re:連続グラフ作成 Kein 06/4/26(水) 18:39 回答[未読]
【37262】Re:連続グラフ作成 ハーレー 06/4/27(木) 12:59 質問[未読]
【37269】Re:連続グラフ作成 Kein 06/4/27(木) 14:44 発言[未読]
【37274】Re:連続グラフ作成 ハーレー 06/4/27(木) 17:09 質問[未読]
【37276】Re:連続グラフ作成 Kein 06/4/27(木) 17:51 発言[未読]
【37301】Re:連続グラフ作成 ハーレー 06/4/28(金) 14:30 質問[未読]
【37305】Re:連続グラフ作成 Kein 06/4/28(金) 15:35 発言[未読]
【37313】Re:連続グラフ作成 ハーレー 06/4/28(金) 17:31 質問[未読]
【37357】Re:連続グラフ作成 ハーレー 06/5/1(月) 16:33 質問[未読]
【37362】Re:連続グラフ作成 ネット徘徊者 06/5/1(月) 17:25 発言[未読]
【37365】Re:連続グラフ作成 Kein 06/5/1(月) 18:18 発言[未読]
【37367】Re:連続グラフ作成 q6 6p 06/5/1(月) 18:56 発言[未読]
【37378】Re:連続グラフ作成 ハーレー 06/5/2(火) 12:02 発言[未読]
【37382】Re:連続グラフ作成 ハーレー 06/5/3(水) 7:03 お礼[未読]

【37230】連続グラフ作成
発言  ハーレー  - 06/4/26(水) 13:10 -

引用なし
パスワード
   データ数が多いので連続してグラフを作成したいのですが、
マクロの知識が乏しく、うまくゆきません。
どなたかご教授願えませんでしょうか?

下記の様なデータがあるのですが・・・。
  A  B  C  ・・・・・
  1  20 34
  3  21 47
  7  2  70
  ・  ・  ・
  ・  ・  ・
Cカラム以降にも沢山データがあります。
各々、AとB、AとC、・・・という具合に
Aと各カラムのデータを用いてグラフ(散布図でAをY軸にして)を
次々と作成したいのですが、適したマクロを組めませんでしょうか?
よろしくお願いします。

【37232】Re:連続グラフ作成
回答  Kein  - 06/4/26(水) 15:09 -

引用なし
パスワード
   データのあるシートを仮に Sheet1 として、ブックの先頭に グラフ という名前の
シートを追加し、そこへ上からグラフを並べるコードです。

Sub Mk_Charts()
  Dim i As Long, j As Long
  Dim Sh As Worksheet
  Dim Ch As ChartObject
  Dim MyR As Range, GR As Range
 
  j = 2: Application.ScreenUpdating = False
  Set Sh = Worksheets.Add(Before:=Worksheets(1))
  Sh.Name = "グラフ": ActiveWindow.DisplayGridlines = False
  With Worksheets("Sheet1").Range("A1").CurrentRegion
   For i = 2 To .Columns.Count
     Set MyR = Union(.Columns(1), .Columns(i))
     Set GR = Sh.Cells(j, 2).Resize(20, 8)
     Set Ch = Sh.ChartObjects _
     .Add(GR.Left, GR.Top, GR.Width, GR.Height)
     Ch.Chart.ChartType = xlXYScatterLinesNoMarkers
     Ch.Chart.SetSourceData MyR
     Ch.Chart.HasLegend = False
     Set MyR = Nothing: Set GR = Nothing: Set Ch = Nothing
     j = j + 21
   Next i
  End With
  Application.ScreenUpdating = True: Set Sh = Nothing
End Sub

【37237】Re:連続グラフ作成
質問  ハーレー  - 06/4/26(水) 17:08 -

引用なし
パスワード
   Kein さんへ
早速の回答をいただき感激しております。
あっという間にグラフが出来てびっくりしております。
しかし、グラフのX軸とY軸のデータが逆なので、
コードの解読を試みましたが、分かりません。
また、カラムAのデータ荷重なのでY軸に"荷重(kN)と、
B以降のデータはX軸として"ひずみ"と入れたいのですがどうすれば良いのでしょうか?
お願いばかりで大変恐縮ですが、お教え願えないでしょうか?

【37240】Re:連続グラフ作成
回答  Kein  - 06/4/26(水) 18:39 -

引用なし
パスワード
   Sub Mk_Charts2()
  Dim i As Long, j As Long
  Dim Sh As Worksheet
  Dim Ch As Chart, Se As Series
  Dim GR As Range
 
  j = 2: Application.ScreenUpdating = False
  Set Sh = Worksheets.Add(Before:=Worksheets(1))
  Sh.Name = "グラフ": ActiveWindow.DisplayGridlines = False
  With Worksheets("Sheet1").Range("A1").CurrentRegion
   For i = 2 To .Columns.Count
     Set GR = Sh.Cells(j, 2).Resize(20, 8)
     Set Ch = Sh.ChartObjects _
     .Add(GR.Left, GR.Top, GR.Width, GR.Height).Chart
     Ch.ChartType = xlXYScatterLinesNoMarkers
     Set Se = Ch.SeriesCollection.NewSeries
     Se.Values = .Columns(1): Se.XValues = .Columns(i)
     Ch.Axes(xlValue).HasTitle = True
     Ch.Axes(xlValue).AxisTitle.Caption = "荷重(kN)"
     Ch.Axes(xlCategory).HasTitle = True
     Ch.Axes(xlCategory).AxisTitle.Caption = "ひずみ"
     Ch.HasLegend = False
     Set GR = Nothing: Set Ch = Nothing: Set Se = Nothing
     j = j + 21
   Next i
  End With
  Application.ScreenUpdating = True: Set Sh = Nothing
End Sub

で、どうかな ?

【37262】Re:連続グラフ作成
質問  ハーレー  - 06/4/27(木) 12:59 -

引用なし
パスワード
   ▼Kein さん:

初歩的な操作もできませんですみませんが、
同じグラフがデータ分出来てしまいます。
また、どうやら、横軸がステップ数になっており、
ひずみのデータを追っていない様なのですが、
手直し出来ますでしょうか?
さらに、最初のコードの時に出たグラフタイトルは残しておいてほしいです。
自分で最初のコードの”これか?”と思うところを見よう見まねで
書き加えてみたらとたんにエラーで止まってしまいました。
すみませんが、よろしくお願いします。

【37269】Re:連続グラフ作成
発言  Kein  - 06/4/27(木) 14:44 -

引用なし
パスワード
   >同じグラフがデータ分出来てしまいます。
全系列を一つのグラフにまとめたい、ということですか ?
>各々、AとB、AとC、・・・という具合にAと各カラムのデータを用いて
>グラフ(散布図でAをY軸にして)を次々と作成
と、書いてあったから「一つのグラフで一つの系列」と考えたのです。
その説明なら、そーいう解釈をするのが自然じゃないかな ?
>横軸がステップ数になっており
1, 2, 3 ・・というようになっているのですか ? こちらのテストでは
そんなことにはならなかったですが・・。
実際の正確なサンプルデータを、提示してみて下さい。
>最初のコードの時に出たグラフタイトル
これは意図的に出すコードがあります。明示的にそれを使えば確実に
なります。実際にタイトルにしたい文字列も書いて下さい。

【37274】Re:連続グラフ作成
質問  ハーレー  - 06/4/27(木) 17:09 -

引用なし
パスワード
   ▼Kein さん:

>>同じグラフがデータ分出来てしまいます。
>全系列を一つのグラフにまとめたい、ということですか ?
>>各々、AとB、AとC、・・・という具合にAと各カラムのデータを用いて
>>グラフ(散布図でAをY軸にして)を次々と作成
>と、書いてあったから「一つのグラフで一つの系列」と考えたのです。
>その説明なら、そーいう解釈をするのが自然じゃないかな ?
すみません、表現が適切ではありませんでしたね、Keinさんの解釈に間違いはありません。
A-B,A-C・・・の各々のグラフを作成したいので、データ分グラフが出来るのは期待通りなのですが、2番目に頂いたのコードではどのグラフも同じものになってしまうのです。グラフのX軸のデータ参照を確認するとそれぞれB,C,D,・・・を参照している様なので、どうしてこうなるのか分かりません。

>>横軸がステップ数になっており
>1, 2, 3 ・・というようになっているのですか ? こちらのテストでは
>そんなことにはならなかったですが・・。
>実際の正確なサンプルデータを、提示してみて下さい。
>>最初のコードの時に出たグラフタイトル
>これは意図的に出すコードがあります。明示的にそれを使えば確実に
>なります。実際にタイトルにしたい文字列も書いて下さい。
実際のデータは
ステップ数  カラムA  カラムB  カラムC  カラムD  カラムE  ・・・
       荷重(kN) ひずみa  ひずみb  ひずみc  ひずみd  ・・・
1        18.8   2      20     25     4
2        29    5      25     26     8
3        35    12     29     24     15
4        58    20     35     28     28
5        85    38     45     40     30
6        158   50     53     45     35
・        ・   ・     ・     ・     ・
・        ・   ・     ・     ・     ・
・        ・   ・      ・     ・     ・
という風なもので、カラムAとカラムBでひとつのグラフ(X軸がひずみaでY軸が荷重(kN)という散布図)として作り、以下AとC、AとDと作って行きたいのですが・・・。2回目にいただいたコードでは横軸がどうもステップ数のようで
全て荷重-ステップ数のグラフになってしますのです。
長くなりすみませんが、お願いいたします。

【37276】Re:連続グラフ作成
発言  Kein  - 06/4/27(木) 17:51 -

引用なし
パスワード
   実際にそのサンプルを使ってテストしてみましたが、何も問題はありませんよ。
>横軸がどうもステップ数のようで
ではなく、ちゃんとひずみが入力された範囲の最大値と最小値を、軸の上限・下限
にしていますし、ステップと見えてしまうのは項目軸の TickMarkSpacing が
一定でなので、ラベルが等間隔にしか表示されないからでしょう。
ちなみにそこを変更するコードは 

Ch.Axes(Category).TickMarkSpacing = 5

というものです。

あと、グラフタイトルにしたい文字列が書かれてなかったので、仮に
"荷重とひずみの関係" にグラフの作成順の番号を付けたもの、とするなら

Ch.HasLegend = False

の下に

Ch.HasTitle = True
Ch.ChartTitle.Caption = "荷重とひずみの関係 : " & i - 1

と、追加して下さい。

【37301】Re:連続グラフ作成
質問  ハーレー  - 06/4/28(金) 14:30 -

引用なし
パスワード
   ▼Kein さん:
時間が空いてしまいましたが、おしかりを受けることを承知でコメントさせて頂きたいと思います。

2回目にいただいたコードでは全て同じ内容(X軸の値が異なるはずなのに、全て同じ曲線のグラフ)になってしまいます。
>実際にそのサンプルを使ってテストしてみましたが、何も問題はありませんよ。
>>横軸がどうもステップ数のようで
>ではなく、ちゃんとひずみが入力された範囲の最大値と最小値を、軸の上限・下限
>にしていますし、ステップと見えてしまうのは項目軸の TickMarkSpacing が
>一定でなので、ラベルが等間隔にしか表示されないからでしょう。
どうして最初にいただいたコードだとデータ分様々なグラフが出来て(X軸とY軸の参照データが逆転していてたのが問題でした)
2回目のコードだと全て同じ曲線のグラフがデータ分だけ出来てしまうのでしょうか?コードが読み込めず本当にすみません。

【37305】Re:連続グラフ作成
発言  Kein  - 06/4/28(金) 15:35 -

引用なし
パスワード
   グラフタイトルの方は、ちゃんと連番が付いてますか ?
同じグラフが出来るとすると、疑わしいのは
>Se.XValues = .Columns(i)
です。i (アルファベットの"アイ")を 1 (数値の 1 )に書き間違えて
いませんか ?
とにかくこちらでは再現できませんでしたが・・。

【37313】Re:連続グラフ作成
質問  ハーレー  - 06/4/28(金) 17:31 -

引用なし
パスワード
   Kein さんへ

>グラフタイトルの方は、ちゃんと連番が付いてますか ?
>同じグラフが出来るとすると、疑わしいのは
>>Se.XValues = .Columns(i)
>です。i (アルファベットの"アイ")を 1 (数値の 1 )に書き間違えて
>いませんか ?
>とにかくこちらでは再現できませんでしたが・・。
なるほど、ちょっと怪しい点が出てまいりました。
Bカラム以降を例としてひずみa,ひずみb・・・とした僕が悪かったです、
本当の名前は連番になっているわけではなくて、IN-1-1、OUT-1-2とかD-1とか定形の書式ではないという点を説明を簡潔にしようと省いてしまいました。
そこの書式とコードの設定に矛盾があるような気がしてまいりました。
いかがでしょうか?

【37357】Re:連続グラフ作成
質問  ハーレー  - 06/5/1(月) 16:33 -

引用なし
パスワード
   Kein さんへ

>グラフタイトルの方は、ちゃんと連番が付いてますか ?
>同じグラフが出来るとすると、疑わしいのは
>>Se.XValues = .Columns(i)
>です。i (アルファベットの"アイ")を 1 (数値の 1 )に書き間違えて
>いませんか ?
>とにかくこちらでは再現できませんでしたが・・。
いただいたコードではグラフタイトルは表示されません
Y軸に"荷重(kN)"、X軸に"ひずみ"と出るだけです。
データの数だけ全て同じ曲線です。
サンプルとして出したデータを使ってを私のほうでも走らせて見ましたが、
こちらも同じグラフが出来てしまいます。
Y軸はAカラムのデータを追っていますが、X軸のデータはBカラム以降のデータを追っていないようです。X軸の数値が全て一緒で、ステップ数と同じ最大値で終わっております。
この際、Y軸とX軸の名前とかの記述は省いて頂いて、
始めにいただいたコードを元に
Y軸にAカラムのデータ、X軸にBカラム以降のデータを使ってそれぞれグラフを描くというシンプルなコードをご呈示頂けないでしょうか?
無理を言って申し訳ございませんが、よろしくお願いします。

【37362】Re:連続グラフ作成
発言  ネット徘徊者  - 06/5/1(月) 17:25 -

引用なし
パスワード
   業務連絡

http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=85872&rev=0

【37365】Re:連続グラフ作成
発言  Kein  - 06/5/1(月) 18:18 -

引用なし
パスワード
   コードの意味は理解してますか ?
>With Worksheets("Sheet1").Range("A1").CurrentRegion
これは Sheet1 を開いて A1 を選択し、「編集」「ジャンプ」「セル選択」で
"アクティブセル領域"にチェックをつけて Ok したとき、選択される範囲です。
もしその範囲にX軸にプロットするデータがなければ、グラフは正常に出来ない
でしょう。とにかくこちらでは、そちらが提示されたデータを用いて先のコードで
問題なくグラフが出来てますから、どこをいじっても返って失敗する可能性が
高くなるだけです。
まず、コードの意味を解析してみて下さい。問題など無いことが分かるはずです。

【37367】Re:連続グラフ作成
発言  q6 6p  - 06/5/1(月) 18:56 -

引用なし
パスワード
   こんにちは。
こっちまで来てしまいました^ ^
あっちは解決で閉じてもらえるとありがたいです。
ちょっとつくりかけてて思ったのは、
1行目に項目名があるのではないか、という事です。
もしそうなら

With Worksheets("Sheet1").Range("A1").CurrentRegion
  With .Resize(.Rows.Count - 1).Offset(1)'●この行挿入
    For i = 2 To .Columns.Count
      (中略)
    Next i
  End With'●この行挿入
End With

で、うまくいきそうな気も。
全然見当ちがいだったらゴメンなさいネ^ ^

【37378】Re:連続グラフ作成
発言  ハーレー  - 06/5/2(火) 12:02 -

引用なし
パスワード
   q6 6p さん
keinさんへ

q6 6pさんから項目名があるのでは?とのコメントを頂きました。
確かに一行目に各データ名が入っておりましたので、
q6 6pさんのコメントを逆に理解し、データ名の入っている
一行目を削除したところ各データ毎の異なるグラフが描けました。
やはり僕の説明が悪かったようで、keinさんには大変ご迷惑をおかけしました。
連休中にすみません。

完全解決ではないのですが、取り急ぎ、ご連絡します。

【37382】Re:連続グラフ作成
お礼  ハーレー  - 06/5/3(水) 7:03 -

引用なし
パスワード
   q6 6p さん
keinさんへ

先ほど(と言っても随分経ちますが・・・)
q6 6pさんのご指摘を逆に理解し、1行目のデータ名を削除して処理が出来た旨、
ご報告しましたが、もちろんq6 6pさんのご指摘のコードを使えばデータ名があるシートでも処理できることを確認の意味も込めて、ご報告いたします。

グラフの体裁(線の色や背景の灰色をなしにする等)を整える方法は他のレス等も参考に調べてみようと思います。
とりあえず、ここでは解決処理とさせていただこうと思います。
keinさん q6 6pさんありがとうございました。
また、今後とも宜しくお願いいたします。(もう少し、コードについて議論できる様勉強します)

7706 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free