[[20150704211703]] 『グラフ作成』(ちぃさん) ページの最後に飛ぶ

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

 

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

すみません。

現在質問内容中関連です。

[[20150630230416]] 
こちらでの続きになります。

現在、

Sub test2()
ActiveSheet.ChartObjects("test").Activate
With Sheets("Sheet3")
ActiveChart.SetSourceData Source:=.Range("F1:" & .Cells(Rows.Count, "F").End(xlUp).Address)
End With

End Sub

このような感じで問題なく動いているのですが、少し追加したい部分がありマクロの記録をとり上記のコードにプラスしたのですがエラーがでます。

コンパイルエラー
1004
パラメーターが無効です。

何の事かわかりません。お助け頂けないでしょうか。

Sub Macro13()
'
' Macro13 Macro
'

'

    ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("B1:C17")
    ActiveChart.Axes(xlValue).MinorGridlines.Select
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.Axes(xlValue).Select
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).Name = "=Sheet3!$D$1"
    ActiveChart.SeriesCollection(2).Values = "=Sheet3!$D$2:$D$17"
    ActiveChart.SeriesCollection(2).Select
    ActiveChart.SeriesCollection(2).ChartType = xlLine
End Sub

追加してエラーのでるコード
Sub test2()
ActiveSheet.ChartObjects("test").Activate
With Sheets("Sheet3")
ActiveChart.SetSourceData Source:=.Range("B1:C17")
ActiveChart.Axes(xlValue).MinorGridlines.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.Axes(xlValue).Select
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SetSourceData Source:=.Range("F1:" & .Cells(Rows.Count, "F").End(xlUp).Address)
ActiveChart.SeriesCollection(2).ChartType = xlLine '←ここで出ます
End With

End Sub

どうか宜しくお願い致します。

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


系列を追加し、折れ線にするということでしょうか。

 Sub test()
    Dim ws As Worksheet
    Dim r1 As Range, r2 As Range
    Dim cht As Chart

    Set ws = Sheets("Sheet3")
    Set r1 = ws.Range("B1:C17")
    Set r2 = ws.Range("F1", ws.Cells(Rows.Count, "F").End(xlUp))

    Set cht = ActiveSheet.ChartObjects("test").Chart

    With cht
        .ChartType = xlColumnClustered
        .SetSourceData Source:=r1

        With .SeriesCollection.NewSeries
            .Values = r2
            .ChartType = xlLine
        End With
    End With

 End Sub

(マナ) 2015/07/04(土) 23:00


元コードを修正するとすると

 ActiveChart.SetSourceData Source:= _
    Union(.Range("B1:C17"), .Range("F1:" & .Cells(Rows.Count, "F").End(xlUp).Address))
 ActiveChart.SeriesCollection(3).ChartType = xlLine

(マナ) 2015/07/04(土) 23:16


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

>元コードを修正するとすると

ありがとうございます。

>列を追加し、折れ線にするということでしょうか。

はい。そうでございます。

質問が2点あります。

1、マクロの記録での同じ結果でしたが、何故 Sheet3 にあるデーターを空にして1どマクロを動かし新たに指定範囲内に折れ線グラフのデーターを入力しマクロを動かすとグラフが反映されないのですか?
マクロコードを新規Bookにコピペしても使えないのですか?

2、マクロの記録を見ていてもわからなかったのですが、グラフの高さ(今のでしたらメモリが10)はどの部分で決められているのですか?

(ちぃさん) 2015/07/04(土) 23:27


すみません。

F8で動作を見ていて違うコードを動かしていました。

失礼しました。

1の方は無視してくださいませ。
(ちぃさん) 2015/07/04(土) 23:31


ごめんなさい。質問の意味がわかりません。
グラフの高さとは、縦軸の目盛の最大値のことでしょうか?
(マナ) 2015/07/04(土) 23:43

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

わかりにくい質問ですみません。

