VB .NETで Excel ファイルを配列に読み込む: IronXLと Microsoft Interop
.NETでExcelデータを配列に読み込むには、ワークブックを読み込み、ワークシートを選択し、行と列を繰り返し処理して、各セル値を2次元配列に格納する必要があります。 IronXL を使用すると、Microsoft Office をインストールすることなく、数行でこれを実現できます。NuGet パッケージをインストールし、WorkBook.Load を呼び出し、Range を取得し、その Rows コレクションをループして配列にデータを入力します。
無料トライアルを開始して、 IronXLがVisual StudioプロジェクトにおけるExcelの自動化をどのように簡素化するかを体験してください。
これらのソリューションをひと目で比較するとどう違うのか?
| 特徴 | IronXL | Microsoft Office Interop |
|---|---|---|
| オフィスへのインストールが必要です | なし | はい |
| NuGetインストール | はい、1つのパッケージです | いいえ -- COM参照 |
| サーバー/CI環境のサポート | はい | 制限あり |
| COMオブジェクトのライフサイクル管理 | 不要 | 必須 |
| 対応フォーマット | XLSX、XLS、CSV、TSV、JSON | XLSX、XLS(Excelのみ) |
| 型安全なAPI | はい | 一部 - 遅れて到着するCOM |
| Linux / macOS のサポート | はい(.NET 6以降) | なし |
| 例外処理スタイル | 標準 for .NET例外 | COM例外処理と手動クリーンアップ |
VB .NETプロジェクトにIronXLをインストールするにはどうすればよいですか?
IronXLを任意 for .NETプロジェクトに追加する最も簡単な方法は、 NuGetパッケージマネージャーを使用することです。 Visual StudioでPackage Manager Consoleを開き、実行してください:
Install-Package IronXL.Excel
Install-Package IronXL.Excel
または、 .NET CLI を使用してください。
dotnet add package IronXL.Excel
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.Load メソッドはファイル パスを受け取り、すべてのワークシートを公開する 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
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
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.GetWorkSheet("Sheet1") を使用して名前でアクセスすることも、workbook.WorkSheets(0) を使用してインデックスでアクセスすることもできます。
GetRange("A1:D5") 呼び出しは、Rows および Columns コレクションを公開する IronXL.Range を返します。 各 RangeRow は Cell オブジェクトを反復処理し、基となるセルタイプに関係なく表示文字列を返します。
セルに入力された値はどのように処理しますか?
IronXLセルは、StringValue と共に型付きプロパティを公開します。
cell.IntValue-- セルを整数として解析しますcell.DoubleValue-- セルをdouble型として解析しますcell.DateTimeValue-- 日付形式のセルを解析しますcell.IsFormula-- セルに数式が含まれているかどうかを示します
財務データの場合、配列を Double として宣言し、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
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
IRON VB CONVERTER ERROR developers@ironsoftware.com
出力

