- ベストアンサー
VB2010のChartで何本もの線を書く方法
noname#212058の回答
- ベストアンサー
おそらく、あなたの目的が『罫線』とか『図形』を描きたい(UMLとかフローチャートみたいのが描きたい) のだと思うのですが、この用途では Cahrt を使うこと自体が間違っていると思います。Chart はあくまで『グラフを作成するコントロール』なので、『線の本数が数百本』 という使い方を想定していません。(数百本の折れ線グラフってあんまり見ないですよね) このような用途は、System.Drawing を使って自前で描画するのことになると思います。以下なんかを参考にして工夫してみてください。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32596&forum=7 ※.NET Windows Form の Drow は元々とっても遅いので、WPF も検討することをお勧めします。
関連する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
- ベストアンサー
- オフィス系ソフト
- マクロでエクセルに表示される座標を基準に矢印を引く
ガントチャートをエクセルで作成しているのですが、 それぞれのタスクの関係性がわかるよう、 関係元タスクの終点と、関係先タスクの始点を矢印で結びたいと思っています。 タスクリンクの始点終点に入力された数字を参照して、同じ数字の組み合わせを見つけ出し、 右側に関数で表示されている座標数値を参照させて矢印を引きたいと考えています。 ※座標数値はタスクの終了日を変更などで変動し、 またガントチャート側の表示基準日を変更することで参照するべきセルが消失し、座標表示が空欄になることもあります。 例)タスクリンク3番の場合、 cell(10,31)からcell(12,38)へ cell(11,38)からcell(12,38)へ 2つの矢印が引かれることを想定しています。 以下のように座標を数字指定して矢印を挿入するマクロまでは作れたのですが、 共通するタスクリンク番号を抽出し、それぞれの座標数のあてはめ、矢印の作成を最大タスクリンク番号まで引くようなマクロにしたいです。 よろしくお願いいたします。 Sub タスクリンク() Dim endX As Single, endY As Single, startX As Single, startY As Single With Cells(10, 31) endX = .Left + .Width / 2 endY = .Top + .Height / 2 End With With Cells(12, 38) startX = .Left + .Width / 2 startY = .Top + .Height / 2 End With With ActiveSheet.Shapes.AddConnector(msoConnectorElbow, endX, endY, startX, startY).Line .EndArrowheadStyle = msoArrowheadTriangle .ForeColor.RGB = RGB(255, 0, 0) .DashStyle = msoLineRoundDot .Weight = 3 End With End Sub
- ベストアンサー
- Visual Basic
- VB2008でコンボボックスのクリアについて
VB2008でコンボボックスのクリアについて お世話になります。 コンボの設定を With ComboBox1 .Items.Clear() .Items.Add("a") .Items.Add("b") .SelectedIndex = 0 End With のようにしていた場合 ComboBox1.Items.Clear()を実行しても "a"の値がコンボに残るみたいなのですが、 指定の方法が悪いのでしょうか? .SelectedIndex = 0を指定しないと クリアされるみたいなのですが。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- Excel VBAでグラフを作成したい
今、下記の ように参考書のコードを書き写し実行しましたが、実行時エラーが出ます。 Sub グラフ作成() With Worksheets("sheet1").ChartObjects .Add(230, 10, 250, 180).Chart .SetSourceData Range("A3").CurrentRegion .ChartType = xlColumnClustered End With End Sub 実行時エラー '438' オブジェクトはこのプロパティまたはメソットをサポートしていません。 と出ます、何が間違いなのかわかりません、私の間違っているところを教えた頂けませんか。お願いします。
- ベストアンサー
- その他(趣味・娯楽・エンターテイメント)
- エクセルVBAで自動チャート作成。 エラーになります
シート1に複数のデータが縦に入っています(A3:A90、B3:B90,C3:C90 といった具合です)データの数は30個です。 それぞれのデータを個々のチャートにして別のシート(シート名: Chart1)に並べて表示させたいです。 それで以下の様なコードを書きました。 このコードはうまく動くのですが、同じようにシート2のデータをChart2のシートにチャートを出そうと思って、4行目の・・・Source:=Sheet1.Range(Cells(3, j)・・・のところをSource:=Sheet2.Range(Cells(3, j)にして実行するとエラーになります。 何故だか分からなくて困っています。 対処方法を教えてください。 エラーは Run-time error ‘1004’: Application-defined or Object-defined error です。 お願いします。 For j = 1 To 30 Set ch = ActiveSheet.ChartObjects.Add(10, 5 + j * 105, 500, 100) ch.Chart.ChartType = xlColumnClustered ch.Chart.SetSourceData Source:=Sheet2.Range(Cells(3, j), Cells(90, j)), PlotBy:=xlColumns ch.Chart.Location where:=xlLocationAsObject, Name:="Chart1" With ch.Chart .HasTitle = True .ChartTitle.Characters.Text = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With Next j
- ベストアンサー
- オフィス系ソフト
- VBA グラフを複数作成する場合
マクロにてグラフを複数作成しようと考えています しかし、ループを使用してグラフを作成すると 1つ以上の場合エラーになってしまい作成できません どのように作成したらよいのでしょうか? 2つ目以降のグラフObjectの名前が重なるからエラーになるとか、そういう部分での問題でしょうか? ------------------------------------- Sub Graph For i = 1 To 2 'source_cnt Call Make_Graph(引数) Next End Sub ------------------------------------- Sub Make_Graph(引数) With ActiveSheet.ChartObjects.Add( _ Left:=Range(***).Left, _ Top:=Range(***).Top, _ Width:=Range(***).Width, _ Height:=Range(***).Height) .Chart.ChartType = xlRadar .Chart.SetSourceData Source:= Range(***), PlotBy:=xlColumns .Chart.Location Where:=xlLocationAsObject, Name:=WorkSheet.Name .Chart.HasLegend = False End With -------------------------------------
- ベストアンサー
- Visual Basic
- MSChartでX軸のデータを0から描きたい
C#でMSChartで表を作成しています。 開発環境はワケあってVisualStudio2005。 チャートの種類は「Spline」です。 VS2005なのでツールボックスにMSChartはなく、プロパティウインドウも無いので直接C#で書いています。 やりたいのは、たとえば0~100のデータを描く際、 chartArea1.AxisX.Interval = 10; chartArea1.AxisX.Maximum = 100; chartArea1.AxisX.Minimum = 0; Series mode1 = new Series(); mode1.ChartType =(SeriesChartType)4; for (i=0; i=<100; i++) { mode1.Points.Add(data1[i]); } chart1.Series.Add(mode1); とすればX軸のラベルは"0","10",・・・"100"で、実際にはX=1の位置から100まで線が描かれますが、for文のとおり、実はデータは0~100の101個あり、X=0の位置(Y軸にくっついた位置)から100まで線を引きたいのです。 chartArea1.AxisX.Maximum = 101; chartArea1.AxisX.Minimum = 1; とすればY軸にくっついた状態で線が描かれますが、X軸のラベルも"1","11",・・・となってしまい、ラベルを"0"からにする方法も探しかたが悪いのか、わかりませんでした。 「Spline」で線をX=0の位置から描く方法、または「chartArea1.AxisX.Minimum = 1;」でX軸のラベルを"0"からにする方法、どちらでもいいのでご教示いただきたく質問いたしました。 (そもそも無理なのでしょうか?) ちなみに、X軸方向の最大は可変で、それに対して10分割にしてIntervalを決めているので、実際にはX軸のラベルは"10","20"・・・のような値ではなく"13","26"・・・となることもあります。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C# 棒グラフの描画について
2010 express初心者です。 下記のようにCSVからチャートにしたところ、 private void button1_Click(object sender, EventArgs e) { var lines = File.ReadAllLines("test.csv"); var labels = lines[2].Split(','); //これをX軸として使用する var totalVals = lines[3].Split(','); ChartArea area = new ChartArea(); //最初から設定されているシリーズを削除する chart1.Series.Clear(); //支出総額のシリーズ var totalSrs = new Series("総出費"); totalSrs.ChartType = SeriesChartType.Column; //棒グラフ //支出総額のデータ for (int i = 0; i < labels.Length; i++) { var data = new DataPoint(); data.SetValueY(totalVals[i]); // totalSrs.AxisLabel = "総出費"; totalSrs.Points.Add(data); } chart1.Series.Add(totalSrs); //グラフにシリーズを追加 } 画像のようになり困っています。 CSVは 日時,その月の金額,同,,,,,,,,,,,, としています。 表示の改善方法がありましたらご教授ください。
- 締切済み
- C・C++・C#
- Excel VBA With ~ End With
Excel VBA With ~ End Withを使わずに記述するには Sheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力して、 Sub test1() With ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart .ChartType = xlBarStacked100 .SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End With End Sub を実行すると横棒グラフが1個表示されますが、 これを、With ~ End Withを使わずに記述すると Sub test2() ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.ChartType = xlBarStacked100 ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End Sub というようになると思いますが、 実行すると縦棒が2個表示されてしまって同じ結果になりません。 なぜなのでしょうか。 test1を、With ~ End Withを使わずに記述するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。(Windows10,Excel2016)
- ベストアンサー
- その他(プログラミング・開発)
- Excelのピボットグラフの線描画でエラー
初めて質問させていただきます。 現在Excel2010でピボットグラフを描画しています。 (ただし、利用ユーザーがExcel2010ではないため、保存形式をExcel97-2003形式で保存) 描画したグラフに対し、VBAで次のように編集を行っています。 Dim objSrs As Series With ActiveChart For Each objSrs In .SeriesCollection 'データ要素をループ For i = 1 To objSrs.Points.Count With objSrs.Points(i) .MarkerStyle = xlMarkerStyleDiamond '※実際はSelect Caseの条件で設定 .MarkerForegroundColorIndex = 29 '※実際はSelect Caseの条件で設定 'マーカーの色を変更 .MarkerBackgroundColorIndex = .MarkerForegroundColorIndex 'マーカーの線幅を設定 .Format.Line.Weight = 1.5 End With Next i Next objSrs End With 作成した自分の端末(Excel2010)では問題ないのですが、Excel2007が入った端末では、 .Format.Line.Weight = 1.5 の所で次のようなエラーになってしまいます。 実行時エラー '-2147417848(80010108)' 'Weight' メソッドは失敗しました:'LineFormat'オブジクト ウォッチで中を確認してみると、objSrs.Formatには値があるのですが objSrs.Format.Lineには、<アプリケーション定義またはオブジェクト定義のエラーです。> となっています。 線の幅だけではなく、 .Format.Line.ForeColor.RGB = RGB(253, 153, 153) でもエラーになります。 .Format.Lineはバージョンで、記述方法に違いがあるのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございました。 わたしは、ExcelVBA初心者ですが、元々ExcelVBAで作ったものをVBでと思い、作っています。 VB自体は初めてなのでまだまだ知らない事が多すぎるようです。 現在の作り方では9割程度完成しており、実際には線が数百本となることはまず無い(多くても2百本 くらいかな?)のでこのまま進めてみようと思います。 完成後、shitabaさんに教えて頂いた、System.DrawingやWPF(正直言いますと何のことだかよく 分かっていませんが)を勉強して、出来れば改良したいと思います。 この先もっと複雑なものも作ってみたいと思っています(自分の技量では恐らく出来ないレベルのもの ですが...)ので、それにはもっと色々と勉強する必要があります。