はい。縦軸の高さのことです。
(ちぃさん) 2015/07/04(土) 23:50


変更して、どう記録されるか確認してみました。

 ActiveChart.Axes(xlValue).MaximumScale = 10

(マナ) 2015/07/04(土) 23:59


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

>ActiveChart.Axes(xlValue).MaximumScale = 10
 コレって?

私が掲示した記録の中にありました???

(マナ)さん にご教授いただいたコード内にもないような(汗)
(ちぃさん) 2015/07/05(日) 00:13


変更しないと記録されないです。
 ※今日はこれで最後の書き込みです。

(マナ) 2015/07/05(日) 00:20


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

わかりました。

連続投稿すみません。

マクロの記録で見て頂いたのですね。

遅くまでお付き合いいただきましてありがとうございました。
(ちぃさん) 2015/07/05(日) 00:23


すみません。

Set r1 = ws.Range("B1:C17")

Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1).Value

これでなぜ コンパイルエラーがでるのでしょうか?

Dim r1 As Range
ココの部分で nothing となっているのですが。

セルの方は値はあるのですが。

因みに、B列は現在26行まで値があり(1行目はなし)C列は1行目から26行目まで全て値があります。

Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1).Value
は C25を選択していると思っているのですが、間違っていますでしょうか?
(ちぃさん) 2015/07/05(日) 12:09


 >>これでなぜ コンパイルエラーがでるのでしょうか? 

 コンパイルエラーですか?
 もし、ほんとうにコンパイルエラーだとしたら、Option Explicit記述があって、かつ ws の変数定義がないとしか考えられませんが。

 1004 の 実行時エラー じゃないですか?

 r1 は Rangeオブジェクトですから、セル領域オブジェクトを格納しなきゃいけません。
 ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1).Value
 これは、そのセルオブジェクトの中の Valueプロパティ、つまり【値】ですから、Set するものとしてはふさわしくないということなんですが?

 Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1)

 でしょうね。

(β) 2015/07/05(日) 12:27


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

すみません。

間違いました。
>1004 の 実行時エラー じゃないですか?
こちらでした。

オブジョクトの定義エラー

でも何故でしょうか?

指定している所は数値です。
(ちぃさん) 2015/07/05(日) 12:31


連続ですみません。

>これは、そのセルオブジェクトの中の Valueプロパティ、つまり【値】ですから、Set するものとしてはふさわしくないということなんですが?

Selectでもだめなのですが。
(ちぃさん) 2015/07/05(日) 12:35


 Select とは?
 実際のコードでは なんたら.Select という記述をしたのでしょうか?

 いずれにしても、右辺はセルオブジェクトでなければいけません。

 どうしても

 Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1)

 こう書きたくなければ

 ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1).Select
 Set r1 = Selection

 の2行でもいいですが。
 ただし、この場合、この ws で指定されるシートがアクティブシートでない場合は、Select そのものが
 エラーになりますよ。(セル.Select は、そのセルがアクティブシート上にあることが必要ですから)

(β) 2015/07/05(日) 12:47


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

>Select とは?
ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1).Select

このようにです。
すみません。

(β)さんに掲示いただいた物と比べて少し不足部分がありますがでも、エラーとなる理由は
>ただし、この場合、この ws で指定されるシートがアクティブシートでない場合は
これですね(泣)

どうすればいいのですか?

C列は必要場所のみ値をいれていたのですが、F列の最終行が毎回変わるのにC列に位置が固定では都合が悪いと思いまして。C列にある値を2個だけ拾いたいのですが。

(ちぃさん) 2015/07/05(日) 13:19


 >>どうすればいいのですか? 

 ですから、コード構文としては

 Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1)

 のような形にすればいいんです。
 ただし、右辺のセルが要件にあっているかどうかは、今までの経緯を読んでいないのでなんとも・・・

 ちなみに

 >>因みに、B列は現在26行まで値があり(1行目はなし)C列は1行目から26行目まで全て値があります。 

 という状況であるなら、右辺は B26 の 1つ上、1つ右 ですから、 C25 になります。

