• ベストアンサー

エクセルでグラフを細かくしたい

エクセルで,以下のような10秒おきのグラフのときに,間の値を自動的に読み取って5秒おき,2秒おきのグラフに変換することはできますか? X, Y 0, 0 10,10 20,20 30,30 ↓ X, Y 0, 0 5, 5 10,10 15,15 20,20 25,25 30,30 拙い説明ですが,よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

役に立っているのかどうか分かりませんが 再分化数を指定できるようにしてみました。 変数np値で指定します。 Sub goo散布図細分化5()   Dim chtobj As ChartObject   Dim csc As Object   Dim xval As Variant, yval As Variant   Dim nxval As String, nyval As String   Dim xrng As Range, yrng As Range   Dim nv As Long   Dim np As Long   Dim i As Long   Dim j As Long      np = 5  '細分化数を指定する   Set chtobj = ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count)   Set csc = chtobj.Chart.SeriesCollection(1)      '//元のデータセル範囲をセット   With csc     .XValues = Range("A1:A10")     .Values = Range("B1:B10")   End With      xval = csc.XValues   yval = csc.Values   nv = UBound(xval)   For i = 1 To nv     For j = 1 To np       If i = 1 And j = 1 Then         nxval = xval(i)         nyval = yval(i)       ElseIf i > 1 And j = 1 Then         nxval = nxval & "," & xval(i)         nyval = nyval & "," & yval(i)       ElseIf i = nv And j = 2 Then         Exit For       Else         nxval = nxval & "," & xval(i) + (xval(i + 1) - xval(i)) * (j - 1) / np         nyval = nyval & "," & yval(i) + (yval(i + 1) - yval(i)) * (j - 1) / np       End If     Next j   Next i      '//グラフにデータを直接書き込む場合   csc.XValues = "{" & nxval & "}"   csc.Values = "{" & nyval & "}"      '//シートに書き出したデータセル範囲をセットする場合 '  With Range("A1") '    Set xrng = .Offset(, 2).Resize(UBound(Split(nxval, ",")) + 1) '    Set yrng = .Offset(, 3).Resize(UBound(Split(nyval, ",")) + 1) '  End With '  xrng.Value = WorksheetFunction.Transpose(Split(nxval, ",")) '  yrng.Value = WorksheetFunction.Transpose(Split(nyval, ",")) '  With csc '    .XValues = xrng '    .Values = yrng '  End With End Sub

Aei_aoi
質問者

お礼

ありがとうございます.自分でも細分化数を指定できるようにマクロ改良していたところなので,とてもありがたいです. 本当にありがとうございます.

その他の回答 (6)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

>データを10倍にする場合、数値が「2」になっている場所を10に変えれば大丈夫ですよね? やってみれば結果がすぐでますよ。 答えはNO!です。 前後のデータ値の差分の2分の1を前のデータ値に加算しているだけです。 マクロを5回ループしてやれば10倍ということになると思います。 Sub goo散布図細分化4()   Dim chtobj As ChartObject   Dim csc As Object   Dim xval As Variant   Dim yval As Variant   Dim nxval As String   Dim nyval As String   Dim xrng As Range   Dim yrng As Range   Dim n As Long   Dim i As Long   Dim j As Long   Dim k As Long      Set chtobj = ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count)   Set csc = chtobj.Chart.SeriesCollection(1)      '---テストを繰り返すために元のデータ範囲をセットしています。   csc.XValues = Range("A1:A10") 'Xの元データ範囲   csc.Values = Range("B1:B10")  'Yの元データ範囲   '--------ここまで     For k = 1 To 5     xval = csc.XValues     yval = csc.Values     n = UBound(xval)     For i = 1 To n * 2 - 1       If i Mod 2 = 1 Then         j = j + 1         If i = 1 Then           nxval = xval(j)           nyval = yval(j)         Else           nxval = nxval & "," & xval(j)           nyval = nyval & "," & yval(j)         End If       Else         nxval = nxval & "," & xval(j) + (xval(j + 1) - xval(j)) / 2         nyval = nyval & "," & yval(j) + (yval(j + 1) - yval(j)) / 2       End If     Next i     csc.XValues = "{" & nxval & "}"   '書き込み     csc.Values = "{" & nyval & "}"   '書き込み     j = 0   Next k End Sub >グラフを細かくする目的は、部分部分で細かいグラフを見て、 >その部分のデータを抽出したかったからです。 直線的なデータを単純に計算しているだけです。 このマクロが上記目的に合致しているかどうか疑問です。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

