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プロパティ” で検索し、調べて下さい。
転載禁止

2006/02/21
2006/12/27


VBレスキュー(花ちゃん)
Visual Basic6.0  VB6.0