(β) 2015/07/05(日) 13:35


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

> という状況であるなら、右辺は B26 の 1つ上、1つ右 ですから、 C25 になります。

すみません。

でも C25 も現在は値があるのですが、やはり「オブジョクトの定義エラー 」がでます。

ちなみに現在

 Sub test()
    Dim ws As Worksheet
    Dim r1 As Range, r2 As Range
    Dim cht As Chart

    Set ws = Sheets("Sheet3")
    Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1)

    Set r2 = ws.Range("D1", ws.Cells(Rows.Count, "D").End(xlUp))

    Set cht = ActiveSheet.ChartObjects("test").Chart

    With cht
        .ChartType = xlColumnClustered
        .SetSourceData Source:=r1

        With .SeriesCollection.NewSeries
            .Values = r2
            .ChartType = xlLine
        End With
    End With

 End Sub

このような感じです。

ご教授いただいている部分で変更している部分は

Set r1 = ws.Range("B1:C17")

Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1).Value

ここだけなのですが。

すみません。

もちろん

Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1)

この状態でも試したのですが。
(ちぃさん) 2015/07/05(日) 13:44


.Offset(-1, 1)の位置が違うかも

 >Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)).Offset(-1, 1) 
 ↓
 Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1))  

(マナ) 2015/07/05(日) 14:07


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

>Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1))
うごきました。

でもイメージしていたのと違ってしまいました。

いま、B列は現在26行まで値があり(1行目はなし)C列は C4 と C22 にしか値がないのになぜC列の値がグラフに反映されるのでしょうか?

(ちぃさん) 2015/07/05(日) 14:53


すみません。

理解しました。

多分思っていることが不可能な気がしてきました。

どうしてもC列にある値は全て反映されるのですね。

試しに Set r1 = ws.Range("B1,C27") これでも同じくC列にある値全て反映されました。

諦めます。

ありがとうございました。
(ちぃさん) 2015/07/05(日) 14:59


諦めるのは結構なのですが、
 そもそも、データの状態がどんなで、どういうグラフにしたいのかが、不明確です。
 明らかにしていただければ、可能かもしれません。

(マナ) 2015/07/05(日) 15:06


 もうあきらめてみないのかもしれませんが、マナさん指摘の通り、やりたいことと、実際のデータがどうなっているかを
 もう少し落ち着いて説明すれば、きっと皆さんからベストの解決方法が提示されると思います。

 >>C列は1行目から26行目まで全て値があります
 >>C列は C4 と C22 にしか値がない
 >>なぜC列の値がグラフに反映されるのでしょうか

 この3つの説明文は、それぞれ、矛盾してますね。
 グラフには与えた領域の値が反映しますよね。すべてに値があればすべて反映するでしょうし、一部しか値がなければ
 その一部だけが反映するでしょうね。

 コードの前に、まず、要件を整理し、どんな条件でどんなことをしたいのか、そこをまとめるのが第一歩。
 コードは、最後の最後に考えればいいんですよ。

(β) 2015/07/05(日) 16:09


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

説明内容は最近何日間かお世話になっている内容同じ内容です。
私の説明が下手なのでしょう。

なかなか伝わらないみたいで。

[[20150705081421]]
[[20150702235020]]

この2つともコチラの事に関連している内容なのでやはり無理かと。

(マナ)さんにご教授いただいている内容ではぼ出来上がりなのですが1部分、できれば変更できればと思ってました。

Set r1 = ws.Range("B1", ws.Cells(Rows.Count, "B").End(xlUp).Offset(-1, 1))
で拾おうとしていた部分です。

C列は必要部分だけに値を入れておけばグラフ反映されるのでそれでもいいかな と思っていたのですが。

そもそも、C列の値はグラフの縦軸と同じ扱いで考えています。

C列は棒グラフです。
D列は折れ線グラフです。