再分化したデータをシートに書き出すようにしてみました。 Sub goo散布図細分化2()   Dim chtobj As ChartObject   Dim csc As Object   Dim xval As Variant   Dim yval As Variant   Dim nxval As Variant   Dim nyval As Variant   Dim xrng As Range   Dim yrng As Range   Dim n As Integer   Dim i As Long   Dim j As Long      Set chtobj = ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count)   Set csc = chtobj.Chart.SeriesCollection(1)   '---テストを繰り返すために元のデータ範囲をセットしています。   csc.XValues = Range("A1:A10") 'Xの元データ範囲   csc.Values = Range("B1:B10")  'Yの元データ範囲   '--------ここまで   xval = csc.XValues   yval = csc.Values   n = UBound(xval)      ReDim nxval(n * 2 - 1)   ReDim nyval(n * 2 - 1)   For i = 0 To n * 2 - 2     If i Mod 2 = 0 Then       j = j + 1       nxval(i) = xval(j)       nyval(i) = yval(j)     Else       nxval(i) = xval(j) + (xval(j + 1) - xval(j)) / 2       nyval(i) = yval(j) + (yval(j + 1) - yval(j)) / 2     End If   Next i      With Range("A1") '元データ表の左上角のセル基準     Set xrng = .Offset(, 2).Resize(n * 2 - 1)     Set yrng = .Offset(, 3).Resize(n * 2 - 1)   End With   xrng.Value = WorksheetFunction.Transpose(nxval)   yrng.Value = WorksheetFunction.Transpose(nyval)   With csc     .XValues = xrng     .Values = yrng   End With End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

グラフの種類は散布図ですか? 下記ページが役に立つかも知れません。 グラフ範囲を自動的に更新する方法が解説されています。 Excel でのグラフ範囲を自動的に更新するために、定義名を使用する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;183446 Excel で名前付け範囲を使用して動的なグラフを作成する http://office.microsoft.com/ja-jp/assistance/HA011098011041.aspx ”グラフを細かくしたい”という目的はなんでしょうか。 試しに項目数を増やすマクロを組んでみました。 値を直接グラフにセット(SERIES関数に書き込み)します。 元のデータとのリンクは切れます。 10個程度のサンプルデータで確認しています。 数百個のデータに対し問題なく実行できるかどうか分かりません。 Sub test散布図項目細分化()   Dim chtobj As ChartObject   Dim csc As Object   Dim xval As Variant   Dim yval As Variant   Dim nxval As String   Dim nyval As String   Dim n As Integer   Dim i As Long   Dim j As Long      Set chtobj = ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count)   Set csc = chtobj.Chart.SeriesCollection(1)   '---テストを繰り返すために元のデータ範囲をセットしています。   csc.XValues = Range("A1:A10") 'Xの元データ範囲   csc.Values = Range("B1:B10")  'Yの元データ範囲   '--------ここまで   xval = csc.XValues   yval = csc.Values   n = UBound(xval)      For i = 1 To n * 2 - 1     If i Mod 2 = 1 Then       j = j + 1       If i = 1 Then         nxval = xval(j)         nyval = yval(j)       Else         nxval = nxval & "," & xval(j)         nyval = nyval & "," & yval(j)       End If     Else       nxval = nxval & "," & xval(j) + (xval(j + 1) - xval(j)) / 2       nyval = nyval & "," & yval(j) + (yval(j + 1) - yval(j)) / 2     End If   Next i   csc.XValues = "{" & nxval & "}"   csc.Values = "{" & nyval & "}" End Sub

Aei_aoi
質問者

お礼

