質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

2回答

3397閲覧

visual basic 2015  DataGridViewから出た数値又は任意の数値をChart(グラフ)に代入、グラフを表示させたい

techno

総合スコア22

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

1グッド

1クリップ

投稿2017/10/13 06:03

編集2017/10/16 01:35

###前提・実現したいこと
buttonを押すとDataGridViewの数値をChart(グラフ)に代入、グラフを表示させたいです
下記の写真参照

ここのサイトを参照させていただきました
http://blog.hiros-dot.net/?p=2123

最初からデータが分かっていれば上記のようなサイトのプログラムのままでいいとは思うのですが任意のとなると変数に置き換えたりちゃんとした記述でないと上手く反映されないです

やりたいことは
ボタンを押したらDataGridViewの数値をグラフに表示させたい

DataGridViewの値はその時々で変化するのでボタンを押してグラフに表示させる時に可変できるようにしたいです

イメージ説明

###手本にさせて頂いているサイト様のプログラム

Public Class Form1 ' フォームロード時の処理 Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load '初期化 Chart1.Series.Clear() 'データの取得 Dim ds As DataSet = GetData() 'Chartコントロールにデータソースを設定 Chart1.DataSource = ds 'Chartコントロールにタイトルを設定 Chart1.Titles.Add("アクセス数とユニークユーザー数") 'グラフの種類,系列,軸の設定 For I As Integer = 1 To ds.Tables(0).Columns.Count - 1 '列名の取得 Dim columnName As String = ds.Tables(0).Columns(I).ColumnName '系列の設定 Chart1.Series.Add(columnName) 'グラフの種類 Chart1.Series(columnName).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column 'X軸 Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False 'Y軸 Chart1.Series(columnName).YValueMembers = columnName Next 'X軸タイトル Chart1.ChartAreas(0).AxisX.Title = "月" Chart1.DataBind() End Sub ' データの設定 Private Function GetData() As DataSet Dim ds As New DataSet Dim dt As New DataTable Dim dtRow As DataRow '列の作成 dt.Columns.Add("月", Type.GetType("System.String")) dt.Columns.Add("アクセス数", Type.GetType("System.Int32")) dt.Columns.Add("ユニークユーザー数", Type.GetType("System.Int32")) ds.Tables.Add(dt) ★★★'データの追加★★★ dtRow = ds.Tables(0).NewRow dtRow(0) = "2011/01" dtRow(1) = "945" dtRow(2) = "4203" ds.Tables(0).Rows.Add(dtRow) dtRow = ds.Tables(0).NewRow dtRow(0) = "2011/02" dtRow(1) = "1023" dtRow(2) = "3302" ds.Tables(0).Rows.Add(dtRow) dtRow = ds.Tables(0).NewRow dtRow(0) = "2011/03" dtRow(1) = "2121" dtRow(2) = "7065" ds.Tables(0).Rows.Add(dtRow) dtRow = ds.Tables(0).NewRow dtRow(0) = "2011/04" dtRow(1) = "2179" dtRow(2) = "7753" ds.Tables(0).Rows.Add(dtRow) dtRow = ds.Tables(0).NewRow dtRow(0) = "2011/05" dtRow(1) = "2063" dtRow(2) = "6373" ds.Tables(0).Rows.Add(dtRow) dtRow = ds.Tables(0).NewRow dtRow(0) = "2011/06" dtRow(1) = "2107" dtRow(2) = "4210" ds.Tables(0).Rows.Add(dtRow) Return (ds) End Function End Class

###上記のプログラムの結果
イメージ説明

###試したこと
上記の星印
★★★'データの追加★★★の
dtRow(0) = "2011/01"    
dtRow(1) = "945"
dtRow(2) = "4203"

上記の数値や表記を変えると棒グラフの長さや表示が変わるのが分かるのですが
任意の場所から引っ張ってくる時にそれを変数に置き換えたりして代入したのですが必要な記述が足りないのか記述の仕方が間違っているのかエラーになならないですが反映されないです

他のSUBルーチンから数値情報をもってくるので「Private」ではなく 「Public」にしてみたのですがいかんせんまだまだ初心者の域を脱していないのでどこをどうすればいいかの検討すらわからずこのサイトに質問した次第です

最近少しづつですが変数というものを理解しIF文やDoループなどが読めば少しは分かるようになっては来ましたがまだまだです
どなたかご教授願えたらと思います
よろしくお願い致します

###試したこと2
自分なりに試したこと
(*例なのでデータは三種類ありますがこのプログラムは一種類しか記述してません)

①変数に代入置き換え

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

dtRow(0) = DataGridView(0.0).value
dtRow(1) = DataGridView(1.0).value

End Sub

又は

dim AAA as staring = DataGridView(0.0).value  '名前
dim BBB as integer = DataGridView(1.0).value  '回数

②変数に置き換えワンクッション置く
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

dtRow(0) = AAA
dtRow(1) = BBB

End Sub

置き換えたり間接的に置き換えたりしたのですができませんでした

###補足情報(言語/FW/ツール等のバージョンなど)
visual basic 2015
VB.net

