IRONSOFTWAREHOME
他のコンポーネントと比較する

VB .NETで Excel ファイルを配列に読み込む: IronXLと Microsoft Interop

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

.NETでExcelデータを配列に読み込むには、ワークブックを読み込み、ワークシートを選択し、行と列を繰り返し処理して、各セル値を2次元配列に格納する必要があります。 IronXLを使用すると、Microsoft Officeをインストールせずに数行でこれを達成できます。NuGetパッケージをインストールし、Rowsコレクションをループして配列を埋めます。

無料トライアルを開始して、 IronXLがVisual StudioプロジェクトにおけるExcelの自動化をどのように簡素化するかを体験してください。

これらのソリューションをひと目で比較するとどう違うのか?

IronXLとMicrosoft Officeの相互運用性の比較 - .NET配列操作の機能比較
特徴IronXLMicrosoft Office Interop
オフィスへのインストールが必要ですなしはい
NuGetインストールはい、1つのパッケージですいいえ -- COM参照
サーバー/CI環境のサポートはい制限あり
COMオブジェクトのライフサイクル管理不要必須
対応フォーマットXLSX、XLS、CSV、TSV、JSONXLSX、XLS(Excelのみ)
型安全なAPIはい一部 - 遅れて到着するCOM
Linux / macOS のサポートはい(.NET 6以降)なし
例外処理スタイル標準 for .NET例外COM例外処理と手動クリーンアップ

VB .NETプロジェクトにIronXLをインストールするにはどうすればよいですか?

IronXLを任意 for .NETプロジェクトに追加する最も簡単な方法は、 NuGetパッケージマネージャーを使用することです。 Visual StudioでPackage Manager Consoleを開き、実行してください:

PM > Install-Package IronXL.Excel

または、 .NET CLI を使用してください。

dotnet add package IronXL.Excel

インストール後、あなたのVB.NETモジュールの先頭にImports IronXLを追加してください。 Officeのインストールは不要です。IronXLは独自の解析エンジンを通してExcelファイルの読み書きをすべて行います。

古いフレームワークを対象とするプロジェクトや、特定のバージョンへの固定が必要なプロジェクトの場合、 IronXLのNuGetページには公開されているすべてのリリースが掲載されています。 IronXLのドキュメントには、Visual Studio 2019、2022、および.NET CLIのインストールガイドが記載されています。

IronXLを使用してExcelデータを配列に読み込むには、開発者はどのようにすればよいですか?

IronXLは、ローカルにOfficeをインストールすることなく、ワークブックを開いたり、範囲を選択したり、セル値を反復処理したりするための、使いやすいAPIを提供します。 WorkBookオブジェクトを返します。

Imports IronXL

Module ReadExcelToArray
    Sub Main()
        ' Load the Excel workbook from a file path
        Dim workbook As WorkBook = WorkBook.Load("SalesData.xlsx")

        ' Access the first worksheet in the workbook
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Define the cell range to extract
        Dim dataRange As IronXL.Range = sheet.GetRange("A1:D5")

        ' Determine array dimensions from the range
        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim salesArray(rowCount - 1, colCount - 1) As String

        ' Populate the two-dimensional array from cell values
        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                salesArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Print each row to the console
        Console.WriteLine("Data loaded into array:")
        For i As Integer = 0 To rowCount - 1
            For j As Integer = 0 To colCount - 1
                Console.Write(salesArray(i, j) & vbTab)
            Next
            Console.WriteLine()
        Next
    End Sub
End Module

ワークブックオブジェクトとワークシートオブジェクトの理解

WorkBook.LoadはXLSX、XLS、CSV、およびTSVファイルをサポートします。 読み込み後、workbook.DefaultWorkSheetは最初のシートを返します。 workbook.WorkSheets(0)でインデックスでシートにアクセスすることもできます。

Columnsコレクションを公開します。 各cell.StringValueは基になるセルのタイプに関係なく表示文字列を返します。

