Excel にデータを送りグラフを表示する |
VBからExcel にデータを送りグラフを表示する (016) 動作確認 : WindowsXP(SP2) VB6.0(SP6) / Excel 2000 Excel 2002 Excel 2007 |
|
まず、VBからExcel及びWordを操作する時の注意事項を見て下さい Option Explicit Private Sub Command1_Click() '★プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryに ' チェックを入れておいて下さい。 '================================================================== 'Excel の起動処理 '基本的な設定は[VBからエクセルを操作する]を参照して下さい。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook 転載禁止 Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add 転載禁止 Set xlSheet = xlBook.Worksheets(1) 転載禁止 '================================================================== 'Excel を操作部分 'Excel のセルに値を代入します。 Dim xlCells As Excel.Range Dim i As Integer Dim j As Integer Set xlCells = xlSheet.Cells For i = 2 To 6 For j = 2 To 6 '30〜100 の範囲のランダムなデータを作成 xlCells(j, i).Value = CInt(70 * Rnd + 31) 転載禁止 Next j Next i '系列名の設定 xlCells(2, 1).Value = "国語" xlCells(3, 1).Value = "数学" xlCells(4, 1).Value = "英語" xlCells(5, 1).Value = "社会" xlCells(6, 1).Value = "体育" '項目名の設定 xlCells(1, 2).Value = "石原" xlCells(1, 3).Value = "小泉" xlCells(1, 4).Value = "田中" xlCells(1, 5).Value = "平沼" xlCells(1, 6).Value = "森山" '=================================================================== 'グラフデータの範囲を選択 SetSourceDataでも可 'xlSheet.Range("A1:F6").Select Dim MyChart As ChartObject '表示位置・グラフの大きさを指定して '新しい埋め込みグラフを作成します。 Set MyChart = xlSheet.ChartObjects.Add(10, 100, 600, 330) With MyChart.Chart 転載禁止 'PlotBy プロパティでも系列を指定できます。 '系列を列に変更 行は xlRows載禁止 .SetSourceData xlSheet.Range("A1:F6"), xlColumns '又は '.SetSourceData xlSheet.Range(xlSheet.Cells(1, 1), _ xlSheet.Cells(6, 6)), xlColumns '円グラフのように複数の範囲を選択する場合 '.SetSourceData xlSheet.Range("A1:A6,D1:D6"), xlColumns '又は下記のような関数を作成しておき 'Dim myRange As String 'myRange = fChangeA1(1, 1) & ":" & fChangeA1(6, 1) & "," & _ fChangeA1(1, 4) & ":" & fChangeA1(6, 27) '.SetSourceData xlSheet.Range(myRange), xlColumns '縦棒グラフを指定 .ChartType = xlColumnClustered 転載禁止 '数値軸の最大目盛りを 100 に設定 .Axes(xlValue).MaximumScale = 110 '数値軸の最小目盛りを 0 に設定 .Axes(xlValue).MinimumScale = 0 転載禁止 '数値軸の目盛り間隔を 20 に設定 .Axes(xlValue).MajorUnit = 20 'グラフのタイトルを表示 .HasTitle = True .ChartTitle.Text = "中間テスト結果" 'データラベルの表示(全ての系列に対して) .ApplyDataLabels (xlDataLabelsShowValue) 転載禁止 '系列1にだけ表示する場合 '.SeriesCollection(1).ApplyDataLabels (xlDataLabelsShowValue) '作業中のシートにグラフを表示載禁止 .Location xlLocationAsObject, xlSheet.Name 転載禁止 End With 'エクセルを表示します。(後で表示する方が早い) xlApp.Visible = True '★おまけ上記がうまく表示されたらコメントを外して試して下さい。 'MyChart.Chart.ChartType = xl3DColumn 転載禁止 'For i = 0 To 100 Step 10 転載禁止 ' MyChart.Chart.Rotation = i ' xlApp.Wait (Now + TimeValue("0:00:01")) 'Next i '================================================================== '下記コードはこのサンプルとは直接、関係ありません。 '動作確認の為に Excel を5秒間表示して置く為のものです。 Dim lngSt As Long lngSt = Timer Do While Timer - lngSt < 5 DoEvents Loop '================================================================== '終了処理 xlApp.DisplayAlerts = False Set xlCells = Nothing Set MyChart = Nothing Set xlSheet = Nothing xlBook.Close 'Book を閉じる Set xlBook = Nothing xlApp.Quit 転載禁止 Set xlApp = Nothing End Sub A1形式に変換する自作関数 Private Function fChangeA1(ByVal Row As Long, ByVal Col As Long) As String 'セルアドレスを A1 形式に変換する自作関数載禁止 If Col >= 27 Then fChangeA1 = Chr$(64 + ((Col - 1) \ 26)) & _ Chr$((Col Mod 26) + 64) & Trim$(Str$(Row)) 転載禁止 Else fChangeA1 = Chr$(Col + 64) & Trim$(Str$(Row)) 転載禁止 End If 転載禁止 End Function |
|
細かい設定等はマクロに記録して調べて下さい。 又、グラフの種類等はヘルプファイル(C:\Program Files\Microsoft Office\Office\1041\VBAXL9.CHM) (環境により違います。Excel2000)で ”ChartTypeプロパティ” で検索し、調べて下さい。 |