Visual Basic .NET を使用して Microsoft Excel を自動化する方法

概要

この資料では、Microsoft Visual Basic .NET を使用して Microsoft Excel 用オートメーション クライアントを作成する方法について説明します。

詳細

オートメーションとは、Visual Basic などの言語で記述されたアプリケーションを使用して、他のアプリケーションをプログラムによって制御するプロセスです。Excel のオートメーションを使用すれば、新規ブックの作成、ブックへのデータ入力、グラフの作成などの作業を自動的に実行させることができます。Excel などの Microsoft Office アプリケーションでは、通常はユーザー インターフェイスを介して手動で実行する機能のほぼすべてを、オートメーションによってプログラムから実行することができます。


Excel では、このプログラム機能がオブジェクト モデルを経由して公開されています。オブジェクト モデルとは、Excel の論理コンポーネントに対応するクラスやメソッドのコレクションです。たとえば、Application オブジェクト、Workbook オブジェクト、Worksheet オブジェクトなどがあり、これらには対応する Excel コンポーネントの機能が含まれています。Visual Basic .NET からオブジェクト モデルにアクセスするには、タイプ ライブラリへのプロジェクト参照を設定します。


この資料では、Visual Basic .NET で適切な Excel タイプ ライブラリへのプロジェクト参照を設定する方法と、Excel 自動化のサンプル コードを掲載します。