xls88さん、返事が遅くなって申し訳ありません。 わざわざマクロを組んでいただいて本当にありがとうございます。 グラフを細かくする目的は、部分部分で細かいグラフを見て、その部分のデータを抽出したかったからです。 グラフを消してマクロを実行していたため、上手くいかず焦っていました。 現在は、データが2倍に増えていますが、データを10倍にする場合、数値が「2」になっている場所を10に変えれば大丈夫ですよね?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#1でマトを射たことをおっしゃっておられる。 エクセルはシートに(何の方法でも良い)データを作らないとグラフに反映されません。式のようなことを、別途与えて、受けてくれる機能はありません。データ上に実現しないと。このエクセルでの、基本のことを質問者はまだ気づいてないのでは。まずデータありきです。 わかっておれば、質問の仕方が、御礼の仕方が変わるはずです。 >マクロでどうにかしたほうがいいですかね 上記のことがわかれば、後はマクロでも関数でも、手入力でもかまわない。お好きなようにどうぞ。 ーー >直線の補完で充分なのですが グラフの種類によっては(折れ線グラフ)足して1/2する補間では 余り様子が変わらない。 グラフの種類は何を考えているのですか。それぐらい質問に書クべきです。 補間を別の方法でやるならともかく、こんなの、やっても意味無いのでは。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

データーを補完したいという事でしたら 行を1行おきに追加して  A2 =(A1+A3)/2 等とすれば、中間の値が補完されます グラフを滑らかにしたいという事なら グラフ作成時に「散布図」とし プロットした点の一つを右クリックすると「近似曲線の追加」というのが有ります それで、「多項式近似」で3次位にするとなめらかな曲線になります

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

Excelのグラフは「前提となる表」をグラフ化することしか出来ません。 ですので、そういう「補完データを表現すること」は元になる表の方で 行うことが前提になります。 で、問題はその補完方法ですが、直線で補完するのか、対数や高次の 曲線で補完するのかによって値は当然変わってきますよね。まずは その辺をハッキリさせる必要があります。補完する式が決まればあとは 表にその式を適用すれば、中間の値はいくらでも出てきますし。 まあ、適当に繋いだ程度でいいのなら、単に折れ線グラフにすれば済む 話だと思うんですが・・・そこらへんどうなんですか?

Aei_aoi
質問者

お礼

直線の補完で充分なのですが、XY座標が300以上のあるグラフなので、マクロでどうにかしたほうがいいですかね?

