アプリ版:「スタンプのみでお礼する」機能のリリースについて

ローソク足に別のデータを線画で書き加えるにはどうすればよいのでしょうか。
以下のコード、「’ローソク足」の部分だけだとうまく表示されるのですが、その後の部分「’線画」をコードに書き加えるとローソク足がおかしくなります。(全て高値=終値の陽線になります)。データは
C列 始値
D列 高値
E列 安値
F列 終値
J列 オリジナルのデータ
シート名は「Day」

となっています。
EXCEL2000を使用しています。
よろしくお願いいたします。



Sub Macro6()
’ローソク足
Range("C5:F15").Select
Charts.Add
ActiveChart.SetSourceData Source:=Sheets("Day").Range_  ("C5:F15"), PlotBy :=xlColumns
ActiveChart.ChartType = xlStockOHLC
ActiveChart.Location Where:=xlLocationAsObject, Name:="Day"
ActiveChart.HasLegend = False

’線画
ActiveChart.PlotArea.Select
ActiveChart.ChartType = xlStockOHLC
ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection(5).Select
With Selection.Border
.ColorIndex = 43
.Weight = xlThin
.LineStyle = xlContinuous
End With

ActiveChart.SeriesCollection(5).Values = "=Day!R5C10:R15C10"
End Sub

A 回答 (6件)

こんばんは。



Wendy02です。

手間取って、遅くなりました。#3は、とんちんかんな内容を書いてしまいましたが、以下で試してみてください。たぶん、良いと思います。マクロの基本的な考え方は合っていたのですが、今ひとつ、考えをめぐらす知恵が足らなかったようでした。

なお、以下には、項目軸ラベルが使用されていません。項目軸に日付を入れることは手動で確認しております。そして、新しい系列を加えたときに、元のデータに準ずるように作られています。また、サイズは、お好きなように直してください。確認のために大きくしてあります。

言い訳ですが、グラフでマクロを作る資料は、とても少ないです。

'--------------------------------------------------------------
Sub GraphMakingR()
'株式用グラフ 修正版
Dim mySht As Worksheet
Dim ChartN As ChartObject
Dim rngData As Range
Dim strNdata As String
'ユーザー設定
Set mySht = Worksheets("Day")
Set rngData = mySht.Range("C5:F15")
strNdata = mySht.Name & "!" & Range("J5:J15").Address(1, 1, xlR1C1)

 'ローソク足
 Set ChartN = mySht.ChartObjects.Add(100, 100, 400, 300)
 ChartN.Chart.SetSourceData rngData, PlotBy:=xlColumns
 ChartN.Chart.ChartType = xlStockOHLC
 
 '線画
 With ChartN.Chart.SeriesCollection.NewSeries
   .Values = "=" & strNdata
   .ChartType = xlXYScatterLines
   With .Border
    .ColorIndex = 4
    .Weight = xlThin
    .LineStyle = xlContinuous
  End With
    '.MarkerBackgroundColorIndex = xlNone
    '.MarkerForegroundColorIndex = xlAutomatic
    .MarkerStyle = xlNone
    .Smooth = False
    '.MarkerSize = 5
    .Shadow = False
    .AxisGroup = 1 '主軸設定*
 End With
 
End Sub

'--------------------------------------------------------------
    • good
    • 0

Wendy02です。



それは良かったです。ホっとしています。
私自身が途中でダメかと思いました。

良い勉強をさせていただきました。こんな経験は、1年に1度もあるかどうかです。こちらこそ、ありがとうございました。

なお、

AxisGroup = 1 '主軸設定*

通常は、それがなくてもいけるはずですが、項目軸ラベルに日付データを入れると、折れ線グラフが別の項目軸ラベルを使ってしまうので、この部分が、実は、ミソになるかもしれません。こちらは、XL2003ですが、項目軸に日付データを入れる場合、項目名の先頭を入れないとうまく出来ません。確かなことではありませんが、他のデータには、そのようなことがありません。
    • good
    • 0
この回答へのお礼

横軸のデータ(年・日付)はA列にありますので、以下のようなコードを加えてX軸に日付を表示してみました。

ChartN.Chart.SeriesCollection(1).XValues = "=Day!R100C1:R110C1"
(A列の100行目~110行目の日付をチャートのX軸に設定する)

おかげさまで無事チャート作成マクロが完成しましたので
これで質問を締め切らせていただきます。
大変お世話になりました。

お礼日時:2006/08/21 22:38

補足


色の設定は直してください。
 .ColorIndex = 4
   ↓
 .ColorIndex = 43
 

この回答への補足

作成していただいたチャート描画マクロは理想的なものです。xlXYScatterLines(折れ線つき散布図)を使うんですね。気づきませんでした。
とりあえず、下記のようにラインを2本にして試してみたところ何の問題もありませんでした。線は6本ぐらい引く予定なので、For-Nextや配列変数を使って少し改良してみようかと思っています。
こういうプログラミングの応用・工夫は本当に難しいですね。もっと勉強します。

今回私はGooに質問投稿する前、Excelのチャートではこの作業は無理なのではないかと半ばあきらめ気味になっていたのですが、Wendy02様のおかげでベストなものを完成させることができました。
この度は、多くの時間と労力を割いていただき、本当にありがとうございました。
心よりお礼申し上げます。

