VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 Excel・Word・VBA関係のメニュー
1.VB2013 から Excel 2013 を操作する為の基本的な操作方法
2.Excel 操作ワンポイントテクニック集その1
3.Excel 操作ワンポイントテクニック集その2
4.VB2013から Excel にデータを送りグラフを表示する
5.Excel のグラフをクリップボード経由で PictureBox に貼付
6.Excel 2013 の WEB クエリを VB2013 から操作する
7.
8.
9.
10.
11.VB2013から Word の起動・終了処理及び文字の書き込み例
12.Wordの差し込み印刷機能を使って宛て名ラベルを印刷
13.
20.その他、当サイト内に掲載のExcel・Word・VBAに関するサンプル


5.Excel のグラフをクリップボード経由で PictureBox に貼付(09_Xls_05) (旧、SampleNo.065)
1.Excel のグラフをクリップボード経由で PictureBox に貼付
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  PictureBox1
トロール:
このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので)
必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい)
このページのトップへ移動します。 1.Excel のグラフをクリップボード経由で PictureBox に貼付

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)

    '作業中のシートにグラフを表示する場合
    Dim xlChart2 As Excel.Chart
    xlChart2 = .Location(Excel.XlChartLocation.xlLocationAsObject, xlSheet.Name)
    MRComObject(xlChart2)

  End With

'-----------------------------------------------------------------------------------------------
  '※ Excelのグラフをクリップボード経由でPictureBoxに貼付 のコードはここへ追加する
  '=========================== ここからが追加分 =============================
  Dim xlVersion As Excel.Application
  xlVersion = xlApp.Application
  '起動中(使用中)のExcel のバージョンを取得
  If CDbl(xlVersion.Version) >= 12 Then
  'Excel 2007/Excel 2010 /Excel 2013 の場合
    '-------------------------------------------------------------------------- 
    '★ このグラフをファイルに保存する場合
    xlChart1.Export(Filename:=Application.StartupPath & "\test.GIF", FilterName:="GIF")
    '---------------------------------------------------------------------------
    '画像ファイルを読み込み表示(ファイルのサイズで)
    'With PictureBox1
    '  '表示する画像のサイズに合わせてPictureBoxを表示します
    '  .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
    '  '画像ファイルを読み込みPictureBoxに表示
    '  .Image = System.Drawing.Image.FromFile(Application.StartupPath & "\test.GIF")
    'End With

    '上記のような方法で読み込むと、再度実行するとファイルがロックされているので
    'エラーとなるので、必要により下記のように読み込み表示して下さい。
    'FileStream オブジェクトを使用して読み込み表示するとロックされません。
    '(使用中でも、test001.GIF を上書き、削除等してもエラーとならない。)
    Using fs As System.IO.FileStream = New System.IO.FileStream(Application.StartupPath & _
          "\test.GIF", System.IO.FileMode.Open, System.IO.FileAccess.Read)
      'グラフを PictureBox のサイズに合わせて拡大・縮小表示
      PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
      'PictureBox1に保存した画像を表示
      PictureBox1.Image = System.Drawing.Image.FromStream(fs)
    End Using
  Else
  'Excel 2007 以下の場合
    '------ Excelのグラフをクリップボード経由でPictureBoxに貼付 ------------------
    'クリップボードにコピー
    'xlSheet.ChartObjects("グラフ 1").Copy() 'これでは、.NET では取得できない
    xlChart1.CopyPicture(Appearance:=Excel.XlPictureAppearance.xlScreen, _
                Size:=Excel.XlPictureAppearance.xlScreen, _
                Format:=Excel.XlCopyPictureFormat.xlBitmap)

    '-------------------------------------------------------------------------------
    'Excel 2007 以降では、上記でもクリップボードには、EnhancedMetafile MetaFilePict の
    '画像しかコピーされない。
    'Excel 2007 以降の場合、一度保存してからファイルを読み込むか、サンプルNo.158 の
    'サンプルを使ってメタファイルを取得するかしてください。
    '-------------------------------------------------------------------------------

    '現在システムクリップボードにあるデータを取得します
    Dim iData As IDataObject = Clipboard.GetDataObject()
    'クリップボードにBitmapファイルがあれば
    If iData.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap) Then
      'グラフを PictureBox のサイズに合わせて拡大・縮小表示
      PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
      'PictureBox1にクリップボードの画像を貼り付け
      PictureBox1.Image = DirectCast(iData.GetData(DataFormats.Bitmap), Image)
    End If
  End If
  MRComObject(xlVersion)
  '=========================== ここまで =======================================

'-----------------------------------------------------------------------------------------------

  MRComObject(xlChart1)
  MRComObject(xlChart)
  MRComObject(xlCharts)

  '=============================================================================
  'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
  Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了
  'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし)
  WT.WaitTime(1000)
  Call ProcessCheck()
End Sub

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





このページのトップへ移動します。