関連するQ&A

  • アニメーションするExcelのグラフ

    エクセルで、ある2種類の(x,y)グラフの値の一覧を入力した以下のようなものを作りました。   グラフ1  グラフ2   X  Y   X  Y 0 100 200  103 201 1 101 201  102 198 2 102 202  102 199 3 103 203  104 200 :  :  :   :  : これを行番号ごとに連動させてアニメーションさせたグラフを作りたいのですが Excel内、もしくはその他アプリケーションでそういったことをすることは可能でしょうか? 上の説明だと分かりにくいかもしれませんのでアニメーションの補足説明 行番号0のグラフ1の(100,200)とグラフ2の(103,201)の点が表示される 座標間0→1に線分が引かれる 行番号1のグラフ1の(101,201)とグラフ2の(102,198)の点が表示される 座標間1→2に線分が引かれる 以降繰り返し というような感じで行番号に連動して同じ時間軸の点が表示されるというのです

  • エクセルでグラフを!!

    エクセルでy=x^2とかy=10^xなどの関数グラフを書きたいのですが、どのようにすればよいのでしょうか? 一定間隔で値をセルに入力してグラフにする方法ではなく、スマートに作りたいです。ひょっとしてマクロで作るしかないんですかね?

  • Excelについて(グラフ作成)

    Excelでグラフを作成するときに、 例えば、x軸をA列の値、y軸をB列の値にしたいのなら2列を選択して グラフは簡単にできるのですが、それでは x軸をA列の値、y軸はある関数の値(例えばB1に入っているy=2*xのyの値)にしたいときはどうすれば良いのでしょうか? 分りやすくいうと、A列には1行目から 0 、2 、 4 、 6 、 8 、 10 、 12 ・・・・・ B1に、y = 2 * xが入っていてここから x=0 のとき y=0 x=2 のとき y=4 x=4 のとき y=8 x=6 のとき y=12 x=8 のとき y=16 x=10 のとき y=20 よりグラフを作りたいのです。 よろしくお願いします。

  • エクセルのグラフ

    エクセルのグラフを作っているのですが、そのグラフのある特定の部分に印がをつけたいのですがどうすれば良いのでしょうか。 例えば、2本の直線が交わっている部分のY軸の値をその部分だけ表示したりとか、点線などでY軸やX軸に向けて誘導線を降ろしたりとかしたいのですが。 もちろん、この場合に「データラベル」の表示でY軸の値を表示したりとかをすれば値自体は表示されますが、全てのポイントについて表示されるので困っています。また、元データを逐次修正すれば、それに連動してグラフの体裁が自動でできるようにしたいので、後から図形などを手動で加える方法も使えません。 元データを変更すれば、それに伴ってグラフには一切手を加えないで、かつ、特定のポイントだけをしるしなり、説明できるような形にしたいのですが。 何か良い方法はあるのでしょうか?

  • エクセルの折れ線グラフについて

    初歩的な質問かも知れませんが、宜しくお願いします。 エクセルでグラフを書く際に、 x=3.0の時y=8.5 x=2.9の時y=15.0 x=2.7の時y=25.1 x=2.4の時y=35.0  x=0.07の時y=38.0 ~~ のプロットを書き、折れ線グラフにしたいのですが、 どうしても折れ線グラフが2本になるか x軸上の目盛りのxの値が上記のxの値が並んでしまい、 グラフの意味がなさなくなってしまいます。 このように、グラフを作成出来ないので 正しい方法を教えていただきたいです。 宜しくお願いします。

  • エクセルでグラフから出た関数Xにたいして計算したい

     エクセルでデータを入力してグラフをつくり、そこからでた関数から グラフにxのパラメーターを入力することでyの値を自動計算したいのですがどうやればよろしいのでしょうか。 よろしくおねがいします。 関数式例)  y=13.524(-0.0038X)  ()は指数

  • Excelでのグラフの書き方について。

    Excelを用いてグラフを作成中に行き詰ってます。 グラフを書いた後に、y軸から任意の線(y=任意の実数)を引き、 その線とグラフとの交点からx軸上に垂直な線を引き、そのxの 値を求めることができるようなグラフを作りたいのですが、y軸 から任意の線を引くところで行き詰っています。 よろしければアドバイスください。

  • excelのグラフ

    excelのグラフについてです。 X軸1項目に対し、Y軸に5つの値をグラフにしたいのですが、 4つ目まではすべて金額であるため、Y軸1で棒グラフに、 5つ目は年数で、値も小さいため、Y軸2で折れ線グラフの 複合グラフを書きたいです。 ユーザー設定内の、「2軸上の折れ線と縦棒」を選択すると、 1~3つ目の値の金額までが、棒グラフ、 4つ目の金額と、5つ目の年数の値が折れ線グラフになってしまい、 Y軸2も4つ目の金額の値に合わせて設定されてしまいます。 上記の通り、棒グラフ4本プラス折れ線1のグラフを書くには どうしたらよいのでしょうか?

  • エクセルで折れ線グラフの作成方法を教えてください。

    こんにちは、いつもお世話になっています。 今回エクセルを使って化学のレポートを作ることになったのですが、少しわからないことがあったので質問させていただきました。 グラフは化学物質の凝固点に関する折れ線グラフで、100度まで熱した溶液を冷却して、30秒ごとにその温度変化を記録する、というものです。X軸は時間で、0、30、60,90(秒)となっており、Y軸は溶液の温度で、100℃から始まって減少していきます。 エクセルに値を入れてグラフの作成をしてみたのですが、X軸とY軸に自分の入れたい値を入れることがどうしても出来ません。 どうかエクセルに詳しい方がいらっしゃいましたらお教えいただけると光栄です。また、最終的にはグラフ・ペーパーのように網目状に線が入っているようにしたいのですが、これもエクセルで出来ますでしょうか? 申し訳ありませんが、もしご存知でしたら回答をよろしくお願いいたします。

  • エクセルのグラフで・・・

    エクセル2000で2時曲線を書いたのですが、このグラフで、任意のY切片に対するXの値を知りたいのですが、どうやったら求めることが出来るでしょうか? 等間隔の目盛りは出せるんですが、いざ値をとなると出せませんでした。 どなたかご存知のかたよろしくお願いします。

専門家に質問してみよう