[[20150630230416]] 『グラフ作成』(ちぃさん) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『グラフ作成』(ちぃさん)

お世話になります。

[[20150628122225]]
コチラに関係した質問内容になります。

sheet1

 ___A___ ___B___ ___C___
1        -999.99   7.99
2        -999.99   7.89
.           .        .
.           .        .
2546       7.88    6.82
2547       7.01
2548       6.09
2549       6.81
2550       6.82
2551    -999.99

グラフのデーダーを拾う範囲は予め設定しておきC列のデーター値をグラフ表示さてたいです。

C列のデーターのある最終行は毎回おなじ所ではなくてもグラフに反映さすデーターの選択範囲をさわることなく1行から最終行までのデーターを拾いたいのですがなにか手立ては有りますでしょうか?

質問内容がわかりにくいようでしたら指摘ください。

どうぞ宜しくお願いいたします。

< 使用 Excel:Excel2003、使用 OS:WindowsXP >


 C列 数式ありのデータ範囲でグラフ化。

 C列オートフィルタで空白以外で絞込み。

 で、いいんでないの?

 ※見出しあったほうがいいね。
 
(GobGob) 2015/07/01(水) 09:04 ⇒ 9:12 訂正

とても読み辛いです。お経じゃあるまいし、句読点を使ってくださいよ。

グラフのSetSourceDataのうち、行末の数字部分をマクロで変えれば良いです。
意味が判らなければ、マクロの自動記録を使い、手動でグラフの範囲を変えてみてください。必要な命令は、それで記録されますので。

行末を得る方法は、Cells(Rows.Count, "A").End(xlUp).Row のようにするのがすっきり実現できてお薦めです。
(???) 2015/07/01(水) 09:07


(GobGob)さん ありがとうございます。

> C列 数式ありのデータ範囲でグラフ化。
どういうことでしょうか?
理解できず申し訳ありません。

> C列オートフィルタで空白以外で絞込み。
後出し的で申し訳ないのですが、もしC列以外にもデーターがある場合でしたらどうすればいいでしょうか?

例えば

sheet1

 ___A___ ___B___ ___C___ ___E___ ___D___
1        -999.99   7.99   -999.99   7.99
2        -999.99   7.89   -999.99   7.89
3          .         .        .      .
.          .         .        .      .

C列とは別にD列にもデーターがあったとして、どちらのデーターもグラフ表示させたいけどデーターのある最終行が違う場合。

このような場合はどのようにすればいいでしょうか?

(???)さん ありがとうございます。
非常に読み辛く申し訳ありません。

>グラフのSetSourceDataのうち、行末の数字部分をマクロで変えれば良いです。
>意味が判らなければ、マクロの自動記録を使い、手動でグラフの範囲を変えてみてください。
挑戦してみます。

ありがとうございます。

(ちぃさん) 2015/07/01(水) 09:56


すみません。

マクロ記録でデーター選択範囲をみて見たのですがやはり分からないです。

関数でC列の最終行の位置がわかるようになったのですが、やはりグラフにはデーター範囲を設定することが難しいです。

ちなみに
=MAX(INDEX((C:C<>"")*ROW(C:C),))
で最終行を獲得しているのですが。。。。

グラフのデーター選択範囲の所にどのようにすれば毎回かわる最終行を獲得できるでしょうか?

どうぞ宜しくお願い致します。
(ちぃさん) 2015/07/01(水) 11:51


> =MAX(INDEX((C:C<>"")*ROW(C:C),))
> で最終行を獲得しているのですが。。。。

はい、数式はそれでもOKです。どこかのセルにそれが格納されているならば、VBAからはRangeで値を得るだけですね。 この式を書いたのは、どのセルですか?
同じ事をマクロで実現するのが、先に私が Cells(…) と書いたコードです。

まず、現状のグラフを右クリックし、「データソースの選択」画面を確認してください。データの範囲はどうなっていますか?
ここに書かれているセル範囲を文字列扱いし、末尾行を書き換えれば良いだけですよ。例えば、以下の感じ。
似たコードが、マクロの自動記録で生成されませんでしたか?

        ActiveSheet.ChartObjects("グラフ 1").Activate
        ActiveChart.SetSourceData Source:=ActiveSheet.Range("A1:" & Cells(Range("Z1"), "C").Address)
(???) 2015/07/01(水) 15:07

(???)さん ありがとうございます。

' Macro4 Macro
'

'

    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("C1:C14")
End Sub

すみません。
マクロの記録はこのような感じでした。
私が間違っていると思うのですが(汗)

(ちぃさん) 2015/07/01(水) 15:54


追記 

連続すみません。
>まず、現状のグラフを右クリックし、「データソースの選択」画面を確認してください。データの範囲はどうなっていますか?
=Sheet3!$C$1:$C$14
となってます。