セルに入力された値はどのように処理しますか?

IronXLのセルはStringValueとともに型付きプロパティを公開します。

  • cell.IntValue -- セルを整数として解析します
  • cell.DoubleValue -- セルをダブルとして解析します
  • cell.DateTimeValue -- 日付形式のセルを解析します
  • cell.IsFormula -- セルが式を含むかどうかを示します

金融データの場合、配列をcell.DoubleValueを直接割り当ててください。 これにより、後続の処理における文字列から数値への変換が回避されます。

Imports IronXL

Module ReadExcelToDoubleArray
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("Revenue.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet
        Dim dataRange As IronXL.Range = sheet.GetRange("B2:E10")

        Dim rowCount As Integer = dataRange.Rows.Count
        Dim colCount As Integer = dataRange.Columns.Count
        Dim revenueArray(rowCount - 1, colCount - 1) As Double

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In dataRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                revenueArray(rowIndex, colIndex) = cell.DoubleValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' Calculate column totals
        For j As Integer = 0 To colCount - 1
            Dim total As Double = 0
            For i As Integer = 0 To rowCount - 1
                total += revenueArray(i, j)
            Next
            Console.WriteLine($"Column {j + 1} total: {total:C}")
        Next
    End Sub
End Module

出力

VB .NET 配列にExcelファイルを読み込む: IronXL vs Microsoft Interop 比較: 画像1 - IronXL vs. Office ExcelのVB .NETで配列にExcelファイルを読み込む

このコード例は、IronXLの直感的なAPIを示しています。 RangeオブジェクトはExcelスプレッドシート内の特定のセル領域へのアクセスを提供します。 従来のVBAマクロとは異なり、この方法は完全に型安全であり、 .NETエコシステムに統合されています。

最初のステップ:
arrow pointer

従来のMicrosoft Officeの相互運用性に関するアプローチとは?

Microsoft Office Interopは、COMオートメーションを利用してExcelアプリケーションインスタンスに接続します。 Visual Studioでこれを設定するには、プロジェクトメニューに移動し、"参照の追加"を選択して、COMタブでMicrosoft Excelオブジェクトライブラリを検索します。 コードを実行するすべてのマシンに、ローカルのExcelがインストールされている必要があります。

Imports Microsoft.Office.Interop.Excel

Module InteropExcelArray
    Sub Main()
        Dim excelApp As New Application()
        Dim workbooks As Workbooks = excelApp.Workbooks
        Dim workbook As Workbook = なしthing
        Dim sheet As Worksheet = なしthing

        Try
            ' Suppress screen updates during processing
            excelApp.ScreenUpdating = False

            ' Open the workbook by full file path
            workbook = workbooks.Open("C:\Data\SalesData.xlsx")

            ' Reference the first worksheet
            sheet = CType(workbook.Sheets(1), Worksheet)

            ' Define a range and pull values into an object array
            Dim dataRange As Range = sheet.Range("A1", "D5")
            Dim values(,) As Object = CType(dataRange.Value, Object(,))

            ' COM arrays are 1-based, so enumerate from index 1
            Dim rows As Integer = values.GetUpperBound(0)
            Dim columns As Integer = values.GetUpperBound(1)

            For i As Integer = 1 To rows
                Dim line As String = ""
                For j As Integer = 1 To columns
                    line &= values(i, j).ToString() & vbTab
                Next
                Console.WriteLine(line)
            Next

        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)

        Finally
            ' Release COM objects to prevent orphaned Excel processes
            If sheet Isなしt なしthing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
            End If
            If workbook Isなしt なしthing Then
                workbook.Close(False)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
            End If
            excelApp.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
        End Try
    End Sub
End Module
C#

COMオブジェクト管理が重要な理由とは?

