
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
ありがとうございます.自分でも細分化数を指定できるようにマクロ改良していたところなので,とてもありがたいです.
本当にありがとうございます.
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
>グラフを細かくする目的は、部分部分で細かいグラフを見て、
>その部分のデータを抽出したかったからです。
直線的なデータを単純に計算しているだけです。
このマクロが上記目的に合致しているかどうか疑問です。
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
No.4
- 回答日時:
グラフの種類は散布図ですか?
下記ページが役に立つかも知れません。
グラフ範囲を自動的に更新する方法が解説されています。
Excel でのグラフ範囲を自動的に更新するために、定義名を使用する方法
http://support.microsoft.com/default.aspx?scid=k …
Excel で名前付け範囲を使用して動的なグラフを作成する
http://office.microsoft.com/ja-jp/assistance/HA0 …
”グラフを細かくしたい”という目的はなんでしょうか。
試しに項目数を増やすマクロを組んでみました。
値を直接グラフにセット(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
xls88さん、返事が遅くなって申し訳ありません。
わざわざマクロを組んでいただいて本当にありがとうございます。
グラフを細かくする目的は、部分部分で細かいグラフを見て、その部分のデータを抽出したかったからです。
グラフを消してマクロを実行していたため、上手くいかず焦っていました。
現在は、データが2倍に増えていますが、データを10倍にする場合、数値が「2」になっている場所を10に変えれば大丈夫ですよね?
No.3
- 回答日時:
#1でマトを射たことをおっしゃっておられる。
エクセルはシートに(何の方法でも良い)データを作らないとグラフに反映されません。式のようなことを、別途与えて、受けてくれる機能はありません。データ上に実現しないと。このエクセルでの、基本のことを質問者はまだ気づいてないのでは。まずデータありきです。
わかっておれば、質問の仕方が、御礼の仕方が変わるはずです。
>マクロでどうにかしたほうがいいですかね
上記のことがわかれば、後はマクロでも関数でも、手入力でもかまわない。お好きなようにどうぞ。
ーー
>直線の補完で充分なのですが
グラフの種類によっては(折れ線グラフ)足して1/2する補間では
余り様子が変わらない。
グラフの種類は何を考えているのですか。それぐらい質問に書クべきです。
補間を別の方法でやるならともかく、こんなの、やっても意味無いのでは。
No.2
- 回答日時:
データーを補完したいという事でしたら
行を1行おきに追加して
A2 =(A1+A3)/2
等とすれば、中間の値が補完されます
グラフを滑らかにしたいという事なら
グラフ作成時に「散布図」とし
プロットした点の一つを右クリックすると「近似曲線の追加」というのが有ります
それで、「多項式近似」で3次位にするとなめらかな曲線になります
No.1
- 回答日時:
Excelのグラフは「前提となる表」をグラフ化することしか出来ません。
ですので、そういう「補完データを表現すること」は元になる表の方で
行うことが前提になります。
で、問題はその補完方法ですが、直線で補完するのか、対数や高次の
曲線で補完するのかによって値は当然変わってきますよね。まずは
その辺をハッキリさせる必要があります。補完する式が決まればあとは
表にその式を適用すれば、中間の値はいくらでも出てきますし。
まあ、適当に繋いだ程度でいいのなら、単に折れ線グラフにすれば済む
話だと思うんですが・・・そこらへんどうなんですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel ピボットテーブル フィ...
-
Sma4
-
図のような散布図の作り方を教...
-
エクセル 日ごとにデータを追...
-
エクセル(EXCEL)で、データを3...
-
パワポに張り込まれたグラフか...
-
ExcelでNA()を使わずにプロット...
-
excel 方形波
-
エクセルでこのようなヒステリ...
-
Excelで数直線の作り方
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
-
C+vのvは英語で何の頭文字...
-
エクセルでグラフタイトルが折...
-
塗りつぶしの色をコピーするには
-
テキストボックス内の文字のふ...
-
【Excel】貼り付けた画像がいつ...
-
エクセルにおける、グラフの指...
-
エクセルのグラフの一部拡大
-
エクセル カタカナの文字を検...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel ピボットテーブル フィ...
-
エクセルでこのようなヒステリ...
-
ExcelでNA()を使わずにプロット...
-
EXEL 要素数の異なる複数データ...
-
エクセル(EXCEL)で、データを3...
-
Excelで扱えるデータ数を超える...
-
Excelでバイナリデータを読み込...
-
エクセルの棒グラフ、データの...
-
excel 方形波
-
officeのexcelとスプレッドシー...
-
Sma4
-
図のような散布図の作り方を教...
-
Excelグラフの範囲を可変にする...
-
VBAを用いた範囲自動選択による...
-
Excelで数直線の作り方
-
Excelのグラフで凡例の表示順番...
-
エクセル 日ごとにデータを追...
-
エクセル2010でグラフのリンク...
-
excelのグラフで,ある範囲の色...
-
エクセルで散布図を作りたいの...
おすすめ情報