Sub GraphMakingR2()
'株式用グラフ 修正版
Dim mySht As Worksheet
Dim ChartN As ChartObject
Dim rngData As Range
Dim strNdata As String
'ユーザー設定
Set mySht = Worksheets("Day")
Set rngData = mySht.Range("C1115:F1150")
strNdata = mySht.Name & "!" & Range("J1115:J1150").Address(1, 1, xlR1C1)
strNdata2 = mySht.Name & "!" & Range("M1115:M1150").Address(1, 1, xlR1C1)

'ローソク足
Set ChartN = mySht.ChartObjects.Add(100, 100, 400, 300)
ChartN.Chart.SetSourceData rngData, PlotBy:=xlColumns
ChartN.Chart.ChartType = xlStockOHLC

'線画
With ChartN.Chart.SeriesCollection.NewSeries
.Values = "=" & strNdata
.ChartType = xlXYScatterLines
With .Border
.ColorIndex = 4
.Weight = xlThin
.LineStyle = xlContinuous
End With
'.MarkerBackgroundColorIndex = xlNone
'.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlNone
.Smooth = False
'.MarkerSize = 5
.Shadow = False
.AxisGroup = 1 '主軸設定*
End With

With ChartN.Chart.SeriesCollection.NewSeries
.Values = "=" & strNdata2
.ChartType = xlXYScatterLines
With .Border
.ColorIndex = 5
.Weight = xlThin
.LineStyle = xlContinuous
End With
'.MarkerBackgroundColorIndex = xlNone
'.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlNone
.Smooth = False
'.MarkerSize = 5
.Shadow = False
.AxisGroup = 1 '主軸設定*
End With

End Sub

補足日時:2006/08/20 11:52
    • good
    • 0

Wendy02です。



中途状況ですが、

現在のローソク足の株価グラフでは、第5系列(数日の平均値?)を加えることは不可能なのですね。それだけでなく、それにグラフを付け加えること自体が困難なようです。

もともと、この組み込みグラフ自体は海外から来たものなので、そういう習慣がないようです。
しかし、海外には、グラフの扱いに長けた人間もいるようなので、もう少し調べてみます。

他の方のサンプルをいろいろみましたが、やはり、ろうそく足の株価(ろうそくの厚みがある)グラフでは、作られていませんでした。今の方法からの延長上には、もしかしたら、成功しない可能性が強いということだけは、記しておきます。

今日は、ここまでです。
    • good
    • 0

こんばんは。



うっかり確認を忘れていました。株式のグラフなどやったこともありませんので。
後で、見比べていたら、グラフが変わってしまっていました。

>これを解決する方法が見つかれば良いのですが・・・。

たぶん、マクロは途中から、ぜんぜん違っているような気がします。
特殊な方法を使うように思います。

> ChartTypeをxlStockOHLC
の中で、処理してはダメなのですね。(始値、高値、安値、終値)は、替えがたいのに、そこに入れ替わりになってしまったようになっています。

ちょっと、テクニックが必要のようです。あまりやったことがないので、思い出すのに時間が掛かります。ひとつのグラフに、別の折れ線グラフを取り入れるテクニックだと思います。確か、その方法は一度はやったことがあります。

確認ですが、もともと、これは、手作業でも出来ていないのでしょうね。

しばらく時間をくださいませんか?考えてみます。

.Address(1, 1, xlR1C1)

は、R1C1 の絶対座標番地に換える方法です。

この回答への補足

了解しました。
お手数おかけしましてすみません。

補足日時:2006/08/17 10:28
    • good
    • 0

こんばんは。



一応、前の解答に準じましたが、グラフの高さは、大きくしました。
なお、線画の色が薄いような気がします。

Sub GraphMaking()
'株式用グラフ
Dim mySht As Worksheet
Dim ChartN As ChartObject
Dim rngData As Range
Dim strNdata As String
'シート
Set mySht = Worksheets("Day")
'元データ
Set rngData = mySht.Range("C5:F15")
'線画用補足データ
strNdata = mySht.Name & "!" & Range("J5:J15").Address(1, 1, xlR1C1)
 'ローソク足
 Set ChartN = mySht.ChartObjects.Add(200, 200, 200, 300)
 ChartN.Chart.SetSourceData rngData,PlotBy:=xlColumns
 ChartN.Chart.ChartType = xlStockOHLC
 '線画
 With ChartN.Chart.SeriesCollection.NewSeries
  With .Border
   .ColorIndex = 43 '黄緑
   .Weight = xlThin
   .LineStyle = xlContinuous
  End With
   .Values = "=" & strNdata
 End With
 
End Sub

この回答への補足

ありがとうございます。
ですが実行してみたところ、従前と同じ結果になってしまいました。
あれからまた少し調べてみたのですが、おそらくChartTypeをxlStockOHLCに設定した際に実行されていると思われる、降下線を描くHasDropLineプロパティと陰線陽線を表示するHasUpDownBarsプロパティは、全てのチャート要素のうち最も高いものと最も低いものに無条件に反応してしまっているようです(それとも"最後尾の"J5:J15データか?)。従って、上記コードのうち、J5:J15のデータ部分を始値・終値とするチャートに書き換えられてしまいます。これを解決する方法が見つかれば良いのですが・・・。
これについてはもう少し調べてみることにいたします。

教えていただいたコードのうち、12~13行目の
.Address(1, 1, xlR1C1)の部分がどのような役目を果たしているのかよく分かりませんでした。
もしお暇がございましたら、この場で教えていただけたら幸いに存じます。

補足日時:2006/08/17 00:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!