VB.NETからExcel にデータを送りグラフを表示する(3個) (SNo.064) データラベルの表示 3D グラフを回転させながら表示する Excel の定数の調べ方 |
|
使用コントロール | Button1 |
その他条件 | WindowsVista VB2010(VS2010 Pro) Framework 4 / ターゲットCPU:X86 Excel 2007/Excel
2010 [Option Compare Text] [Option Explicit On] [Option Infer On] [Option Strict On]で設定 プロジェクト→参照の追加→COM→Microsoft Excel 12.0(14.0) ObjectLibrary を参照設定しておいてください。 Excel の起動・終了のコードは、.NETからExcelの基本的な操作方法 のExcel の起動・終了に関する設定(実装用)のコードかExcel の起動・終了に関する設定(テスト環境用)のコードを使用して下さい。 |
※ 下記コードの表示は、自作の【Excel Com
オブジェクトの解放漏れチェックツール】の結果を自作のツールでリッチテキストをHTMLファイルに変換した結果を掲載しております。 標準のIDE上のコードのカラー化に加え、Excel Com オブジェクト等もカラー化しております。 |
|
★ VB.NETからExcel にデータを送りグラフを表示する
最近この手の質問が掲示板に何件か投稿があったので、一度試して見ました。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.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) '画面の表示状態を確認の間待つ(サンプルの動きがわかりやすくしているだけで必要ありません) Wait.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, Microsoft.Office.Core.MsoTriState.msoFalse, _ Office.MsoScaleFrom.msoScaleFromTopLeft) xlShape.ScaleHeight(0.7, Microsoft.Office.Core.MsoTriState.msoFalse, _ Office.MsoScaleFrom.msoScaleFromTopLeft) MRComObject(xlShape) MRComObject(xlShapes) End With '★おまけ上記がうまく表示されたらコメントを外して試してください。 '3D 表示でグラフが回転しなが表示します。 'MRComObject(xlChart1) 'xlChart1 = xlChart.Chart 'xlChart1.ChartType = Excel.XlChartType.xl3DColumn 'For i = 0 To 360 Step 10 ' xlChart1.Rotation = i ' Wait.WaitTime(1000) 'Next i '----------------------------------------------------------------------------------------------- '※ Excelのグラフをクリップボード経由でPictureBoxに貼付 のコードはここへ追加する '----------------------------------------------------------------------------------------------- MRComObject(xlChart1) MRComObject(xlChart) MRComObject(xlCharts) '動作確認の為、2秒間表示しておく System.Threading.Thread.Sleep(2000) 'Wait.WaitTime(2000) '================== ファイルの保存処理 ================== Dim FilePath As String = Application.StartupPath & "\SaveTest.xls" '保存ファイル名 'If excelVersion >= 12 Then ' FilePath = Application.StartupPath & "\SaveTest.xlsx" '保存ファイル名 'End If '================================================================================================== 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose((FilePath), True) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャーに残っていないか調査(テスト環境用の場合のみ追加して下さい) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub |
|
★ Excelの定数の調べ方 VB6.0 では、(定数) .SetSourceData xlSheet.Range("A1:F6"), xlColumns VB.NET では、(Excel.クラス名.定数) .SetSourceData(xlSheet.Range("A1:F6"), Excel.XlRowCol.xlColumns) 上記定数を調べる場合、VBAXL9.CHM 等のヘルプで[SetSourceData]をキーワードに検索すると SetSourceData メソッド がヒットします。 その解説文に、[使用できる定数は、XlRowCol クラスの xlColumns または xlRows です。]と記載されています。 Excel. と入力するとインテリセンス機能により、XlRowCol クラスを選択し、使用する定数を選んで下さい。 ヘルプファイルは、バージョンにより、VbaXl8.hlp Vbaxl9.chm Vbaxl10.chm VBAXL10.chm 等があります。 標準のインストールでは、インストールされませんので、入っていない方は、CDより追加でインストールして下さい。 インストール方法は、VBA のヘルプを参照するを見て下さい。 又、定数名が判っていれば、オブジェクトブラウザーから定数名を検索すれば簡単に探せます。 Vbaxl9.chm でしたら、単独で開いても、検索機能が付いておりますので便利です。 Vbaxl10.chm は単独で開いた場合、キーワード等の検索はできません。 又は、 Private Const xlColumns As Short = 2 のように定数を宣言して使用する方法もあります。 [XL95] 組込み定数一覧 (1/3) http://support.microsoft.com/default.aspx?scid=kb;ja;407881 [XL95] 組込み定数一覧 (2/3) http://support.microsoft.com/default.aspx?scid=kb;JA;407882 [XL95] 組込み定数一覧 (3/3) http://support.microsoft.com/default.aspx?scid=kb;JA;407883 |
|
おことわり 今後、Excel関係のTips は、上記のTipsのように起動処理の部分と終了処理の部分を省略して掲載します。 従って、Tipsをお試しになる場合は、別途、ご自分の環境に合せて、起動処理と終了処理を追加して下さい。 |