Microsoft Excel 用オートメーション クライアントの作成

  1. Microsoft Visual Studio .NET を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [Windows アプリケーション] をクリックします。デフォルトで Form1 が作成されます。
  3. 次の手順を実行して、Microsoft Excel Object Library への参照を追加します。
    1. [プロジェクト] メニューの [参照の追加] をクリックします。
    2. [COM] タブで、Microsoft Excel オブジェクト ライブラリを見つけてクリックし、[選択] をクリックします。


      : Microsoft Office 2003 には、プライマリ相互運用機能アセンブリ (PIA) が含まれています。Microsoft Office XP の場合、PIA は含まれていませんが、PIA をダウンロードすることはできます。
      Office XP の PIA の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

      328912 Microsoft Office XP 用の PIA (Primary Interop Assemblies) のダウンロード
    3. [参照の追加] ダイアログ ボックスで [OK] をクリックして選択内容を確定します。
  4. [表示] メニューの [ツールボックス] をクリックしてツールボックスを表示し、Form1 にボタンを 1 つ追加します。
  5. [Button1] をダブルクリックします。フォームのコード ウィンドウが表示されます。
  6. コード ウィンドウで、次のコードを探します。
        Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    End Sub
    このコードを次のコードで置き換えます。
        Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    Dim oXL As Excel.Application
    Dim oWB As Excel.Workbook
    Dim oSheet As Excel.Worksheet
    Dim oRng As Excel.Range

    ' Start Excel and get Application object.
    oXL = CreateObject("Excel.Application")
    oXL.Visible = True

    ' Get a new workbook.
    oWB = oXL.Workbooks.Add
    oSheet = oWB.ActiveSheet

    ' Add table headers going cell by cell.
    oSheet.Cells(1, 1).Value = "First Name"
    oSheet.Cells(1, 2).Value = "Last Name"
    oSheet.Cells(1, 3).Value = "Full Name"
    oSheet.Cells(1, 4).Value = "Salary"

    ' Format A1:D1 as bold, vertical alignment = center.
    With oSheet.Range("A1", "D1")
    .Font.Bold = True
    .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
    End With

    ' Create an array to set multiple values at once.
    Dim saNames(5, 2) As String
    saNames(0, 0) = "John"
    saNames(0, 1) = "Smith"
    saNames(1, 0) = "Tom"
    saNames(1, 1) = "Brown"
    saNames(2, 0) = "Sue"
    saNames(2, 1) = "Thomas"
    saNames(3, 0) = "Jane"

    saNames(3, 1) = "Jones"
    saNames(4, 0) = "Adam"
    saNames(4, 1) = "Johnson"

    ' Fill A2:B6 with an array of values (First and Last Names).
    oSheet.Range("A2", "B6").Value = saNames

    ' Fill C2:C6 with a relative formula (=A2 & " " & B2).
    oRng = oSheet.Range("C2", "C6")
    oRng.Formula = "=A2 & "" "" & B2"

    ' Fill D2:D6 with a formula(=RAND()*100000) and apply format.
    oRng = oSheet.Range("D2", "D6")
    oRng.Formula = "=RAND()*100000"
    oRng.NumberFormat = "$0.00"

    ' AutoFit columns A:D.
    oRng = oSheet.Range("A1", "D1")
    oRng.EntireColumn.AutoFit()

    ' Manipulate a variable number of columns for Quarterly Sales Data.
    Call DisplayQuarterlySales(oSheet)

    ' Make sure Excel is visible and give the user control
    ' of Excel's lifetime.
    oXL.Visible = True
    oXL.UserControl = True

    ' Make sure that you release object references.
    oRng = Nothing
    oSheet = Nothing
    oWB = Nothing
    oXL.Quit()
    oXL = Nothing

    Exit Sub
    Err_Handler:
    MsgBox(Err.Description, vbCritical, "Error: " & Err.Number)
    End Sub

    Private Sub DisplayQuarterlySales(ByVal oWS As Excel.Worksheet)
    Dim oResizeRange As Excel.Range
    Dim oChart As Excel.Chart
    Dim oSeries As Excel.Series
    Dim iNumQtrs As Integer
    Dim sMsg As String
    Dim iRet As Integer


    ' Determine how many quarters to display data for.
    For iNumQtrs = 4 To 2 Step -1
    sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?"
    iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _
    Or vbMsgBoxSetForeground, "Quarterly Sales")
    If iRet = vbYes Then Exit For
    Next iNumQtrs

    ' Starting at E1, fill headers for the number of columns selected.
    oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Formula = "=""Q"" & COLUMN()-4 & CHAR(10) & ""Sales"""

    ' Change the Orientation and WrapText properties for the headers.
    oResizeRange.Orientation = 38
    oResizeRange.WrapText = True

    ' Fill the interior color of the headers.
    oResizeRange.Interior.ColorIndex = 36

    ' Fill the columns with a formula and apply a number format.
    oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Formula = "=RAND()*100"
    oResizeRange.NumberFormat = "$0.00"

    ' Apply borders to the Sales data and headers.
    oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin

    ' Add a Totals formula for the sales data and apply a border.
    oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)
    oResizeRange.Formula = "=SUM(E2:E6)"
    With oResizeRange.Borders(Excel.XlBordersIndex.xlEdgeBottom)
    .LineStyle = Excel.XlLineStyle.xlDouble
    .Weight = Excel.XlBorderWeight.xlThick
    End With

    ' Add a Chart for the selected data.
    oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)
    oChart = oWS.Parent.Charts.Add
    With oChart
    .ChartWizard(oResizeRange, Excel.XlChartType.xl3DColumn, , Excel.XlRowCol.xlColumns)
    oSeries = .SeriesCollection(1)
    oSeries.XValues = oWS.Range("A2", "A6")
    For iRet = 1 To iNumQtrs
    .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"
    Next iRet
    .Location(Excel.XlChartLocation.xlLocationAsObject, oWS.Name)
    End With

    ' Move the chart so as not to cover your data.
    With oWS.Shapes.Item("Chart 1")
    .Top = oWS.Rows(10).Top
    .Left = oWS.Columns(2).Left
    End With

    ' Free any references.
    oChart = Nothing
    oResizeRange = Nothing
    End Sub
  7. Form1.vb の先頭に次のコードを追加します。
    Imports Microsoft.Office.Core

オートメーション クライアントのテスト

  1. F5 キーを押してプログラムをビルドし、実行します。
  2. フォーム上の [Button1] をクリックします。プログラムが Excel を起動し、新規ワークシートにデータが入力されます。
  3. 四半期分の売上データを入力するように要求されたら、[はい] をクリックします。四半期分のデータにリンクされたグラフがワークシートに追加されます。

関連情報

詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
Microsoft Office Development with Visual Studio

http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Excel および Visual Basic の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

219151 Visual Basic を使用して Microsoft Excel を自動化する方法
プロパティ

文書番号:301982 - 最終更新日: 2007/06/29 - リビジョン: 1

フィードバック