ローソク足チャートに線画を書き加える方法

このQ&Aのポイント
  • ローソク足チャートに別のデータを線画で書き加える方法について教えてください。
  • Excel2000を使用して、ローソク足チャートに線画を追加する方法を知りたいです。
  • データが安定せず、追加した線画が正しく表示されない問題が発生しています。
回答を見る
  • ベストアンサー

ローソク足チャートに線画を書き加えるにはどうすれば?

ローソク足に別のデータを線画で書き加えるにはどうすればよいのでしょうか。 以下のコード、「’ローソク足」の部分だけだとうまく表示されるのですが、その後の部分「’線画」をコードに書き加えるとローソク足がおかしくなります。(全て高値=終値の陽線になります)。データは 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

noname#128465
noname#128465

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 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 '--------------------------------------------------------------

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

Wendy02です。 それは良かったです。ホっとしています。 私自身が途中でダメかと思いました。 良い勉強をさせていただきました。こんな経験は、1年に1度もあるかどうかです。こちらこそ、ありがとうございました。 なお、 AxisGroup = 1 '主軸設定* 通常は、それがなくてもいけるはずですが、項目軸ラベルに日付データを入れると、折れ線グラフが別の項目軸ラベルを使ってしまうので、この部分が、実は、ミソになるかもしれません。こちらは、XL2003ですが、項目軸に日付データを入れる場合、項目名の先頭を入れないとうまく出来ません。確かなことではありませんが、他のデータには、そのようなことがありません。

noname#128465
質問者

お礼

横軸のデータ(年・日付)はA列にありますので、以下のようなコードを加えてX軸に日付を表示してみました。 ChartN.Chart.SeriesCollection(1).XValues = "=Day!R100C1:R110C1" (A列の100行目~110行目の日付をチャートのX軸に設定する) おかげさまで無事チャート作成マクロが完成しましたので これで質問を締め切らせていただきます。 大変お世話になりました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

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

noname#128465
質問者

補足

作成していただいたチャート描画マクロは理想的なものです。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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

Wendy02です。 中途状況ですが、 現在のローソク足の株価グラフでは、第5系列(数日の平均値?)を加えることは不可能なのですね。それだけでなく、それにグラフを付け加えること自体が困難なようです。 もともと、この組み込みグラフ自体は海外から来たものなので、そういう習慣がないようです。 しかし、海外には、グラフの扱いに長けた人間もいるようなので、もう少し調べてみます。 他の方のサンプルをいろいろみましたが、やはり、ろうそく足の株価(ろうそくの厚みがある)グラフでは、作られていませんでした。今の方法からの延長上には、もしかしたら、成功しない可能性が強いということだけは、記しておきます。 今日は、ここまでです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 うっかり確認を忘れていました。株式のグラフなどやったこともありませんので。 後で、見比べていたら、グラフが変わってしまっていました。 >これを解決する方法が見つかれば良いのですが・・・。 たぶん、マクロは途中から、ぜんぜん違っているような気がします。 特殊な方法を使うように思います。 > ChartTypeをxlStockOHLC の中で、処理してはダメなのですね。(始値、高値、安値、終値)は、替えがたいのに、そこに入れ替わりになってしまったようになっています。 ちょっと、テクニックが必要のようです。あまりやったことがないので、思い出すのに時間が掛かります。ひとつのグラフに、別の折れ線グラフを取り入れるテクニックだと思います。確か、その方法は一度はやったことがあります。 確認ですが、もともと、これは、手作業でも出来ていないのでしょうね。 しばらく時間をくださいませんか?考えてみます。 .Address(1, 1, xlR1C1) は、R1C1 の絶対座標番地に換える方法です。

noname#128465
質問者

補足

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 一応、前の解答に準じましたが、グラフの高さは、大きくしました。 なお、線画の色が薄いような気がします。 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

noname#128465
質問者

補足

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

