Visual Basic .NET から Excel を自動化して、配列を使用して範囲内のデータを入力または取得する方法

概要

この記事では、Microsoft Excel を自動化する方法と、複数のセル範囲に値の配列を読み込む方法について説明します。 また、この記事では、オートメーションを使用して、複数のセル範囲を配列として取得する方法についても説明します。

詳細

複数のセル範囲にセルを1つずつ入力せずに値を設定するには、Range オブジェクトの Value プロパティを2次元配列に設定します。 同様に、Value プロパティを使用して、複数のセルに対して2次元配列の値を取得できます。 次の手順では、2次元配列を使用してデータを設定および取得するためのプロセスを示します。

Microsoft Excel のオートメーションクライアントを構築する

  1. Microsoft Visual Studio .NET を起動します。

  2. [ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。 Visual Basic プロジェクトの種類から [Windows アプリケーション] を選択します。 既定では、Form1 が作成されます。

  3. Microsoft Excel オブジェクトライブラリへの参照を追加します。 これを行うには、次の手順を実行します。

    1. [ プロジェクト] メニューの [ 参照の追加] をクリックします。
    2. [COM] タブで、[Microsoft Excel オブジェクトライブラリ] を見つけ、[選択] をクリックします。

    メモMicrosoft Office 2007 および Microsoft Office 2003 には、プライマリ相互運用機能アセンブリ (Pia) が含まれています。 Microsoft Office XP には Pia は含まれていませんが、ダウンロードできます。

  4. [参照の追加] ダイアログボックスで [OK] をクリックして、選択内容を確定します。 選択したライブラリのラッパーを生成するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。

  5. [表示] メニューの [ツールボックス] を選択して、ツールボックスを表示します。 Form1 に2つのボタンとチェックボックスを追加します。

  6. チェックボックスの "Name/名前" プロパティを、FillWithStrings に設定します。

  7. [Button1] をダブルクリックします。 フォームの [コード] ウィンドウが表示されます。

  8. 次のものを Form1 の先頭に追加します。

    Imports Microsoft.Office.Interop
    
    
  9. [コード] ウィンドウで、次のコードを置き換えます。

     Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    End Sub
    

     'Keep the application object and the workbook object global, so you can  
     'retrieve the data in Button2_Click that was set in Button1_Click.
     Dim objApp As Excel.Application
     Dim objBook As Excel._Workbook
    
    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
         Dim objBooks As Excel.Workbooks
         Dim objSheets As Excel.Sheets
         Dim objSheet As Excel._Worksheet
         Dim range As Excel.Range
    
    ' Create a new instance of Excel and start a new workbook.
         objApp = New Excel.Application()
         objBooks = objApp.Workbooks
         objBook = objBooks.Add
         objSheets = objBook.Worksheets
         objSheet = objSheets(1)
    
    'Get the range where the starting cell has the address
         'm_sStartingCell and its dimensions are m_iNumRows x m_iNumCols.
         range = objSheet.Range("A1", Reflection.Missing.Value)
         range = range.Resize(5, 5)
    
    If (Me.FillWithStrings.Checked = False) Then
             'Create an array.
             Dim saRet(5, 5) As Double
    
    'Fill the array.
             Dim iRow As Long
             Dim iCol As Long
             For iRow = 0 To 5
                 For iCol = 0 To 5
    
    'Put a counter in the cell.
                     saRet(iRow, iCol) = iRow * iCol
                 Next iCol
             Next iRow
    
    'Set the range value to the array.
             range.Value = saRet
    
    Else
             'Create an array.
             Dim saRet(5, 5) As String
    
    'Fill the array.
             Dim iRow As Long
             Dim iCol As Long
             For iRow = 0 To 5
                 For iCol = 0 To 5
    
    'Put the row and column address in the cell.
                     saRet(iRow, iCol) = iRow.ToString() + "|" + iCol.ToString()
                 Next iCol
             Next iRow
    
    'Set the range value to the array.
             range.Value = saRet
         End If
    
    'Return control of Excel to the user.
         objApp.Visible = True
         objApp.UserControl = True
    
    'Clean up a little.
         range = Nothing
         objSheet = Nothing
         objSheets = Nothing
         objBooks = Nothing
     End Sub
    
    
  10. Form1 のデザインビューに戻り、[Button2] をダブルクリックします。

  11. [コード] ウィンドウで、次のコードを置き換えます。

    Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
    
    End Sub
    

    Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
        Dim objSheets As Excel.Sheets
        Dim objSheet As Excel._Worksheet
        Dim range As Excel.Range
    
    'Get a reference to the first sheet of the workbook.
        On Error Goto ExcelNotRunning
        objSheets = objBook.Worksheets
        objSheet = objSheets(1)
    
    ExcelNotRunning:
        If (Not (Err.Number = 0)) Then
            MessageBox.Show("Cannot find the Excel workbook.  Try clicking Button1 to " + _
            "create an Excel workbook with data before running Button2.", _
            "Missing Workbook?")
    
    'We cannot automate Excel if we cannot find the data we created, 
            'so leave the subroutine.
            Exit Sub
        End If
    
    'Get a range of data.
        range = objSheet.Range("A1", "E5")
    
    'Retrieve the data from the range.
        Dim saRet(,) As Object
        saRet = range.Value
    
    'Determine the dimensions of the array.
        Dim iRows As Long
        Dim iCols As Long
        iRows = saRet.GetUpperBound(0)
        iCols = saRet.GetUpperBound(1)
    
    'Build a string that contains the data of the array.
        Dim valueString As String
        valueString = "Array Data" + vbCrLf
    
    Dim rowCounter As Long
        Dim colCounter As Long
        For rowCounter = 1 To iRows
            For colCounter = 1 To iCols
    
    'Write the next value into the string.
                valueString = String.Concat(valueString, _
                    saRet(rowCounter, colCounter).ToString() + ", ")
    
    Next colCounter
    
    'Write in a new line.
            valueString = String.Concat(valueString, vbCrLf)
        Next rowCounter
    
    'Report the value of the array.
        MessageBox.Show(valueString, "Array Values")
    
    'Clean up a little.
        range = Nothing
        objSheet = Nothing
        objSheets = Nothing
    End Sub
    
    

オートメーションクライアントをテストする

  1. F5 キーを押して、サンプルプログラムをビルドして実行します。
  2. [Button1] をクリックします。 Microsoft Excel が新しいブックで開始され、1番目のワークシートのセル A1: E5 に配列から数値データが設定されます。
  3. [Button2] をクリックします。 プログラムは、セル範囲 A1: E5 のデータを新しい配列に取得し、結果をメッセージボックスに表示します。
  4. [FillWithStrings] を選択し、[Button1] をクリックしてセル A1: E5 に文字列データを入力します。

References

以前のバージョンの Visual Studio を使用して Excel データを設定および取得するための配列の使用の詳細については、以下の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。

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