相互運用アプローチでは、COMオブジェクトのライフサイクル管理に細心の注意を払う必要がある。 Excelアプリケーションが返すすべてのオブジェクト(ワークブック、ワークシート、範囲、セルなど)には、参照カウント付きのCOMポインターが含まれています。 これらのオブジェクトそれぞれにEXCEL.EXEプロセスが実行されたままになります。

サーバー上では、放置されたプロセスが時間とともに蓄積され、最終的には利用可能なメモリやファイルハンドルを使い果たしてしまう。 上記のTry...Finallyパターンは最小限の安全なアプローチですが、多くのエンタープライズコードベースはネストされたオブジェクトグラフを処理するために専用のCOMクリーンアップユーティリティを追加します。

Interop配列のインデックス付け規則は、標準のVB .NET配列とは異なります。COMベースの配列はインデックス0ではなく1から始まります。つまり、行または列のループでは、この1のずれを考慮する必要があり、これは実行時エラーやデータ切り捨てバグの一般的な原因となります。

どちらのソリューションがより優れた開発者体験を提供するか?

これらの手法を実運用で評価する際、 IronXLが最適なソリューションとなる要因はいくつかあります。

導入の簡便性: IronXLは単一のNuGetパッケージでインストールできますが、Interopは複雑な環境設定が必要です。 これは、ユーザーセッションが存在しないビルドサーバーまたはクラウド関数上で、プログラムがXLSXファイルを処理する必要がある場合に重要になります。

コードの保守性: IronXLを通してデータテーブルを読み込むことで、コードを短く読みやすく保つことができます。 行数と列数は、第一級プロパティとして利用可能です。 Interopを使用すると、1インデックスのCOM配列の上限を計算し、遅延バインドされたObject値を手動でキャストします。

フォーマットの柔軟性: IronXLは、XLSXなどの標準的なExcelワークブック形式に加えて、CSV解析をネイティブにサポートしており、テストデータが複数の形式で届く場合に便利です。 このライブラリは、新しいワークブックファイルを作成したり、セルに値を書き込んだりすることも同様に簡単に行えます。 完全なリストについては、 IronXLフォーマットガイドを参照してください。

エラー処理: IronXLには標準的な.NET例外パターンが適用されるため、エラー回復が容易です。 COMベースの例外処理には追加の処理ロジックが必要であり、適切に管理されないとExcelインスタンスが実行状態のままになる可能性がある。

クロスプラットフォーム対応: IronXLは、 .NET 6以降を介してLinuxおよびmacOS上で動作します。 相互運用機能はWin32 COMサブシステムに依存するため、Windows専用です。

.NETにおける配列読み取りのパフォーマンスとメンテナンスのトレードオフ
基準IronXLMicrosoft Interop
基本的な配列読み取りのためのコード行数約2040歳以上
手動のCOMクリーンアップが必要なしはい
Excelがインストールされていなくても動作しますはいなし
Docker / CIパイプラインで実行されますはいなし
配列のインデックス付け規則0ベース(.NET Standard)1ベース(COM規格)

.NETで動的なExcel範囲を扱うにはどうすればよいですか?

生産管理用のスプレッドシートは、行数が固定されていることはほとんどありません。 IronXLは各ワークシートにUsedRangeプロパティを提供し、すべての非空セルの境界矩形を返します。 ハードコードされた範囲文字列の代わりにこれを使用できます。

Imports IronXL

Module DynamicRangeExample
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("DynamicData.xlsx")
        Dim sheet As WorkSheet = workbook.DefaultWorkSheet

        ' Get the bounding range of all populated cells
        Dim usedRange As IronXL.Range = sheet.UsedRange

        Dim rowCount As Integer = usedRange.Rows.Count
        Dim colCount As Integer = usedRange.Columns.Count
        Dim dynamicArray(rowCount - 1, colCount - 1) As String

        Dim rowIndex As Integer = 0
        For Each row As RangeRow In usedRange.Rows
            Dim colIndex As Integer = 0
            For Each cell As Cell In row
                dynamicArray(rowIndex, colIndex) = cell.StringValue
                colIndex += 1
            Next
            rowIndex += 1
        Next

        Console.WriteLine($"Loaded {rowCount} rows x {colCount} columns from UsedRange.")
    End Sub