このコード例は、IronXLの直感的なAPIを示しています。 WorkBook.Load メソッドは、指定したフォルダーから Excel ファイルを直接開きます。一方、Range オブジェクトは、Excel スプレッドシート内の特定のセル領域へのアクセスを提供します。 従来のVBAマクロとは異なり、この方法は完全に型安全であり、 .NETエコシステムに統合されています。
従来の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 = Nothing
Dim sheet As Worksheet = Nothing
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 IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
End If
If workbook IsNot Nothing 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
Imports Microsoft.Office.Interop.Excel
Module InteropExcelArray
Sub Main()
Dim excelApp As New Application()
Dim workbooks As Workbooks = excelApp.Workbooks
Dim workbook As Workbook = Nothing
Dim sheet As Worksheet = Nothing
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 IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
End If
If workbook IsNot Nothing 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
Imports Microsoft.Office.Interop.Excel
Module InteropExcelArray
Sub Main()
Dim excelApp As New Application()
Dim workbooks As Workbooks = excelApp.Workbooks
Dim workbook As Workbook = Nothing
Dim sheet As Worksheet = Nothing
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 IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet)
End If
If workbook IsNot Nothing 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
COMオブジェクト管理が重要な理由とは?
相互運用アプローチでは、COMオブジェクトのライフサイクル管理に細心の注意を払う必要がある。 Excelアプリケーションが返すすべてのオブジェクト(ワークブック、ワークシート、範囲、セルなど)には、参照カウント付きのCOMポインターが含まれています。 これらの各オブジェクトに対して Marshal.ReleaseComObject を呼び出さなかった場合、EXCEL.EXE プロセスがバックグラウンドで静かに実行されたままになります。
サーバー上では、放置されたプロセスが時間とともに蓄積され、最終的には利用可能なメモリやファイルハンドルを使い果たしてしまう。 上記の Try...Finally パターンは最小限の安全なアプローチですが、多くのEnterpriseコードベースでは、ネストされたオブジェクト グラフを処理するために専用の 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専用です。
| 基準 | IronXL | Microsoft Interop |
|---|---|---|
| 基本的な配列読み取りのためのコード行数 | 約20 | 40歳以上 |
| 手動の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
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
IRON VB CONVERTER ERROR developers@ironsoftware.com
配列データを読み込んだ後、どのようにフィルタリングおよび検証しますか?
配列にデータが格納された後、一般的な後処理手順には以下が含まれます。
-ヘッダー行をスキップする:列ヘッダーを省略するために、表示ループをインデックス0ではなく1から開始します。
-空白文字の削除: スプレッドシートからコピーされた先頭と末尾の空白文字を削除するには、cell.StringValue に対して .Trim() を呼び出します。
- null セルの処理: IronXL は空白セルに対して空の文字列を返すため、ほとんどの場合、null チェックは不要です。 -数値範囲の検証: double 型の値を読み込んだ後、保存する前に範囲チェックを適用して、-1 や 9999 などのプレースホルダー値を含むセルを検出します。
より大きなデータセットの場合は、生の2次元配列の代わりに、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"},
{"North", "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
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"},
{"North", "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
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"},
{"North", "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
ExcelAddress.ToAddress(row, column) ヘルパーは、0 ベースの整数座標を 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
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
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
シートナビゲーションの理解
workbook.WorkSheets コレクションはゼロインデックスであり、For Each とインデックスアクセスの両方をサポートしています。 sheet.Name を使用して、プログラムでシートを識別し、既知のシート名に基づいてロジックを分岐させます。 IronXLのワークシートガイドでは、範囲選択、名前付き範囲、および動的範囲検出について詳しく解説しています。
数十枚のシートを含むワークブックの場合は、読み込む前にシート名でフィルタリングして、無関係なシートの処理やメモリの無駄遣いを回避してください。
開発者は相互運用配列フォーマットについて何を知っておくべきか?
Interop アプローチでは、COM の 1 ベースのインデックスを使用して、セル データを Object(,) 配列として返します。 最初の行の最初の要素は values(1, 1) にあり、values(0, 0) ではありません。 これは、オフバイワンエラーの頻繁な原因となる。
もう一つの懸念事項は null の処理です。Interop は空のセルに対して Nothing を返します。 null 参照に対して .ToString() を呼び出すと、実行時に NullReferenceException がスローされます。すべてのセルアクセスに対して null ガードを追加する必要があります。
If values(i, j) IsNot Nothing Then
line &= values(i, j).ToString() & vbTab
End If
If values(i, j) IsNot Nothing Then
line &= values(i, j).ToString() & vbTab
End If
If values(i, j) IsNot Nothing Then
line &= values(i, j).ToString() & vbTab
End If
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の各ティアを提供しています。

IronXLとMicrosoft Office InteropはどちらもExcelデータを配列に読み込むことができますが、 IronXLはOfficeに依存しないアーキテクチャ、より洗練されたAPI、そして柔軟なデプロイメントオプションにより、優れた開発者エクスペリエンスを提供します。 このライブラリは、COMオブジェクト管理やシステム依存関係といった一般的な問題点を解消しつつ、スプレッドシート自動化のための高度な機能へのアクセスを提供します。
IronXLのドキュメントハブでは、サンプルプロジェクト、リソース、ドキュメントを通して、 IronXLの全機能を詳しく知ることができます。 Enterpriseアプリケーションの場合、 IronXLのライセンスオプションは、あらゆるプロジェクト規模に対応できる柔軟な条件を提供します。
よくある質問
VB .NETを使用して Excel ファイルを配列に読み込む最適な方法は何ですか?
VB .NETでExcelファイルを配列に読み込むには、 IronXLまたはMicrosoft Office Interopを使用すると効果的です。IronXLはシンプルで効率的なアプローチを提供し、Microsoft Excelのインストールを必要とせず、コードの複雑さを軽減します。
Excel ファイルの読み取りに関して、 IronXLと Microsoft Office Interop を比較するとどうなりますか?
IronXLは、Microsoft Office Interopと比較して、Excelファイルを配列に読み込むためのより効率的で高速な方法を提供します。サーバーにExcelをインストールする必要がなく、オーバーヘッドを抑えながらExcelファイルの操作を行えます。
Microsoft Excel をインストールせずに Excel データを操作できますか?
はい、 IronXLを使用すると、Microsoft ExcelをインストールしなくてもExcelデータを操作できます。そのため、Excelのインストールが難しいサーバー環境に最適です。
VB .NETでの Excel 操作にIronXL の使用を検討する必要があるのはなぜですか?
IronXLは、様々なExcelファイル形式を扱う直感的なAPIを提供することで、Excel操作を簡素化します。特にMicrosoft Excelをインストールできない環境において、パフォーマンスの向上と導入の容易化を実現します。
IronXL は、VB .NETで大規模な Excel データ セットを処理するのに適していますか?
はい、 IronXLはパフォーマンスが最適化されており、大規模な Excel データ セットを効率的に処理して、迅速なデータ抽出と操作を実現します。
VB .NETを使用して Excel ファイルを配列に読み込むためのコード例は何ですか?
このガイドでは、 IronXLと Microsoft Office Interop の両方の実用的なコード例を提供し、VB .NETで Excel ファイルを配列に効率的に読み込む方法を示します。
IronXLは異なるExcelファイル形式をサポートしていますか?
IronXL は、XLSX、XLS、CSV など、幅広い Excel ファイル形式をサポートしており、さまざまなデータ処理ニーズに柔軟に対応できます。
Microsoft Office Interop ではなくIronXLを使用する利点は何ですか?
IronXLは使いやすく、Excelのインストールが不要で、パフォーマンスも向上します。コードを簡素化し、Microsoft Office InteropにおけるCOMの相互作用に関連する潜在的なエラーを削減します。
IronXL は、Microsoft Interop とはどのように異なる方法で 2 次元配列を処理しますか?
IronXL は、Excel データを 2 次元配列に変換する直接的な方法を提供し、Microsoft Interop で必要なより複雑なセットアップに比べて、より効率的で簡単なアプローチを保証します。
Excel ファイルを配列に読み込む場合、どのようなベスト プラクティスが推奨されますか?
ベスト プラクティスには、使いやすさとパフォーマンスに優れたIronXLなどの環境に適したツールを選択することや、メモリと処理能力を効果的に管理するための効率的なコード構造を確保することが含まれます。