グラフ全体を製品幅のデーター(測定数全量)として
その全体から有効範囲分のセルの位置2箇所に棒グラフで表示し
有効範囲内のグラフの形を表そうと思っていました。

Range("B1", ws.Cells(Rows.Count, "B").End(xlUp)
で最終行を獲得し

Offset(-1, 1))
を使い有効位置を表示できればよかったのですが。

Offsetをつかっても、と言うかOffsetじゃなくても位置を指定してもC列のデーターは全て反映されるみたいなので無理かな。と思いまして。

どうでしょうか?

可能でしょうか?
(ちぃさん) 2015/07/05(日) 16:16


 関連トピ、ざっとしか見ていないのですが、印象としては、関数ありき、あるいはコードありきで
 どんな関数がいいだろうかとか、どうしたら、エラーがなくなるだろうかと、そういった内容になってしまってます。

 そうではなく、シート上の表を手打ちで、具体的につくりあげて、その表から、こんなグラフをつくりたい、
 表自体は、ここは固定だけど、ここは可変で、行数(あるいは列数)が変動する。

 こういった説明からスタートしてはいかがかなと、そうアドバイスしているつもりです。

 それを、ここを、Offsetでこうこうしたけど、エラーになるとか、その領域が自分の思ったものじゃない、
 どう直したら自分の思っている領域になるだろうかという、コードの問題になっているので、わかりにくくなっているんだと思います。

(β) 2015/07/05(日) 16:31


たぶん不可能ではないと考えています。

 関連スレは全部目を通しています。
 でも、まだデータがイメージできていません。
他のスレのように、例示していただけませんか。

 で、グラフにするのは、C、D列でよいですね。(B列は?)

(マナ) 2015/07/05(日) 16:34


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

>グラフにするのは、C、D列でよいですね。(B列は?)

サンプルではB列が幅の単位となっています。
使う際は最大で26行まで使います。

14行までが生データー添付位置
14行から26が処理されグラフ表示されるデーターとなります。

A列 幅単位
B列 有効範囲用数値
C列 生データー
. .
Z列 生データー

このような感じです。

B列の有効範囲データーというのは既に(マナ)さんにご教授いただいた中にある棒グラフのことです。
ココは数値200で固定。
グラフの方も 軸のオプション⇒最大値200で固定。

反映するグラフは別シート。

Sheet1

 ____A____ ____B____ ____C____ . .____O____. .____Z____
1           有効  生データー 処理データー
2    1       200     生データー  処理データー
3    2       200         .            .
4    3       200         .            .
.    .        .          .            .

今まで掲示しているサンプルにはA列、B列は記載してません。
グラフ表示の際に必要とおもいましたので。

先ほど無理かもとおもったのはこのB列の200です。
必ず毎回グラフ表示されてしまうので。

それ以外は(マナ)さんにご教授いただいた物で十分な感じです。  
(ちぃさん) 2015/07/05(日) 18:08


訂正です

Z列 生データー  ⇒ 処理後データー

(ちぃさん) 2015/07/05(日) 18:10


他にもお願いしたいことはありますが、まずは、以下について

 1)C列に具体的なデータをいれてください。
  データがないセルもあるということでよいですか。

 >C列は C4 と C22 にしか値がない

 2)D列もグラフ化に必要ではないのですか。
  具体的なデータを入れてください。

 3)O列、Z列は、グラフ化に必要ですか

(マナ) 2015/07/05(日) 18:49


(マナ)さん おそくなり申し訳ないです。

>データがないセルもあるということでよいですか。

C列は1行からデーターのある最下行まで空白は絶対にないです。
あるとすれば -999.99 です。

[[20150702235020]] 

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

先に言いました、「今まで掲示しているサンプルにはA列、B列は記載してません。」サンプルですので行がズレていますが、こちらのサンプルのB列が今記載しているC列となります。
今、言っているC列というのは フィルタオプション で処理されていないデーターになりますのでグラフデーターとは関係ないです。

 >2)D列もグラフ化に必要ではないのですか。
  >具体的なデータを入れてください