End Module

配列データを読み込んだ後、どのようにフィルタリングおよび検証しますか?

配列にデータが格納された後、一般的な後処理手順には以下が含まれます。

-ヘッダー行をスキップする:列ヘッダーを省略するために、表示ループをインデックス0ではなく1から開始します。

  • 空白のトリム: .Trim()を呼び出してスプレッドシートからコピーされた先頭と末尾のスペースを削除します。
  • null セルの処理: IronXL は空白セルに対して空の文字列を返すため、ほとんどの場合、null チェックは不要です。 -数値範囲の検証: double 型の値を読み込んだ後、保存する前に範囲チェックを適用して、-1 や 9999 などのプレースホルダー値を含むセルを検出します。

大規模なデータセットの場合は、生の二次元配列の代わりにList(Of T)または強く型付けされたクラスを使用することを考慮してください。 データを型付きオブジェクトに読み込むことで、後続のコードの可読性とテスト性が向上します。IronXL IronXLモデルリファレンスには、利用可能なすべてのセルプロパティとワークシートメソッドが記載されています。

.NETの配列をExcelにエクスポートするにはどうすればよいですか?

IronXLは、配列データをワークシートに書き戻す際に、読み取りに使用するのと同じAPIをサポートしています。 これは、メモリ内でデータを変換し、その結果を新しいExcelファイルとして保存する必要がある場合に役立ちます。

Imports IronXL

Module WriteArrayToExcel
    Sub Main()
        ' Create a new workbook and worksheet
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Results")

        Dim outputArray(,) As String = {
            {"Region", "Q1", "Q2", "Q3"},
            {"なしrth", "12500", "14200", "15800"},
            {"South", "9800", "10500", "11300"},
            {"East", "8200", "9100", "9900"}
        }

        ' Write the array contents to the worksheet cell by cell
        For i As Integer = 0 To outputArray.GetUpperBound(0)
            For j As Integer = 0 To outputArray.GetUpperBound(1)
                Dim cellAddress As String = IronXL.ExcelAddress.ToAddress(i, j)
                sheet(cellAddress).Value = outputArray(i, j)
            Next
        Next

        workbook.SaveAs("Output.xlsx")
        Console.WriteLine("Workbook saved as Output.xlsx")
    End Sub
End Module
C#

ExcelAddress.ToAddress(row, column)ヘルパーはゼロベースの整数座標をA1表記の文字列に変換します。 これにより、書き込みループがクリーンに保たれ、セルアドレスを手動で計算する必要がなくなります。 数式の挿入やスタイルの適用など、その他のパタ​​ーンについては、 IronXLのライティングチュートリアルを参照してください。

複数のワークシートを別々の配列に読み込むにはどうすればよいですか?

ワークブックによっては、複数のシートにデータが保存されるものもあります。例えば、月ごと、地域ごとに1つのシートが保存されるといった具合です。 IronXLはworkbook.WorkSheetsを通じてすべてのシートを公開しており、それぞれのシートを自分の配列にロードするために反復できます。

Imports IronXL

Module MultiSheetArrayLoader
    Sub Main()
        Dim workbook As WorkBook = WorkBook.Load("AnnualReport.xlsx")

        For Each sheet As WorkSheet In workbook.WorkSheets
            Console.WriteLine($"Loading sheet: {sheet.Name}")

            Dim dataRange As IronXL.Range = sheet.UsedRange
            Dim rowCount As Integer = dataRange.Rows.Count
            Dim colCount As Integer = dataRange.Columns.Count
            Dim sheetArray(rowCount - 1, colCount - 1) As String

            Dim rowIndex As Integer = 0
            For Each row As RangeRow In dataRange.Rows
                Dim colIndex As Integer = 0
                For Each cell As Cell In row
                    sheetArray(rowIndex, colIndex) = cell.StringValue
                    colIndex += 1
                Next
                rowIndex += 1
            Next

            Console.WriteLine($"  Loaded {rowCount} rows x {colCount} columns.")
        Next
    End Sub
