質問
VB.NETの配列にExcelから読み込んできたデータを格納したい
- 投稿日時:2006/09/11 12:47
今回もお世話になります。
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件)
- 最新から表示
- 回答順に表示
- ベストアンサーのみ表示
No.6
- 回答日時:2006/09/12 11:23
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に変換してから処理する方法を考慮中です。
No.5ベストアンサー20pt
- 回答日時:2006/09/12 11:06
こんにちは
********引用*******
の部分で「型excel.Applicationが定義されていません」というエラーが出てしまいます。
*******************
私の場合、参照設定が、上手くいっていないと
このエラーが出るみたいです。
プロジェクトのプロパティを見て、
参照設定を見て、エクセルのオブジェクトライブラリーが追加されているか??
確認してみてください。
この回答へのお礼
ありがとうございます!
結局csvを読み込んで配列に格納する方法をとることになりました。
この方法でも少し無理はあるのですが…
お礼が遅くなってしまい、もうしわけありませんでした。
また回答よろしくお願いいたします!
No.4
- 回答日時:2006/09/12 08:32
こんにちは
エクセルのデータを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=k …
- 質問者のみ
- この回答にお礼をつける
No.3
- 回答日時:2006/09/11 20:05
>'System.NullReferenceException' のハンドルされていない例外が
> 重度障害者用入力装置自動選択システム.exe で発生しました。
このエラーがでるということは、
・[C:\abc.xls]Sheet1!A2が空になっている。
・配列が宣言されていない。
のいずれかだと思います。
配列のデータ型をObject型にしてNullも代入可能にしたらどうでしょうか?
この回答へのお礼
ありがとうございます!
結局csvを読み込んで配列に格納する方法をとることになりました。
この方法でも少し無理はあるのですが…
お礼が遅くなってしまい、もうしわけありませんでした。
また回答よろしくお願いいたします!
No.2ベストアンサー10pt
- 回答日時:2006/09/11 20:00
私も、
ws.Cells(2,1).value
だと思います。
>オブジェクト参照がオブジェクト インスタンスに設定されていません。
ws がちゃんと設定されているか調べてみたらどうでしょう?
例えばws.Name が"Sheet1"になっていますか?
この回答へのお礼
ありがとうございます!
結局csvを読み込んで配列に格納する方法をとることになりました。
この方法でも少し無理はあるのですが…
お礼が遅くなってしまい、もうしわけありませんでした。
また回答よろしくお願いいたします!
No.1
- 回答日時:2006/09/11 15:42
こんにちは、
>配列(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' が見つかりません。
というエラーが出てしまいます…
解決法はないでしょうか…?
- 質問者のみ
- この回答にお礼をつける
このQ&Aを見た人はこんなQ&Aも見ています
- VB.netでのExcelデータの読み込み
- VB.NETで既存Excel worksheetを操作する方法
- VB.net2003のエクセルからデータを取得したいのですが・・・
- VB.NETでExcelファイルを読み込むには?
- VB2010Express で、Excelのcellデータをコピーする
- VB2010でExcelからの 読み出しを したいのですが…
- DataGridViewで、選択した行の値を取得したい。
- .NET上でエクセル上に罫線を引く
- VB.NETのコンボボックスについて
- VB.NET 配列の格納
- Excelファイルの操作
- エクセルのセル最終行取得
- VB.NET 2次元配列
- データセットのレコード更新がしたい
- vb.netでExcelの1行をコピーしたい
- vb2010で既存のエクセルを開くには?
- MAX値を条件にデータを取得するには?
- TextBoxに半角数字のみの入力しかできないようにしたい
- VisualBasic2008でのエクセルファイル読み込み
- 構造体の定義の仕方
関連するQ&A
このカテゴリで人気のQ&Aランキング
- 4文字列を含まないという正規表現は?
- 5VBAにて新規ブックへ既存シート...
- 64月定例セキュリティアップデートの...
- 7エクセル(Excel) ワイルドカード *...
- 8TextBoxに半角数字のみの入力しかで...
- 9VBAで別エクセルファイルから指定エ...
- 10VB上で実行中の無限ループの止め方
- 11定数配列の書き方
- 12Sub ***( ) と Private Sub ***( ) ...
- 13EXCELマクロ実行でコンパイル...
- 14実行時エラー9 インデックスが有効...
- 15VBAマクロでCSV出力
- 16動的配列が存在(要素が有る)か否か...
- 17Excelで400というエラー
- 18エクセルで最大列を増やす
- 19VBの画面サイズについて
- 20VBA ASC関数で変換できない文字の説明