[[20150702235020]] 

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

D列のデーターがコチラのサンプルのC列のデーターとなります。
フィルタオプションで エラー値 -999.99 を除いたグラフに反映さすデーターです。

>3)O列、Z列は、グラフ化に必要ですか
 
後で増やせるようにしてもらえれば嬉しいです。

Z列まで使わない種類ものもありますので、グラフ1つに使うデーター範囲は3列です。

グラフ1⇒(A列)(B列)(O列)
グラフ2⇒(A列)(B列)(P列)
グラフ3⇒(A列)(B列)(Q列)

こんなかんじでどのグラフも必ず(A列)(B列)が入り(O列)などの測定して不要部分を除いたデーターを反映しグラフの形を確認します。

      l                l            
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ←これが反映されたO列のデーターとすれば
         l                      l
         l                      l

    ↑           ↑
    ここと        ここがB列の棒グラフとなります。

下手な絵ですみません。

わかりますでしょうか?

(ちぃさん) 2015/07/05(日) 20:09


追記

グラフ1 と グラフ2 と グラフ3 と 例で記載していますが全て別のグラフになります。
(ちぃさん) 2015/07/05(日) 20:11


度々すみません。

別のグラフと言うのが伝わってない気がするので、

(マナ)さんからご教授いただいたコードをこんな感じで増やして動作確認しました。

 Sub test()
    Dim ws As Worksheet
    Dim r1 As Range, r2 As Range
    Dim r3 As Range, r4 As Range
    Dim cht As Chart

    Set ws = Sheets("Sheet3")
    Set r1 = ws.Range("B1:C27")
    Set r2 = ws.Range("D1", ws.Cells(Rows.Count, "D").End(xlUp))

    Set cht = ActiveSheet.ChartObjects("test").Chart

    With cht
        .ChartType = xlColumnClustered
        .SetSourceData Source:=r1

        With .SeriesCollection.NewSeries
            .Values = r2
            .ChartType = xlLine
        End With
    End With

    Set ws = Sheets("Sheet3")
    Set r3 = ws.Range("B1:C27")
    Set r4 = ws.Range("E1", ws.Cells(Rows.Count, "E").End(xlUp))

    Set cht = ActiveSheet.ChartObjects("test").Chart

    With cht
        .ChartType = xlColumnClustered
        .SetSourceData Source:=r3

        With .SeriesCollection.NewSeries
            .Values = r4
            .ChartType = xlLine
        End With
    End With

 End Sub
(ちぃさん) 2015/07/05(日) 20:37

あっ
間違いがありました。

 Sub test()
    Dim ws As Worksheet
    Dim r1 As Range, r2 As Range
    Dim r3 As Range, r4 As Range
    Dim cht As Chart

    Set ws = Sheets("Sheet3")
    Set r1 = ws.Range("B1:C27")
    Set r2 = ws.Range("D1", ws.Cells(Rows.Count, "D").End(xlUp))

    Set cht = ActiveSheet.ChartObjects("test").Chart

    With cht
        .ChartType = xlColumnClustered
        .SetSourceData Source:=r1

        With .SeriesCollection.NewSeries
            .Values = r2
            .ChartType = xlLine
        End With
    End With

    Set ws = Sheets("Sheet3")
    Set r3 = ws.Range("B1:C27")
    Set r4 = ws.Range("E1", ws.Cells(Rows.Count, "E").End(xlUp))

    Set cht = ActiveSheet.ChartObjects("test2").Chart

    With cht
        .ChartType = xlColumnClustered
        .SetSourceData Source:=r3

        With .SeriesCollection.NewSeries
            .Values = r4
            .ChartType = xlLine
        End With
    End With

 End Sub

こんな感じです。
(ちぃさん) 2015/07/05(日) 20:40