End Module

シートナビゲーションの理解

For Eachとインデックスでのアクセスの両方をサポートします。 プログラムでシートを特定するためにsheet.Nameを使用し、既知のシート名に基づいてロジックを分岐します。 IronXLのワークシートガイドでは、範囲選択、名前付き範囲、および動的範囲検出について詳しく解説しています。

数十枚のシートを含むワークブックの場合は、読み込む前にシート名でフィルタリングして、無関係なシートの処理やメモリの無駄遣いを回避してください。

開発者は相互運用配列フォーマットについて何を知っておくべきか?

InteropアプローチはCOMの1ベースインデックスを使用してObject(,)配列としてセルデータを返します。 最初の行の最初の要素はvalues(0, 0)にはありません。 これは、オフバイワンエラーの頻繁な原因となる。

追加の問題はnull処理です:Interopは空のセルになしthingを返します。 null参照でNullReferenceExceptionがスローされます。すべてのセルアクセスの周りにnullガードを追加する必要があります。

If values(i, j) Isなしt なしthing Then
    line &= values(i, j).ToString() & vbTab
End If
C#

IronXLは、空白セルに対して空の文字列を返すことでこの問題を解決します。つまり、ループコードは追加のガードなしで動作します。

Interopで使用されるExcelオブジェクトモデルに関する信頼できる情報については、 Microsoft Excel VBAリファレンスおよびMSDN Office Interopドキュメントを参照してください。

次のステップは何ですか?

Excelデータを配列に読み込むことは、 .NETスプレッドシートで最も一般的なタスクの1つであり、 IronXLを使えばその実装が簡単になります。 次のステップに進むには:

  • IronXLをダウンロード: NuGet(Install-Package IronXL.Excel)を経由でインストールし、入門ガイドに従ってください。 -フォーマットのサポートを確認してください: IronXLは、XLSX、XLS、CSV、TSV、およびJSONの読み書きに対応しています。 詳細については、対応フォーマットのページをご覧ください。 -高度な機能をお試しください:範囲の並べ替え、数式の適用、セルスタイルの設定、グラフの生成など、すべてExcelをインストールせずに実行できます。 機能一覧については、 IronXLの機能概要をご覧ください。 -コード例を参照するIronXLのコード例ライブラリには、一般的なスプレッドシート作業の数十種類に対応したコピー&ペースト可能なコードスニペットが用意されています。 -ライセンスの見直し:本番環境への導入向けに、 IronXLのライセンスは開発者、チーム、OEMの各ティアを提供しています。

VB .NET 配列にExcelファイルを読み込む: IronXL vs Microsoft Interop 比較: 画像2 - IronXL出力

IronXLとMicrosoft Office InteropはどちらもExcelデータを配列に読み込むことができますが、 IronXLはOfficeに依存しないアーキテクチャ、より洗練されたAPI、そして柔軟なデプロイメントオプションにより、優れた開発者エクスペリエンスを提供します。 このライブラリは、COMオブジェクト管理やシステム依存関係といった一般的な問題点を解消しつつ、スプレッドシート自動化のための高度な機能へのアクセスを提供します。

IronXLのドキュメントハブでは、サンプルプロジェクト、リソース、ドキュメントを通して、 IronXLの全機能を詳しく知ることができます。 Enterpriseアプリケーションの場合、 IronXLのライセンスオプションは、あらゆるプロジェクト規模に対応できる柔軟な条件を提供します。

ご注意: Microsoft Office Interopは、各所有者の登録商標です。 このサイトは、マイクロソフトと提携しているわけでも、マイクロソフトが推奨しているわけでも、マイクロソフトがスポンサーしているわけでもありません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。