現在オフラインです。再接続するためにインターネットの接続を待っています

Visual Basic .NET を使用してデータを Excel ブックに転送する方法

この記事は、以前は次の ID で公開されていました: JP306022
Microsoft Visual C# .NET については、次の資料を参照してください。306023
概要
この資料では、Visual Basic .NET プログラムから Excel 2002 形式のデータを転送するためのいくつかの方法を、手順を追って説明します。また、最適なソリューションを選択できるように、それぞれの方法の長所と短所についても説明します。

はじめに

データを転送して Excel ブック形式のデータを作成するのに最もよく使用されるのは、"オートメーション" と呼ばれる技法です。オートメーションを使用することによって、Excel タスクに対応したメソッドやプロパティを呼び出すことができ、Excel ブックの中にあるデータの位置の指定やブックの書式設定、その他の実行時の設定を最も柔軟に行うことができます。

オートメーションを使用することで、データ転送に以下のような技法を使用することができます。
  • セルごとにデータを転送する
  • 配列のデータを特定のセル範囲に転送する
  • CopyFromRecordset メソッドを使用して、ADO レコードセットのデータを特定のセル範囲に転送する
  • ODBC または OLEDB データ ソースのクエリの結果を含む QueryTable オブジェクトを Excel ワークシート上で作成する
  • クリップボードのデータを転送し、クリップボードの内容を Excel ワークシートに貼り付ける
オートメーションを使用せずにデータを Excel 形式に転送する方法も多数あります。アプリケーションをサーバー側で実行している場合、この方法はクライアントでの大量のデータ処理を回避するのに有効なアプローチです。

オートメーションを使用せずにデータ転送を行うには、以下のアプローチを使用します。
  • データをタブ区切りまたはコンマ区切りテキスト ファイルに変換し、後から Excel でテキストを区切ってブックのセルに格納する
  • ADO.NET を使用してデータをワークシートに転送する
  • XML データから Excel 形式 (バージョン 2002 に限られます) に変換することでデータに書式を与え、セルの行や列に割り当てる

技法の説明

オートメーションを使用してセルごとにデータを転送する

オートメーションを使用することによって、次のように、ワークシートのセルに 1 つずつデータを転送できます。
        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Add data to cells of the first worksheet in the new workbook.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Last Name"        oSheet.Range("B1").Value = "First Name"        oSheet.Range("A1:B1").Font.Bold = True        oSheet.Range("A2").Value = "Doe"        oSheet.Range("B2").Value = "John"        'Save the Workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book1.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()				
セルを 1 つずつ転送する方法は、転送するデータが少量の場合には適切なアプローチです。データはブックのどの場所にあってもよく、実行時に条件付きでセルの書式を設定することもできます。しかし、大量のデータを Excel ブックに転送する場合は、この方法はお勧めできません。実行時に取得するそれぞれの Range オブジェクトではインターフェイス要求が発生し、これによってデータ転送の速度が低下します。
また、Microsoft Windows 95、Microsoft Windows 98 および Microsoft Windows Millennium Edition (Me) ではインターフェイス要求のサイズに 64 KB の制限があります。インターフェイス要求のサイズが 64 KB の制限を超えると、オートメーション サーバー (Excel) が応答を停止するか、メモリ不足のエラー メッセージが表示されることがあります。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
216400 [PRB] Windows 95/98 でプロセス間の COM オートメーションによりクライアント アプリケーションがハングする
前述のとおり、セルごとにデータを転送する方法が適切なのは、データ量が少ない場合に限られます。大量のデータを転送する必要がある場合は、この資料で後述されている、大量のデータ転送に適した他のアプローチを検討してください。

関連情報および Visual Basic .NET を使用した Excel オートメーションのサンプルの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
301982 Visual Basic .NET を使用して Microsoft Excel を自動化する方法

オートメーションを使用してデータの配列をワークシートの特定のセル範囲に転送する

データ配列を、次のように複数のセル範囲に一度に転送できます。
        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Create an array with 3 columns and 100 rows.        Dim DataArray(99, 2) As Object        Dim r As Integer        For r = 0 To 99            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")            DataArray(r, 1) = Rnd() * 1000            DataArray(r, 2) = DataArray(r, 1) * 0.07        Next        'Add headers to the worksheet on row 1.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Order ID"        oSheet.Range("B1").Value = "Amount"        oSheet.Range("C1").Value = "Tax"        'Transfer the array to the worksheet starting at cell A2.        oSheet.Range("A2").Resize(100, 3).Value = DataArray        'Save the Workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book2.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()				
セルごとに転送する代わりに配列を使用すると、大量のデータを転送する際にパフォーマンスの大幅な向上を実感できます。上記のコードから抜粋した次の行では、ワークシートの中にある 300 のセルにデータを転送します。
        oSheet.Range("A2").Resize(100, 3).Value = DataArray				
このコード行では、2 つのインターフェイス要求が発生します。1 つは Range メソッドが返す Range オブジェクトで、もう 1 つは Resize メソッドが返す Range オブジェクトで発生します。一方、セルごとにデータを転送する方法では、Range オブジェクトへの 300 個のインターフェイスに対して要求が発生します。配列を利用できる場合は、データを一度に転送してインターフェイス要求の回数を低減することにより、処理の効率が向上します。

オートメーションを使用して ADO レコードセットをワークシートの範囲に転送する

Excel 2000 および Excel 2002 のオブジェクト モデルでは、ADO レコードセットをワークシートの特定の範囲に転送するための CopyFromRecordset メソッドが提供されています。次のコードでは、CopyFromRecordset メソッドを使用して Northwind サンプル データベースの [受注] テーブルから Excel にデータを自動転送する方法を示します。
        'Create a Recordset from all the records in the Orders table.        Dim sNWind As String        Dim conn As New ADODB.Connection()        Dim rs As ADODB.Recordset        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";")        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient        rs = conn.Execute("受注", , ADODB.CommandTypeEnum.adCmdTable)        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Transfer the field names to Row 1 of the worksheet:        'Note: CopyFromRecordset copies only the data and not the field        '      names, so you can transfer the fieldnames by traversing the        '      fields collection.        Dim n As Int32        For n = 1 To rs.Fields.Count            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name        Next        'Transfer the data to Excel.        oSheet.Range("A2").CopyFromRecordset(rs)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book3.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()        'Close the connection        rs.Close()        conn.Close()				
: CopyFromRecordset は ADO の Recordset オブジェクトに対してのみ有効です。ADO.NET を使用して作成したデータセットに対して CopyFromRecordset メソッドを使用することはできません。ADO.NET を使用してデータを Excel に転送する方法については、後述するいくつかの例で説明します。

オートメーションを使用して QueryTable オブジェクトをワークシート上に作成する

QueryTable オブジェクトは、外部のデータ ソースから返されたデータを使用して作成されたテーブルを表します。Excel を自動化する場合、OLE DB、または SQL (Structured Query Language) 文字列が設定された ODBC データ ソースへの接続文字列を与えることによって QueryTable を作成することができます。レコードセットは Excel で作成され、ワークシートの指定した位置に挿入されます。QueryTable オブジェクトを使用する場合、CopyFromRecordset メソッドを使用する場合と比較して以下のような長所があります。
  • レコードセットの作成およびワークシートへの配置が Excel 側で実行されます。
  • クエリを QueryTable オブジェクトに保存して後から更新することにより、更新されたレコードセットを取り出すことができます。
  • ワークシートに QueryTable を新規に追加すると、ワークシートのセルにあるデータを使用して新しいデータを取得するように指定できます (詳細については RefreshStyle プロパティを参照してください)。
次のコードでは、Northwind サンプル データベースを使用して、Excel 2000 または Excel 2002 のワークシートに QueryTable オブジェクトを自動的に新規作成する方法を示します。
        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Create the QueryTable object.        Dim oQryTable As Object        oQryTable = oSheet.QueryTables.Add( _        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";", oSheet.Range("A1"), _            "Select * from 受注")        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2        oQryTable.Refresh(False)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book4.xls")        oQryTable = Nothing        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing				

クリップボードを使用する

クリップボードを経由してデータをワークシートに転送することができます。ワークシートの複数のセルにデータを貼り付けるには、タブ文字で列を、改行文字で行を区切った文字列をコピーします。次のコードでは、Visual Basic .NET を使用してクリップボードの内容を Excel に転送する方法を示します。
        'Copy a string to the Clipboard.        Dim sData As String        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"        System.Windows.Forms.Clipboard.SetDataObject(sData)        'Create a workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Paste the data.        oBook.Worksheets(1).Range("A1").Select()        oBook.Worksheets(1).Paste()        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book5.xls")        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()				

Excel で行と列が適切に区切られるように、区切り文字の入ったテキスト ファイルを作成する

Excel では、タブ区切りまたはコンマ区切りのファイルを開き、正しく解析してセルに配置することができます。この機能はオートメーションをほとんど使用せずに、大容量のデータをワークシートに変換するのに適しています。テキスト ファイルはサーバー側で生成できるため、これはクライアント/サーバー型のアプリケーションに適したアプローチです。その後クライアント側で、必要に応じてオートメーションを使用し、テキストを開きます。

次のコードでは、ADO.NET を使用して読み出したデータをタブ区切りテキスト ファイルに変換する方法を示します。
        'Connect to the data source.        Dim objConn As New System.Data.OleDb.OleDbConnection( _            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")        objConn.Open()        'Execute a command to retrieve all records from the Employees table.        Dim objCmd As New System.Data.OleDb.OleDbCommand( _            "Select * From 社員", objConn)        Dim objReader As System.Data.OleDb.OleDbDataReader        objReader = objCmd.ExecuteReader()        'Read the records in the dataset and write select fields to the         'output file.        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)        Dim i As Integer, s As String        While objReader.Read()            'Loop through first 6 fields and concatenate            'each field, separated by a tab, into s variable.            s = ""            For i = 0 To 5                If Not objReader.IsDBNull(i) Then                    If i = 0 Then 'field 1 is EmployeeId                        s = s & objReader.GetInt32(i).ToString                    ElseIf i = 5 Then 'field 6 is BirthDate                        s = s & objReader.GetDateTime(i)                    Else 'field is a text field                        s = s & objReader.GetString(i)                    End If                End If                s = s & Microsoft.VisualBasic.ControlChars.Tab            Next            PrintLine(1, s)        End While        FileClose(1)        'Close the reader and the connection.        objReader.Close()        objConn.Close()				
上記のコードではオートメーションは使用していませんが、次のように、必要に応じてオートメーションを使用してテキスト ファイルを開き、Excel ブック形式でファイルに保存することもできます。
        'Create a new instance of Excel.        Dim oExcel As Object        oExcel = CreateObject("Excel.Application")        'Open the text file and save it in the Excel workbook format.        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _            , , , -4142, , True) 'xlTextQualifierNone=-4142        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _            -4143) 'xlWorkbookNormal = -4143        'Quit Excel.        oExcel.Quit()        oExcel = Nothing        GC.Collect()				

ADO.NET を使用してデータをワークシートに変換する

Microsoft Jet OLE DB プロバイダを使用して Excel ブック上のテーブルにレコードを追加することができます。Excel における "テーブル" とは、単に特定のセル範囲を意味します。このセル範囲には定義名が付けられていることがあります。通常セル範囲の最初の行にヘッダー (またはフィールド名) が含まれ、ヘッダーに続く行がレコードとなります。

次のコードでは、Book7.xls のテーブルにレコードを 2 つ追加します。この例では、Sheet1 にテーブルが含まれています。
       'Establish a connection to the data source.        Dim sConnectionString As String        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _            "Data Source=" & sSampleFolder & _            "Book7.xls;Extended Properties=Excel 8.0;"        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)        objConn.Open()        'Add two records to the table.        Dim objCmd As New System.Data.OleDb.OleDbCommand()        objCmd.Connection = objConn        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Bill', 'Brown')"        objCmd.ExecuteNonQuery()        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Joe', 'Thomas')"        objCmd.ExecuteNonQuery()        'Close the connection.        objConn.Close()				
この例に従って ADO.NET を使用してレコードを追加すると、ブック内の書式が保たれます。追加されるそれぞれの行の書式には、直前の行の書式が引き継がれます。たとえば、セル B1 の書式が右揃えになっている場合、列 B に追加される新しいフィールドは右揃えになります。

ワークシートの 1 つ以上のセルにレコードを追加する場合、セルに格納されているデータはすべて上書きされることに注意してください。つまり、新しいレコードを追加する場合、ワークシートの行は下に移動されません。ADO.NET を使用して新しいレコードを挿入する場合、ワークシート上のデータのレイアウトを設計するうえでこの点に注意する必要があります。

ADO.NET の使用方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
301075 ADO.NET と Visual Basic .NET を使用して、データベースに接続し、コマンドを実行する方法
301216 Visual Basic .NET を使用してデータベースから DataSet オブジェクトを取得する方法
301248 Visual Basic .NET を使用して DataSet オブジェクトからデータベースを更新する方法
Excel データ ソースによる Jet OLE DB プロバイダの使用方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
278973 ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)
257819 [HOWTO] Visual Basic または VBA から ADO を Excel データで使用する

XML データを転送する (Excel 2002 のみ)

Excel 2002 では、あらゆる整形式 (well-formed) XML ファイルを開くことができます。[ファイル] メニューの [開く] を使用して XML ファイルを直接開くことも、プログラムから Workbooks コレクションの Open メソッドまたは OpenXML メソッドを使用して開くこともできます。Excel 用の XML ファイルを作成する場合、データに書式を設定するスタイル シートを作成することもできます。

Excel 2002 で XML を使用する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
307021 [HOWTO] Visual Basic .NET を使用して XML データを Microsoft Excel 2002 に転送する方法
288215 [INFO] Microsoft Excel 2002 と XML

Visual Basic .NET プロジェクトの完全なサンプルを作成する

  1. サンプルで作成される Excel ブックを保存するためのフォルダを新規に作成し、そのフォルダに C:\ExcelData という名前を付けます。
  2. 以下の手順を実行して、サンプルで使用するブックを新規作成します。
    1. Excel で新しいブックを作成します。
    2. 新しいブックの Sheet1 で、セル A1 に FirstName、セル B1 に LastName と入力します。
    3. ブックを C:\ExcelData\Book7.xls として保存します。
  3. Visual Studio .NET を起動します。[ファイル] メニューの [新規作成] をクリックして、[プロジェクト] をクリックします。Visual Basic プロジェクトの種類の一覧の [Windows アプリケーション] をクリックします。デフォルトで Form1 が作成されます。
  4. 以下の手順を実行して、Excel オブジェクト ライブラリへの参照を追加します。
    1. [プロジェクト] メニューの [参照の追加] をクリックします。
    2. [COM] タブで、[Microsoft Excel 10.0 Object Library] をクリックし、[選択] をクリックします。

      : Microsoft Office XP プライマリ相互運用機能アセンブリ (PIA) をまだ入手していない場合は、ダウンロードしてインストールすることをお勧めします。Office XP の PIA の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
      328912 Microsoft Office XP 用の PIA (Primary Interop Assemblies) のダウンロード
    3. [COM] タブの [Microsoft ActiveX Data Objects 2.7 Library] をクリックし、[選択] をクリックします。
    4. [参照の追加] ダイアログ ボックスで [OK] をクリックして、選択を確定します。選択したライブラリのラッパーを生成するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。
  5. ツールボックスの ComboBox コントロールと Button コントロールを Form1 に追加します。
  6. Form1 に次のコードを追加します。
        Const sSampleFolder = "C:\ExcelData\"    Const sNorthwind = "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _      Handles MyBase.Load        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList        Dim aList As String() = _            {"Use Automation to Transfer Data Cell by Cell ", _             "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", _             "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", _             "Use Automation to Create a QueryTable on a Worksheet", _             "Use the Clipboard", _             "Create a Delimited Text File that Excel Can Parse into Rows and Columns", _             "Transfer Data to a Worksheet Using ADO.NET "}        ComboBox1.Items.AddRange(aList)        ComboBox1.SelectedIndex = 0        Button1.Text = "Go!"    End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _      Handles Button1.Click        Select Case ComboBox1.SelectedIndex            Case 0 : Automation_CellByCell()            Case 1 : Automation_UseArray()            Case 2 : Automation_ADORecordset()            Case 3 : Automation_QueryTable()            Case 4 : Use_Clipboard()            Case 5 : Create_TextFile()            Case 6 : Use_ADONET()        End Select        GC.Collect()    End Sub    Private Function Automation_CellByCell()        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Add data to cells of the first worksheet in the new workbook.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Last Name"        oSheet.Range("B1").Value = "First Name"        oSheet.Range("A1:B1").Font.Bold = True        oSheet.Range("A2").Value = "Doe"        oSheet.Range("B2").Value = "John"        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book1.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Automation_UseArray()        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Create an array with 3 columns and 100 rows.        Dim DataArray(99, 2) As Object        Dim r As Integer        For r = 0 To 99            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")            DataArray(r, 1) = Rnd() * 1000            DataArray(r, 2) = DataArray(r, 1) * 0.07        Next        'Add headers to the worksheet on row 1.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Order ID"        oSheet.Range("B1").Value = "Amount"        oSheet.Range("C1").Value = "Tax"        'Transfer the array to the worksheet starting at cell A2.        oSheet.Range("A2").Resize(100, 3).Value = DataArray        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book2.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Automation_ADORecordset()        'Create a Recordset from all the records in the Orders table.        Dim sNWind As String        Dim conn As New ADODB.Connection()        Dim rs As ADODB.Recordset        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";")        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient        rs = conn.Execute("受注", , ADODB.CommandTypeEnum.adCmdTable)        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Transfer the field names to Row 1 of the worksheet:        'Note: CopyFromRecordset copies only the data and not the field        '      names, so you can transfer the fieldnames by traversing the        '      fields collection.        Dim n As Int32        For n = 1 To rs.Fields.Count            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name        Next        'Transfer the data to Excel.        oSheet.Range("A2").CopyFromRecordset(rs)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book3.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()        'Close the connection.        rs.Close()        conn.Close()    End Function    Private Function Automation_QueryTable()        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Create the QueryTable object.        Dim oQryTable As Object        oQryTable = oSheet.QueryTables.Add( _        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";", oSheet.Range("A1"), _            "Select * from 受注")        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2        oQryTable.Refresh(False)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book4.xls")        oQryTable = Nothing        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing    End Function    Private Function Use_Clipboard()        'Copy a string to the clipboard.        Dim sData As String        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"        System.Windows.Forms.Clipboard.SetDataObject(sData)        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Paste the data.        oBook.Worksheets(1).Range("A1").Select()        oBook.Worksheets(1).Paste()        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book5.xls")        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Create_TextFile()        'Connect to the data source.        Dim objConn As New System.Data.OleDb.OleDbConnection( _            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")        objConn.Open()        'Run a command to retrieve all records from the Employees table.        Dim objCmd As New System.Data.OleDb.OleDbCommand( _            "Select * From 社員", objConn)        Dim objReader As System.Data.OleDb.OleDbDataReader        objReader = objCmd.ExecuteReader()        'Read the records in the dataset and write select fields to the         'output file.        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)        Dim i As Integer, s As String        While objReader.Read()            'Loop through first 6 fields and concatenate            'each field, separated by a tab, into s variable.            s = ""            For i = 0 To 5                If Not objReader.IsDBNull(i) Then                    If i = 0 Then 'field 1 is EmployeeId                        s = s & objReader.GetInt32(i).ToString                    ElseIf i = 5 Then 'field 6 is BirthDate                        s = s & objReader.GetDateTime(i)                    Else 'field is a text field                        s = s & objReader.GetString(i)                    End If                End If                s = s & Microsoft.VisualBasic.ControlChars.Tab            Next            PrintLine(1, s)        End While        FileClose(1)        'Close the reader and the connection.        objReader.Close()        objConn.Close()        'Create a new instance of Excel.        Dim oExcel As Object        oExcel = CreateObject("Excel.Application")        'Open the text file and save it in the Excel workbook format.        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _            , , , -4142, , True) 'xlTextQualifierNone=-4142        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _            -4143) 'xlWorkbookNormal = -4143        'Quit Excel.        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Use_ADONET()        'Verify that the workbook to write to does exist.        Dim sFile As String = sSampleFolder & "Book7.xls"        If Dir(sFile) = "" Then            MsgBox("Please create the workbook Book7.xls and try again.")            Exit Function        End If        'Establish a connection to the data source.        Dim sConnectionString As String        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _            "Data Source=" & sSampleFolder & _            "Book7.xls;Extended Properties=Excel 8.0;"        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)        objConn.Open()        'Add two records to the table named 'MyTable'.        Dim objCmd As New System.Data.OleDb.OleDbCommand()        objCmd.Connection = objConn        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Bill', 'Brown')"        objCmd.ExecuteNonQuery()        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Joe', 'Thomas')"        objCmd.ExecuteNonQuery()        'Close the connection.        objConn.Close()    End Function					
    : Office プログラムがデフォルトのフォルダ (C:\Program Files\Microsoft Office) にインストールされていない場合、コード サンプルの sNorthwind 定数を変更して、インストールされている Northwind.mdb へのパスに合わせます。

  7. Form1.vb ファイルの先頭に次のコードを追加します。
    Imports Microsoft.Office.Interop					
  8. F5 キーを押してサンプル プログラムをビルドし、実行します。
関連情報
詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
247412 [XL2003] [INFO] Visual Basic から Excel にデータを転送する方法
プロパティ

文書番号:306022 - 最終更新日: 01/17/2007 07:12:00 - リビジョン: 6.1

  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
  • kbhowtomaster kbautomation KB306022
フィードバック