>ここに書かれているセル範囲を文字列扱いし、末尾行を書き換えれば良いだけですよ。
(???)さんが書かれていた
>行末を得る方法は、Cells(Rows.Count, "A").End(xlUp).Row のようにするのがすっきり実現できてお薦めです。
に置き換えるのですか?
(ちぃさん) 2015/07/01(水) 16:09


度々連続ですみません。

>はい、数式はそれでもOKです。どこかのセルにそれが格納されているならば、
仮にですが現在 「E10」に獲得した最下行を表示させております。

「E10」に検出されているのは「21」です。

当たり前かもしれないですが

Sub Macro4()
'
' Macro4 Macro
'

'

    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range("C1:E10")
End Sub

でマクロを動かすとデーター範囲が「=Sheet3!$C$1:$E$10」となりグラフも新たに作成されてしまいます。

どのようにすればいいでしょうか?

すみませんがお助け頂けないでしょうか。

宜しくお願いいたします。
(ちぃさん) 2015/07/01(水) 16:42


グラフを作成する手順を、マクロ記録したようですね。既存のグラフの範囲を変える手順を記録すべきでしたね。
(これだと、既存のグラフ名が判らないです)

先の例では、Range("Z1") に最終行数を得る数式が書かれていることを前提としています。E10ならば、以下。

        ActiveSheet.ChartObjects("グラフ 1").Activate
        ActiveChart.SetSourceData Source:=ActiveSheet.Range("C1:" & Cells(Range("E10"), "C").Address)

それとも、式なんて入れたくない!、という事ならば、この部分を Cells(Rows.Count, "C").End(xlUp).Row としてください。
シート選択部分を省略して書いているので、標準モジュールにマクロ記述する場合は、シート名も指定してください。
(データが増える度に使うので、シートにActiveXのボタンを貼って、これを押したときに動作させるのをお薦め。これならシートモジュールになります)
(???) 2015/07/01(水) 16:50


(???)さん ありがとうございます。

いけました。

因みに
>それとも、式なんて入れたくない!、という事ならば、この部分を Cells(Rows.Count, "C").End(xlUp).Row としてください。
コレは

Sub test2()

  ActiveSheet.ChartObjects("グラフ 3").Activate
        ActiveChart.SetSourceData Source:=ActiveSheet.Range("C1:" & Cells(Rows.Count, "C").End(xlUp).Row), "C").Address)

End Sub

ではダメなのですか?
構文エラーが出ます。(泣)

どれが余分なのでしょうか?

度々申し訳ないです。

お助け頂けないでしょうか。

宜しくお願いいたします。
(ちぃさん) 2015/07/01(水) 17:39


よ〜く眺めれば判りそうですが…。(こういう作業をデバッグと言い、自分自身でやるべき作業です)
何故か、Cells指定を消してしまってますね。

    ActiveChart.SetSourceData Source:=ActiveSheet.Range("C1:" & Cells(Cells(Rows.Count, "C").End(xlUp).Row, "C").Address)
(???) 2015/07/01(水) 17:52

(???)さん ありがとうございます。

>よ〜く眺めれば判りそうですが…。(こういう作業をデバッグと言い、自分自身でやるべき作業です)
申し訳ございません。
ありがとうございます。

すみません。
考えてもわからないのですが(汗)
別のシートにグラフをもっていくと何故か「C1」しか選択されないのですが(汗)

現在は
ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("C1:" & Cells(Cells(Rows.Count, "C").End(xlUp).Row, "C").Address)
としています。
 
Sheets の前に With を付けるとコンパイルエラーが出ます。
別のシートを選択するから With が必要とおもっていたのですが違うみたいなのですが。

>標準モジュールにマクロ記述する場合は、シート名も指定してください。
マクロの記録で確認すると

 ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("C1:C22")
このような感じなのですが。

何が足りていないのでしょうか。

度々申し訳ありません。

教えていただけないでょうか。

宜しくお願い致します。

(ちぃさん) 2015/07/01(水) 19:11


お邪魔します。シート指定が不足しているからだと思われます。

 Cellsの前でもシートを指定する必要があります

 With Sheets("Sheet3")
    ActiveChart.SetSourceData Source:=.Range("C1:" & .Cells(Rows.Count, "C").End(xlUp).Address)
 End With

とか、

 With Sheets("Sheet3")
    ActiveChart.SetSourceData Source:=.Range("C1", .Cells(Rows.Count, "C").End(xlUp))
End With

あと、実行時にグラフが選択されていないとエラーになりますので注意してください。

(マナ) 2015/07/01(水) 19:54


(マナ)さん ありがとうございます。

シート指定をしているつもりでしたが場所が間違っていたという事で恥ずかしいです。
                  
すみません。

有り難うございました。
(ちぃさん) 2015/07/01(水) 20:02


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.