sheephuman👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

下記でどうでしょうか?

Form_Load時のイベントとButton1_Click時のイベントの処理の順番を入れ替える必要があります。
Form_Loadは起動時に、Button1_Clickはボタンを押したタイミングで実行されます。

VB

1Public Class Form1 2 3 ' フォームロード時の処理 4 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 5 6 'グリッドの定義 7 DataGridView1.ColumnCount = 2 8 DataGridView1.Columns(0).HeaderText = "名前" 9 DataGridView1.Columns(0).Name = "名前" 10 DataGridView1.Columns(1).HeaderText = "個数" 11 DataGridView1.Columns(1).Name = "個数" 12 13 Chart1.Series.Clear() 14 15 End Sub 16 17 ' データの設定 18 Private Function GetData() As DataSet 19 20 Dim ds As New DataSet 21 Dim dt As New DataTable 22 Dim dtRow As DataRow 23 24 '列の作成 25 dt.Columns.Add("月", Type.GetType("System.String")) 26 dt.Columns.Add("アクセス数", Type.GetType("System.Int32")) 27 dt.Columns.Add("ユニークユーザー数", Type.GetType("System.Int32")) 28 ds.Tables.Add(dt) 29 30 31 '★★★データの追加★★★ 32 For i = 0 To DataGridView1.Rows.Count - 2 33 dtRow = ds.Tables(0).NewRow 34 dtRow(0) = DataGridView1(0, i).Value 35 dtRow(1) = DataGridView1(1, i).Value 36 ds.Tables(0).Rows.Add(dtRow) 37 Next 38 39 Return (ds) 40 41 End Function 42 43 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 44 45 'データの取得 46 Dim ds As DataSet = GetData() 47 48 'Chartコントロールにデータソースを設定 49 Chart1.DataSource = ds 50 51 '初期化 52 Chart1.Series.Clear() 53 54 'Chartコントロールにタイトルを設定 55 Chart1.Titles.Clear() 56 Chart1.Titles.Add("アクセス数とユニークユーザー数") 57 58 'グラフの種類,系列,軸の設定 59 For I As Integer = 1 To ds.Tables(0).Columns.Count - 1 60 '列名の取得 61 Dim columnName As String = ds.Tables(0).Columns(I).ColumnName 62 63 '系列の設定 64 Chart1.Series.Add(columnName) 65 66 'グラフの種類 67 Chart1.Series(columnName).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column 68 69 70 'X軸 71 Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString 72 Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False 73 Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False 74 75 'Y軸 76 Chart1.Series(columnName).YValueMembers = columnName 77 Next 78 79 'X軸タイトル 80 Chart1.ChartAreas(0).AxisX.Title = "月" 81 82 'Datasetにバインド 83 Chart1.DataBind() 84 85 End Sub 86 87 Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing 88 '表示されているコントロールがDataGridViewTextBoxEditingControlか調べる 89 If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then 90 Dim dgv As DataGridView = CType(sender, DataGridView) 91 92 '編集のために表示されているコントロールを取得 93 Dim tb As DataGridViewTextBoxEditingControl = 94 CType(e.Control, DataGridViewTextBoxEditingControl) 95 96 'イベントハンドラを削除 97 RemoveHandler tb.KeyPress, AddressOf DataGridView1_KeyPress 98 99 '該当する列か調べる 100 If dgv.CurrentCell.OwningColumn.Name = "個数" Then 101 'KeyPressイベントハンドラを追加 102 AddHandler tb.KeyPress, AddressOf DataGridView1_KeyPress 103 End If 104 End If 105 End Sub 106 107 Private Sub DataGridView1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles DataGridView1.KeyPress 108 '数字しか入力できないようにする 109 If e.KeyChar < "0"c Or e.KeyChar > "9"c Then 110 e.Handled = True 111 End If 112 End Sub 113End Class

投稿2017/10/13 06:59

編集2017/10/13 23:55
soma62jp

総合スコア141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

techno

2017/10/13 23:10

回答して頂いてありがとうございます 記載し忘れてしまったのですが DataGridViewの値はその時々で変化するのでグラフに表示させる時に可変できるようにしておかないといけないのです ただ単に何かのタイミングで可変する数値をボタンでその都度変更するみたいな感じです
techno

2017/10/24 00:44

soma62jpさん 私的にごたごたしてしまい お返事遅れてしまいました大変申し訳ありません 教えて頂いたプログラムなのですが 思ったような挙動が実装が出来ませんでした (途中までは上手く表示されているのですが…) 私的な事が一段落次第もう少し自分なりに考えてみます 親身に考えて頂きありがとうございます
guest

0

既出のmacchi123jp氏の解答を用いて以下の記事を書かせていただきました。拙いですがご査収ください。
https://sheephuman.hatenablog.com/entry/DataGridViewToChart

やっている事は、提示されたコードにランダムに数値生成をしてGridに追加するcodeを加えて表示してるだけです。
C#版はもう少し手を加えています。

投稿2022/08/13 15:14

sheephuman

総合スコア112

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問