少しずつシートのイメージができてきました。
 でもまだ、確認が必要です。下記は、行と列の間違いですか。
 フィルタオプションでO列以降に抽出(-999.99以外)するという意味でしょうか。

 >使う際は最大で26行まで使います。 
 >14行までが生データー添付位置 
 >14行から26が処理されグラフ表示されるデーターとなります。

(マナ) 2015/07/05(日) 20:47


(マナ) さん 度々申し訳ないです。

>フィルタオプションでO列以降に抽出(-999.99以外)するという意味でしょうか。
測定した生データーをB列に添付します。

A列とB列は常にさわりません。

1500mm幅の物を測定すると1500行使います。
3000mm幅なら3000行です。

その一つ一つのデーターをグラフ表示し、両サイドの高さとセンターの凸を見ます。

3000mm幅物を測定開始し端部より500mmのとこから1500mmの位置まで高さが同じなら生産をストップしなければならなくなります。

不良品は作ると怒られるので。

綺麗な山の形、富士山のような形のグラフになるデーターの物をつくらなければならないのです。

かつ有効範囲の両端部に誤差があまりないことを求められているので

グラフを見たときに

山の形

グラフに表示された有効範囲の両端部の位置が重要なのでこんな手間なことになっております。

ほんとに長い時間ありがとうございます。

(ちぃさん) 2015/07/05(日) 21:27


また追記です。

>下記は、行と列の間違いですか

間違いです。

すみません。
(ちぃさん) 2015/07/05(日) 21:28


>グラフ1⇒(A列)(B列)(O列)

 これに関して質問
 1)グラフ範囲は、O列の最終行までですか。
 2)A列が項目軸で、単なる1〜の連番ですね
 3)B列で、表示する行は、何行ありますか
 4)その行は、どうやって決めますか?

(マナ) 2015/07/05(日) 21:51


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

>1)グラフ範囲は、O列の最終行までですか。

データーのある最下行までです。

Set r2 = ws.Range("D1", ws.Cells(Rows.Count, "D").End(xlUp))

この部分になるかと思います。

>2)A列が項目軸で、単なる1〜の連番ですね

そうです。
セル1つを1mmとしています。

1500mm幅でしたらA1は空白になりA2になるとおもうのでA1501は1500になります。

>3)B列で、表示する行は、何行ありますか

そこが今回変更をする原因となった部分であります。

O列の端部より短いと意味がなくなってしまうので、あらかじめ200と数字を入力しておくのでしたら今一番広いのは3000mm程なのでB3501までにしたいです。

>4)その行は、どうやって決めますか?

B列の位置なので有効の位置ということですよね?
O列にあるデーター量は全幅になります。
過去データーでこの品名はでーたーりょうが何行ぐらいと推測できます。
多少は誤差がありますが数ミリなのでいいかと。

[[20150702235020]] 
コチラでもある データー値も両サイドとセンターの値を拾いだします。

有効幅は一番確実なのは (デイト)さん 案の
=MAX(OFFSET(C1,COUNT(C:C)/2-5,0,10))

1からデーター最終行/2でセンター位置をだし、そこから有効の数分上と下の位置まで検索

か、多少の位置のズレはあるかもしれないけど
O列のデーター最終行から有効幅分場所を遡るか でしょうか。

その
全ての幅のものを同じBookでは使わず分けて使うので

(ちぃさん) 2015/07/05(日) 22:35


また追記です。

>4)その行は、どうやって決めますか?

この行の獲得するために OFFSET をつかってみたのですが

あっ無理かも って 今日の夕方になりました。
(ちぃさん) 2015/07/05(日) 22:39


マクロでどうやって求めるかを聞いているのではありません。
質問の仕方が悪かったでしょうか。

 例えば、1500mm幅でO列に約1400行のデータがあるとき、それをグラフ化したら、
 B列(棒グラフ)で表示するのは、2行ですか?
 その2行は計算で自動で求まるものではないのですか?

 B列で表示する行を決めるルールさえ教えていただければ、
 それをマクロで求めることは可能です。
 そして、グラフ化も可能です、

