- ベストアンサー
VB.NETの配列にExcelから読み込んできたデータを格納したい
今回もお世話になります。 VisualBasic.NETでプログラムを作っています。 Excelからデータを読み込んで配列に格納したいのですが、どうしてもうまくいきません。 原因とその解決法を教えていただけないでしょうか? また、他の解決法や参考にできるサイトがあれば教えていただきたいです。 Excel,VB.NETともに2003を使っています。 以下エラー内容 -------------------- 'System.NullReferenceException' のハンドルされていない例外が 重度障害者用入力装置自動選択システム.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 -------------------- 以下ソースです -------------------- Option Explicit On Imports Microsoft.Office.Interop Public Class Form2 Inherits System.Windows.Forms.Form Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xl As Object 'Excel.Application Dim wb As Object 'Excel.Workbook Dim ws As Object 'Excel.Worksheet xl = CreateObject("Excel.Application") wb = xl.Workbooks.Open("C:\abc.xls") xl.Visible = True ws = wb.Worksheets("Sheet1") 配列(1, 1, 1) = xl.Cells(2, 1).Value ←ここでエラーが出る 配列(1, 1, 2) = xl.Cells(2, 2).Value 配列(1, 1, 3) = xl.Cells(2, 3).Value 状態表示テキストボックス.Text = "配列(1, 1, 1) = " & 配列(1, 1, 1) & "と" _ & "配列(1, 1, 2) = " & 配列(1, 1, 2) & "と" _ & "配列(1, 1, 3) = " & 配列(1, 1, 3) xl = Nothing wb = Nothing ws = Nothing End Sub End Class -------------------- 回答よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは ********引用******* の部分で「型excel.Applicationが定義されていません」というエラーが出てしまいます。 ******************* 私の場合、参照設定が、上手くいっていないと このエラーが出るみたいです。 プロジェクトのプロパティを見て、 参照設定を見て、エクセルのオブジェクトライブラリーが追加されているか?? 確認してみてください。
その他の回答 (5)
- Kuppycat
- ベストアンサー率50% (109/216)
Private xlApp As Excel.Application ↓ Private xlApp As Excel.ApplicationClass に変えてみてください。 COMを追加した際、参照設定に追加されるライブラリは ・Excel ・Microsoft.Office.Core ・stdole ・VBIDE のようです。
お礼
ありがとうございます! 結局csvを読み込んで配列に格納する方法をとることになりました。 この方法でも少し無理はあるのですが… お礼が遅くなってしまい、もうしわけありませんでした。 また回答よろしくお願いいたします!
補足
Private xlApp As Excel.Application ↓ Private xlApp As Excel.ApplicationClass に変えてみてもエラー内容が「型Excel.ApplicationClassが定義されていません」に変わるだけでした。 参照設定に ・Excel ・Microsoft.Office.Core ・stdole ・VBIDE が追加されているので参照はうまくいっているように思えるのですが… 現在はcsvに変換してから処理する方法を考慮中です。
- tom11
- ベストアンサー率53% (134/251)
こんにちは エクセルのデータをA1:A10に以下のように設定して aa bb cccc ddd eee fff gggg hhhhhhh ii jjjjjjjj 以下の様なコードを実行すると Public Class Form1 Private xlApp As excel.Application Private xlBook As excel.Workbook Private xlSheet1 As excel.Worksheet Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer = 0 xlApp = CreateObject("Excel.Application") xlBook = xlApp.Workbooks.Open("C:\test1.xls") xlSheet1 = xlBook.Worksheets("Sheet1") For i = 1 To 11 Debug.WriteLine(i.ToString & xlSheet1.Cells(i, 1).Value) Next End Sub End Class 実行結果 1aa 2bb 3cccc 4ddd 5eee 6fff 7gggg 8hhhhhhh 9ii 10jjjjjjjj 11 になりました。 参考まで
補足
private xlApp As excel.Application の部分で「型excel.Applicationが定義されていません」というエラーが出てしまいます。 モジュールの一番上に Option Explicit On Imports Microsoft.Office.Interop を追加し、 ↓を参考にして「Microsoft Excel 11.0 ObjectLibrary」を参照に追加したのですが、どうもうまくいってないようです… http://support.microsoft.com/default.aspx?scid=kb;ja;301982
- Hayashi_Trek
- ベストアンサー率44% (366/818)
>'System.NullReferenceException' のハンドルされていない例外が > 重度障害者用入力装置自動選択システム.exe で発生しました。 このエラーがでるということは、 ・[C:\abc.xls]Sheet1!A2が空になっている。 ・配列が宣言されていない。 のいずれかだと思います。 配列のデータ型をObject型にしてNullも代入可能にしたらどうでしょうか?
お礼
ありがとうございます! 結局csvを読み込んで配列に格納する方法をとることになりました。 この方法でも少し無理はあるのですが… お礼が遅くなってしまい、もうしわけありませんでした。 また回答よろしくお願いいたします!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
私も、 ws.Cells(2,1).value だと思います。 >オブジェクト参照がオブジェクト インスタンスに設定されていません。 ws がちゃんと設定されているか調べてみたらどうでしょう? 例えばws.Name が"Sheet1"になっていますか?
お礼
ありがとうございます! 結局csvを読み込んで配列に格納する方法をとることになりました。 この方法でも少し無理はあるのですが… お礼が遅くなってしまい、もうしわけありませんでした。 また回答よろしくお願いいたします!
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 >配列(1, 1, 1) = xl.Cells(2, 1).Value ←ここでエラーが出る xlだと、どのシートのデータか解らないので、 ws.Cells(2,1).Valueになるような気がします。
補足
回答ありがとうございます。 xlをwsにした場合、以下のようなエラーが出てしまいます。 'System.NullReferenceException' のハンドルされていない例外が 重度障害者用入力装置自動選択システム.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 xl.wb.ws.Cells(2, 1).Valueにした場合と xl.wb.Cells(2, 1).Valueにした場合は 'System.MissingMemberException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : 型 'ApplicationClass' でパブリック メンバ 'wb' が見つかりません。 というエラーが出て、 xl.ws.Cells(2, 1).Valueにした場合は 'System.MissingMemberException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : 型 'ApplicationClass' でパブリック メンバ 'ws' が見つかりません。 というエラーが出てしまいます… 解決法はないでしょうか…?
お礼
ありがとうございます! 結局csvを読み込んで配列に格納する方法をとることになりました。 この方法でも少し無理はあるのですが… お礼が遅くなってしまい、もうしわけありませんでした。 また回答よろしくお願いいたします!