4.VB2013から Excel にデータを送りグラフを表示する(09_Xls_04) (旧、SampleNo.064) |
1.VB2013から Excel にデータを送りグラフを表示する 2. 3. 4. 5. 6. ※ 起動及び終了処理及び使用関数等の記載が漏れていたらExcel 操作ワンポイントテクニック集その1(09_Xls_02)の方をご覧下さい。 |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 / Excel 2013 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :Microsoft.Office.Interop 参照設定:Microsoft Excel 15.0 Object Library / WaitTime.dll 参照設定方法参照 使用コン:Button1 トロール: このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.VB2013から Excel にデータを送りグラフを表示する |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '============================================================================= '---------------- グラフデータを作成及びセルに値を代入 ---------------- 'Excel のセルに値を代入します。 Dim i, j As Integer Dim xlRange1 As Excel.Range = Nothing '科目用 Dim xlRange2 As Excel.Range = Nothing '氏名用 Dim xlRange3 As Excel.Range = Nothing '点数用 Dim graphData1(4, 0) As String '科目用 Dim graphData2(0, 4) As String '氏名用 Dim graphData3(4, 4) As Integer '点数用 xlRange1 = xlSheet.Range("A2:A6") xlRange2 = xlSheet.Range("B1:F1") xlRange3 = xlSheet.Range("B2:F6") For i = 0 To 4 For j = 0 To 4 '30 〜100 の範囲のランダムなデータを作成 graphData3(j, i) = CInt(70 * Rnd() + 31) Next j Next i '系列名の設定 graphData1(0, 0) = "国語" graphData1(1, 0) = "数学" graphData1(2, 0) = "英語" graphData1(3, 0) = "社会" graphData1(4, 0) = "体育" '項目名の設定 graphData2(0, 0) = "石原" graphData2(0, 1) = "小泉" graphData2(0, 2) = "田中" graphData2(0, 3) = "平沼" graphData2(0, 4) = "森山" 'セルに各データを設定 xlRange1.Value = graphData1 xlRange2.Value = graphData2 xlRange3.Value = graphData3 MRComObject(xlRange1) '使い終わった時点で直ぐにデクリメントをしておく MRComObject(xlRange2) MRComObject(xlRange3) '=============== グラフの表示設定 ======================= Dim xlCharts As Excel.ChartObjects Dim xlChart As Excel.ChartObject Dim xlChart1 As Excel.Chart '表示位置・グラフの大きさを指定して新しい埋め込みグラフを作成 xlCharts = DirectCast(xlSheet.ChartObjects, Excel.ChartObjects) xlChart = xlCharts.Add(10, 90, 550, 300) Dim xlRange As Excel.Range xlRange = xlSheet.Range("A1:F6") 'データの入力セル範囲 xlChart1 = xlChart.Chart With xlChart1 '系列を列に変更 行は xlRows .SetSourceData(xlRange, Excel.XlRowCol.xlColumns) MRComObject(xlRange) 'xlRange の解放 '縦棒グラフを指定 .ChartType = Excel.XlChartType.xlColumnClustered 'グラフのタイトルを表示 .HasTitle = True Dim xlChartTitle As Excel.ChartTitle xlChartTitle = .ChartTitle xlChartTitle.Text = "中間テスト結果" MRComObject(xlChartTitle) 'xlChartTitle の解放 '目盛りの設定 Dim xlAxes As Excel.Axes Dim xlAxis As Excel.Axis xlAxes = DirectCast(xlChart1.Axes, Excel.Axes) xlAxis = xlAxes.Item(Excel.XlAxisType.xlValue) '-------------------------------------------------------------- 'データラベルの表示(すべて表示の場合) .ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowValue) '個別に表示する場合 Dim xlSeries As Excel.Series xlSeries = DirectCast(.SeriesCollection(1), Excel.Series) xlSeries.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowValue) MRComObject(xlSeries) '-------------------------------------------------------------- With xlAxis .MajorUnit = 20 '目盛り間隔 .MaximumScale = 120 '目盛りの最大値 End With MRComObject(xlAxis) MRComObject(xlAxes) '画面の表示状態を確認の間待つ(サンプルの動きがわかりやすくしているだけで必要ありません) WT.WaitTime(2000) '作業中のシートにグラフを表示する場合 Dim xlChart2 As Excel.Chart xlChart2 = .Location(Excel.XlChartLocation.xlLocationAsObject, xlSheet.Name) MRComObject(xlChart2) 'グラフを縮小表示 Dim xlShapes As Excel.Shapes Dim xlShape As Excel.Shape xlShapes = xlSheet.Shapes xlShape = xlShapes.Item(1) '縦横を70%に縮小表示 xlShape.ScaleWidth(0.7, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft) xlShape.ScaleHeight(0.7, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft) MRComObject(xlShape) MRComObject(xlShapes) End With '動作確認の為、2秒間表示しておく WT.WaitTime(2000) '★おまけ上記がうまく表示されたら下記も試してください。 '3D 表示でグラフが回転しなが表示します。 MRComObject(xlChart1) xlChart1 = xlChart.Chart xlChart1.ChartType = Excel.XlChartType.xl3DColumn For i = 0 To 360 Step 10 xlChart1.Rotation = i WT.WaitTime(200) Next i '----------------------------------------------------------------------------------------------- '※ Excelのグラフをクリップボード経由でPictureBoxに貼付 のコードはここへ追加する '----------------------------------------------------------------------------------------------- MRComObject(xlChart1) MRComObject(xlChart) MRComObject(xlCharts) '================== ファイルの保存処理 ================== Dim FilePath As String = Application.StartupPath & "\Test.xls" '保存ファイル名 If CInt(xlApp.Version) >= 12 Then FilePath = Application.StartupPath & "\Test.xlsx" '保存ファイル名 End If '============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(FilePath, True) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし) WT.WaitTime(1000) Call ProcessCheck() End Sub |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |