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

Microsoft Visual C# .NET のバージョンこの資料の306023を参照してください。

概要

この資料では、Excel 2002 に Visual Basic .NET アプリケーションからデータを転送するためのいくつかの方法について説明します。状況に最も適したソリューションを選択することができますので、長所と短所がそれぞれの方法についても説明します。

概要

Excel ブックにデータを転送する最も頻繁に使用される手法は、オートメーションです。オートメーションを使って、メソッドとは、Excel のタスクに固有のプロパティを呼び出すことができます。オートメーションを使用すると、ブックやブックの書式を設定し、実行時にさまざまな設定を確認することで、データの場所を指定するための最大限の柔軟性です。

オートメーションを使って、データを転送するのにいくつかの手法を使用できます。
  • によってセルにデータを転送します。
  • セル範囲に配列内のデータを転送します。
  • 転送メソッドを使用してセルの範囲に ADO レコード セット内のデータを転送します。
  • ODBC または OLEDB データ ソースにクエリの結果が含まれる Excel ワークシートにQueryTableオブジェクトを作成します。
  • クリップボードにデータを転送し、Excel のワークシートにクリップボードの内容を貼り付けます。
Excel にデータを転送するのにはオートメーションを必要としないいくつかの方法を使用することもできます。サーバー側プログラムを実行している場合、クライアントからのデータ処理の大部分を取るために有効なアプローチできます。

オートメーションを使用せずにデータを転送するのには次の方法を使用する可能性があります。
  • ワークシート上のセルに、Excel は後で解析できるタブ区切りまたはコンマ区切りのテキスト ファイルにデータを転送します。
  • ADO.NET を使用してワークシートにデータを転送します。
  • 書式および行と列に配置されるデータを提供する Excel (バージョン 2002 のみ) を XML データを転送します。

テクニック

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

オートメーションを使ってデータを転送できますワークシートのセルに 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()

転送する多くのデータがない場合、セルにデータを転送する適切なアプローチできます。実行時に条件付きでセルの書式を設定することができ、ブックの任意の場所にデータを配置するのには柔軟性があります。ただし、多くのデータを Excel ブックに転送した場合、このアプローチは推奨されません。インターフェイス要求の実行時に取得するそれぞれのRangeオブジェクトが発生します。したがって、この方法でデータを転送するが遅くなることがあります。
さらに、Microsoft Windows 95、Windows 98、および Microsoft Windows me インターフェイス要求に 64 KB の制限があります。インターフェイス要求が 64 KB 以上の場合は、オートメーション サーバー (Excel) が応答を停止することがありますか、メモリ不足を示すエラー メッセージが表示される場合があります。
詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料をご参照ください。

216400プロセス間の COM オートメーションには、Win95 と 98 では、クライアント アプリケーションがハングことができます。

ここでも、セルにデータを転送するが少量のデータに対してのみです。Excel に大量のデータ セットを転送する必要がある場合は、一括でデータを転送するには、この資料に記載されている他の方法のいずれかを使用することを検討します。

詳細については、および Visual Basic .NET で Excel を自動化する方法の例については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

301982 Visual Basic .NET から 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 つのインターフェイスの要求を表します。 Rangeメソッドが返すRangeオブジェクトと別のサイズを変更するメソッドが返すRangeオブジェクトのいずれかです。によってセルにデータを転送する一方には、 Rangeオブジェクトへの 300 個のインターフェイスに対して要求を必要とします。可能な限り、一括でデータを転送して、インターフェイス要求の数を減らすことからも役立ちます。

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

Excel 2000 および Excel 2002 のオブジェクト モデルでは、ワークシート上の範囲に ADO レコード セットを転送する転送方法を提供します。次のコードは、転送方法を使用して、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("Orders", , 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()

転送は、ADOレコード セットオブジェクトでのみ動作します。転送メソッドを使用して ADO.NET を使用して作成したデータセットを使用することはできません。いくつかの例を次のセクションでは、ADO.NET で Excel にデータを転送する方法をデモンストレーションします。

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

QueryTableオブジェクトは、外部データ ソースから返されるデータから作成されたテーブルを表します。Excel を自動化するときに、OLEDB または ODBC データ ソースと SQL 文字列に接続文字列を提供することにより、クエリ テーブルを作成します。Excel では、レコード セットが生成され、ワークシート内の指定した場所にレコード セットを挿入します。QueryTableオブジェクトを使用するには、転送方法を次の利点が提供しています。
  • Excel では、レコード セットと、ワークシートへの配置の作成を処理します。
  • 更新されたレコード セットを取得するのには後から更新することができるように、クエリをQueryTableオブジェクトに保存できます。
  • ワークシートに新しいquerytable オブジェクトを追加すると、(詳細についてはRefreshStyleプロパティを参照してください)、新しいデータに合わせてワークシート上のセル内の既存のデータを移行することを指定できます。
次のコードでは、ノースウィンド サンプル データベースからデータを使用して Excel ワークシートに新しいquerytable オブジェクトを作成するには、Excel 2000 または 2002 を自動化する方法を示します。
        '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 Orders")
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 Employees", 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 を使用してワークシートにデータを転送します。

既存の Excel ブック内のテーブルにレコードを追加するのには Microsoft Jet の OLE DB プロバイダーを使用することができます。Excel における「テーブル」は、セルの範囲だけで範囲は、定義された名前があります。通常、範囲の先頭行にヘッダー (またはフィールド名) が含まれていて、範囲内のすべての後の行にレコードが含まれています。

次のコードは、Book7.xls 内のテーブルに 2 つの新しいレコードを追加します。テーブルは、シート 1 をここでは。
       '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 を含むレコードを追加すると、ブック内の書式が維持されます。行に追加される各レコードは、直前の行の書式を借用します。たとえば、列 B に追加される新しいフィールドではセル B1 は右揃えであるため右揃えでフォーマットされます。

セルまたはワークシート内のセルにレコードが追加されると、セルに格納されているデータはすべて上書きされることを注意してください。つまり、ワークシート内の行が下に移動されません"新しいレコードを追加するとします。ADO.NET を使用して新しいレコードを挿入する場合、ワークシート上のデータのレイアウトをデザインするときは、この点に留意してください。

ADO.NET を使用する方法の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

データベースに接続し、ADO.NET および Visual Basic .NET を使用してコマンドを実行する方法を301075

301216 Visual Basic .NET を使用して、データベースからデータセット オブジェクトを作成する方法

301248 Visual Basic .NET を使用して DataSet オブジェクトからデータベースを更新する方法

Excel データ ソースを Jet OLE DB プロバイダーを使用する方法の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

278973 ExcelADO は、ADO を使用して、Excel のブックでデータを読み書きする方法を示します

257819方法を Visual Basic または VBA からデータを Excel で ADO を使用するには

XML データ (Excel 2002 のみ)

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

Excel 2002 で XML を使用する方法の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

Visual Basic .NET を使用して XML データを Microsoft Excel 2002 に転送する方法を307021

288215 Microsoft Excel 2002 および XML

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

  1. サンプルが作成され、C:\Exceldata\ のフォルダーに名前に、Excel ブックを保存する新しいフォルダーを作成します。
  2. サンプルで使用する新しいブックを作成するのには次の手順に従います。
    1. Excel で新しいブックを開始します。
    2. 新しいブックの Sheet1 に次のように入力します。
      セル A1 と A2 のセルに[氏名][部署名]
    3. C:\Exceldata\Book7.xls としてブックを保存します。
  3. Visual Studio .NET を起動します。[ファイル] メニューで、[新規] をクリックし、[プロジェクト] をクリックします。[ Visual Basic プロジェクト] で、 Windows アプリケーションを選択します。デフォルトで Form1 が作成されます。
  4. Excel オブジェクト ライブラリへの参照を追加します。これを行うには、以下の手順を実行します。
    1. [プロジェクト] メニューの [参照の追加をクリックします。
    2. [ COM ] タブで、 Microsoft Excel 10.0 オブジェクト ライブラリを検索し、選択] をクリックします。

      注: されていない場合は、ダウンロードして、Microsoft Office XP プライマリ相互運用機能アセンブリ (Pia) をインストールすることをお勧めします。
      Office XP Pia の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

      328912 Microsoft Office XP プライマリ相互運用機能アセンブリ (Pia) は、ダウンロード可能な

    3. [ COM ] タブで、 Microsoft ActiveX データ オブジェクトの 2.7 ライブラリを見つけて、[選択] をクリックします。
    4. 選択を確定参照の追加] ダイアログ ボックスで[ok]をクリックします。選択したライブラリに対してラッパーを生成するためのプロンプトが表示されたら、[はい] をクリックします。
  5. コンボ ボックスコントロールと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("Orders", , 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 Orders")
    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 Employees", 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

    注: 既定のフォルダー (C:\Program ファイル Office) に Office をインストールしなかった場合は、Northwind.mdb のインストール パスに一致するコード サンプルではsNorthwindの定数を変更します。

  7. Form1.vb の先頭に次のコードを追加します。
    Imports Microsoft.Office.Interop
  8. ビルドし、サンプルを実行する f5 キーを押します。

関連情報

詳細については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料をご参照ください。

247412 Visual Basic から Excel にデータを転送する方法

プロパティ

文書番号:306022 - 最終更新日: 2017/02/01 - リビジョン: 2

フィードバック