(マナ) 2015/07/05(日) 22:58


(マナ)さん すみません。

> B列(棒グラフ)で表示するのは、2行ですか?

はい。2行です。

>その2行は計算で自動で求まるものではないのですか?

そうなのですか。

すみません。
知りませんでした。

> B列で表示する行を決めるルールさえ教えていただければ、

すみません。
ルールというのはどういうももののことでしょうか。

B列は有効幅を示します。
有効のパターンみたいなことでしょうか?

全幅が1500mmで有効が1000mmのものがあれば、全幅650mmで有効が400mmのときもあります。

毎回、全幅からマイナス○○mmと決まってないです。

オーダーにより全幅が○○mmで有効が○○mmのものをと注文がはいるのできまったパターンがないです。

ルールというのはこう言うパターンのことでしょうか?

(ちぃさん) 2015/07/05(日) 23:31


 2015/07/05(日) 20:09に図示して頂いたようなグラフで
 2本の縦棒の位置は、いつ決まるのですか。
 少なくとも、マクロ実行前には決定しているのですよね?
 で、決まってさえいれば、お望みの位置に縦棒を引くことは可能です。

(マナ) 2015/07/05(日) 23:40


本日も残り時間が少なくなってきましたので、
現時点での理解で、書いてみました。
 間違っていたとして、それは出来ないからではなく、
 どうしたいかを、私が理解できていないだけです。

 例えば、中央付近の10 行に棒を引くというなら、こんな感じです。
 どこに棒を引きたいのか、わからないのです。

 Sub test2()
    Dim ws As Worksheet
    Dim n As Long
    Dim r1 As Range, r2 As Range
    Dim cht As Chart
    Dim s As Long, e As Long

    Set ws = Sheets("Sheet3")
    n = ws.Cells(Rows.Count, "o").End(xlUp).Row
    Set r1 = ws.Range("a1").Resize(n)
    Set r2 = ws.Range("o1").Resize(n)

    s = Int(n / 2) - 4
    e = Int(n / 2) + 5

    Set cht = ActiveSheet.ChartObjects("test").Chart

    With cht
        .ChartType = xlXYScatterLines
        .SetSourceData Source:=Union(r1, r2)
        With .SeriesCollection.NewSeries
            .XValues = Array(s, s)
            .Values = Array(0, 200)
        End With
        With .SeriesCollection.NewSeries
            .XValues = Array(e, e)
            .Values = Array(0, 200)
        End With
    End With

 End Sub

(マナ) 2015/07/05(日) 23:51


(マナ) さん 説明不足すみません。

 >2本の縦棒の位置は、いつ決まるのですか。
 >少なくとも、マクロ実行前には決定しているのですよね?
 >で、決まってさえいれば、お望みの位置に縦棒を引くことは可能です。

仮に全幅1500mm幅と650mm幅の2つが今、生産中だったとします。

全幅1500mm幅のものは毎回1000mmが有効です。

全幅650mm幅のものは毎回400mmが有効です。

使うBooKは別々のBookを作成しておきます。

2本の縦棒の位置は

全幅1500mm幅のものなら過去のデーター数からセルの位置が推測できるのでO列に転機された全幅の端部の位置から内側へ

1500mmでしたら

1目の縦棒の位置は O250 の 位置
2目の縦棒の位置は O1250 の 位置

となります。

ご教授いただいた内容ためしてみます。

本日の長い時間、遅くまでお付き合いいただき本当にありがとうございました。
(ちぃさん) 2015/07/06(月) 00:06


(マナ)さん お疲れ様でした。

満足度120%です。

私の有効範囲表示といっていた所、完璧すぎる仕上がりです。

ありがとうございました。
(ちぃさん) 2015/07/06(月) 01:21


コメント返信:

[ 一覧(最新更新順) ]


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