関連するQ&A

  • ローソク足チャートを表示したいのですが

    ローソク足チャートを表示したいのですが、下記(A)のように記述するとエラーが出てしまいます。 (.ChartType=xlStockOHLCの部分がエラーになります) 他の線グラフを表示する際に(B)のように記述しており、こちらではエラーは出ないのですが・・・ (A)はどこがおかしいのでしょうか。データは、C列始値、D列高値、E列安値、F列終値となっています。 よろしくお願いします。(EXCEL2000使用) (A)ローソク足(エラーが出る) With Activesheet.Chartobjects.Add (200,200,200,100).Chart   .ChartType=xlStockOHLC   .Setsourcedata Source:=Range("C10:F20"), _ PlotBy:=xlColumns End With (B)線グラフ(適正) With Activesheet.Chartobjects.Add(200,200,200,100).Chart   .ChartType=xlLine   .Setsourcedata Source:=Range("F10:F20") End With

  • ロウソク足 チャート

    ロウソク足チャートを一目見るだけで始値、終値、高値、安値が一目瞭然だと、どこかのサイトに載っていましたが、私の場合高値と安値は分かるのですが始値と終値がどうなっているのかがわかりません。 見方を教えて下さい。 宜しくお願い致します。

  • excelのマクロによるグラフの指定方法

    マクロがどのように記録されるかを見ながら、VBAのスクリプトの書き方を学んでいる初心者です。 Sub Macro1() ' ' Macro1 Macro , ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveWindow.ScrollColumn = 1 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$B$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$B$4:$B$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$C$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$C$4:$C$18" ActiveChart.ChartType = xlLine ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$D$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$D$4:$D$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$E$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$E$4:$E$18" ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(3).Name = "='平均化'!$F$1" ActiveChart.SeriesCollection(3).Values = "='平均化'!$F$4:$F$18" End Sub 以上のマクロを作成し、実行したのですが、”指定した名前のアイテムが見つかりませんでした”と出て、上手く実行されませんでした。 操作対象のオブジェクトを行き来する方法を知りたいのですが、オブジェクトを作成するたびに ActiveSheet.ChartObjects("グラフ 1").Activate のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

  • 初心者です。SeriesCollection(i)はどのように使うのでしょうか

    Sheets("推移グラフ").Select ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(1).XValues = Worksheets(Zsheet2).Range(xrenge1) ActiveChart.SeriesCollection(1).Values = Worksheets(Zsheet2).Range(yrenge1) ActiveChart.SeriesCollection(2).XValues = Worksheets(Zsheet2).Range(xrenge1) ActiveChart.SeriesCollection(2).Values = Worksheets(Zsheet2).Range(yrenge2) ActiveChart.SeriesCollection(3).XValues = Worksheets(Zsheet2).Range(xrenge1) ActiveChart.SeriesCollection(3).Values = Worksheets(Zsheet2).Range(yrenge3) ActiveChart.Deselect に折れ線を1本追加したいのですが、SeriesCollectionの使い方がわかりません。SeriesCollection(i)のiは1~3しか使えないのでしょうか。

  • 株価チャートexcel2007

    EXCEL2007を使っています。 A列 日付 B列 始値 C列 高値 D列 安値 E列 終値 F列 出来高 G列 移動平均線 B列~E列で株価のグラフ(ローソク足) F列で縦棒グラフ G列で折れ線グラフ として重ねて表示したいのですが、どのようにすればいいのでしょうか? よろしくお願いします。

  • Excel VBAの散布図について

    Excel VBAで散布図を作ろうと考えています。 元のデータは添付した画像のものです。 左端にXの値があって、それ以降7列ごとに8枚の散布図を作成しようと考えております。 そこで、kを1~8まで動かし8種類の散布図を作成しようと考えているのですが、このマクロではk=1だけプログラムを回しただけで、一枚のグラフにすべての系列が載ってしまいます。 kを動かさずに、Cellの位置を指定して回した際にはうまくいったのですが、kを動かすようにしたところうまくいきません。 散布図を作る際に系列の数(私の場合7種類)を指定するにはどうしたらよいでしょうか。 どなたかご教授ください。 For k = 1 To 8 ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SeriesCollection(1).Name = Sheets("Voltammogram").Cells(10, -5 + 7 * k) ActiveChart.SeriesCollection(1).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(1).Values = Sheets("Voltammogram").Range(Cells(12, -5 + 7 * k), Cells(250, -5 + 7 * k)) ActiveChart.SeriesCollection(2).Name = Sheets("Voltammogram").Cells(10, -4 + 7 * k) ActiveChart.SeriesCollection(2).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(2).Values = Sheets("Voltammogram").Range(Cells(12, -4 + 7 * k), Cells(250, -4 + 7 * k)) 以降7列まで続きます。

  • Excelマクロでグラフ作成

    現在、Excelのマクロでグラフを作成しようとしていますが、データ範囲の指定で悩んでいます。 マクロはド素人で右も左もわからない状態から、なんとなく雰囲気だけわかってきたような感じです。 とあるHPをそのまま貼り付け用シートにコピペして、そこからデータ抽出用シートにデータを抽出して蓄積していく形にしています。 品名が複数あるので、オートフィルタを使用してソートするために始点をどう決めるのかがわからないのと、データがどんどん蓄積していくために終点もどう決めたらいいのかわかりません。 「データ抽出用シート」のデータ形式は、 18行目にA:品目 B:最低値 C:平均値 D:最高値 G:日付 19行以降にデータ という形になっています。 とりあえず、通常のマクロを記録する方法でマクロの骨組みだけ作ってから細部をいじろうとしております。 データの範囲を指定する部分だけコピペしますので、ここをどういじったらいいのかご教授願います。 とある品目を指定してオートフィルタをかけた後に、グラフ作成手順のマクロを記録したら、こんな感じになりました。 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("データ抽出用シート").Range("L17") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(1).Values = "=データ抽出用シート!R19C2:R366C2" ActiveChart.SeriesCollection(1).Name = "=データ抽出用シート!R18C2" ActiveChart.SeriesCollection(2).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(2).Values = "=データ抽出用シート!R19C3:R366C3" ActiveChart.SeriesCollection(2).Name = "=データ抽出用シート!R18C3" ActiveChart.SeriesCollection(3).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(3).Values = "=データ抽出用シート!R19C4:R366C4" ActiveChart.SeriesCollection(3).Name = "=データ抽出用シート!R18C4" ActiveChart.Location Where:=xlLocationAsObject, Name:="データ抽出用シート" 宜しくお願いします。

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • エクセルで株価の1分足を他の分足に変える事ができますでしょうか?

    エクセルで1分足の株価を10分足に変えたいのですが、できますでしょうか? A列に日付、B列に時刻(9:00・9:01・9:02・・・・)、C列に始値 D列に高値、E列に安値、F列に終値が入っています。 これをH列に日付、I列に時刻(9:00・9:10・9:20・・・・) J列に始値D列に高値、K列に安値、L列に終値が入っています。 (9:00の列には9:00~9:09までの始値・高値・安値・終値が入ります。) 宜しくお願いします。

  • エクセルを使った株価チャート(ローソク)の表示方法

    をおしえてください。エクセル2007には始値、高値、安値、終値のデータがあればローソク表示する機能がありますが、4時間足のデータの場合、時間軸データが2011.3.31 4:00のように日付と時間で表わされて1日に6個のデータがあるにも関わらず、1日の最初のデータしかグラフに反映されません。このため、歯抜けのグラフになります。歯抜けしないようにできませんか。できる方法があればご教授ください。

専門家に質問してみよう