• ベストアンサー

VB.net2003のエクセルからデータを取得したいのですが・・・

お世話になります。 VB.NET2003でExcel XPのセルの数値を取得しTextBoxなどで表示させたいのですが、うまいこといきません。 下に考えてみたコードを書いてみます。 とりあえずExcelのA1セルの値を取得してみたいのですが、後ほどループで他のセルの値も取得したいと思っています。 これを回すと、num(1, 1) = sheet.cells(1, 1)(下から3行目)で”追加情報 : 型 'Range' から型 'String' へのキャストが有効ではありません。”とされます。 どなたかご教授お願いしますm(__)m Private Sub exel_open() '------配列設定----- Dim app As Object 'エクセルアプリケーションの定義 Dim book As Object 'ブックの定義 Dim sheet As Object 'シートの定義 Dim col, row As Integer 'colは行、rowは列 Dim num(1, 1) As String '各セルの値を取得 '------エクセルファイルを開く&表示------- app = CreateObject("Excel.Application") app.application.visible = True book = app.Workbooks.Open("D:\test.xls") 'エクセルファイルのopen sheet = book.Worksheets(1) '-----エクセルデータの読み込み------ num(1, 1) = sheet.cells(1, 1) TextBox1.Text = num(1, 1) End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

num(1, 1) = sheet.cells(1, 1) ↓ num(1, 1) = sheet.cells(1, 1).value にするとキャストエラーは消えます。 convert.toString()がよいときもあります。 これでだめなら 下記コードを参考に Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim FileName, SheetNeme As String Dim strSQL As String AxMSHFlexGrid1.Clear() : System.Windows.Forms.Application.DoEvents() AxMSHFlexGrid1.FixedCols = 0 AxMSHFlexGrid1.FixedRows = 0 'なぜ必要かコメントアウトして見てネ 'データファイルの読込み処理 FileName = "C:\Documents and Settings\name\デスクトップ\Book1.xls" 'データファイルのフルパス SheetNeme = "Sheet4" 'Excelファイルのシート名 'データベースに接続するための情報を設定する CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;IMEX=1" CN.Open(FileName) 'Connection をオープン 'Recordsetオブジェクトのオープン strSQL = "Select * From [" & SheetNeme & "$]" RS.Open(strSQL, CN, ADODB.CursorTypeEnum.adOpenDynamic, _ ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText) AxMSHFlexGrid1.DataSource = RS 'MSHFlexGridにデータを代入 '接続終了処理 RS.Close() 'Recordset・Connection を閉じる CN.Close() RS = Nothing '参照を解放。 CN = Nothing AxMSHFlexGrid1.FixedRows = 1 'なぜ必要かコメントアウト End Sub

kawaching2
質問者

お礼

どうも有難うございましたm(_ _)m .valueで解決できました。 toStringも今後の参考にさせていただきます。

その他の回答 (1)

回答No.2

'VB.NET限定での方法 num(1, 1) = sheet.Cells(1, 1).ToString 'VB6でも通用する方法 num(1, 1) = sheet.Cells(1, 1).Value

kawaching2
質問者

お礼

有難うございました。助かりました

関連するQ&A

  • VBでエクセルを操作(オートフィルタ)

    CSVファイルをエクセルで開き、A列にオートフィルタをかけます。TextBox1に入力した項目と一致させるために、下のようなものをつくってみました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim app As Object Dim book As Object Dim sheet As Object app = CreateObject("Excel.Application") app.application.visible = True book = app.Workbooks.Open("C:\XXXX.csv") sheet = book.Worksheets(1) With sheet.Range("A1") If .AutoFilter Then .AutoFilter(field:=1, Criteria1:="TextBox1.text") End With End Sub Textbox1に入力して実行してもヒットしません。 "TextBox1.Text"の代わりに、A列にある項目を入れると、正常にオートフィルタが実行されます。 皆様教えて下さい。よろしくお願い致します。

  • vb.netによるEXCEL値取得

    いつも参考にさせていただいております。 現在、VS2005 VB.netで開発をしており、 EXCELの特定のセルの値を取得する方法は過去記事等で理解いたしましたが 式の入ったセルに対して、期待通りに値を取得できません。 対象のセルには名前定義が施されており その定義にはシートの印刷ページ数が取得できるマクロが組み込まれております。 ですので見た目にはセルに数字が入っている状態です。 取得したいのは単純にその数字なのですが、 ・ ・ (省略) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) (省略) ・ ・ Dim result AsString = "" result = xlSheet.Cells(1,1).Text この方式で実行するとresultに$NAME#のような結果が格納されてしまいます。 オブジェクトブラウザにてプロパティを見てみたのですが 該当するようなものも見つからず困っております。 どなたかご存知のことありましたら、 ぜひともご助力ください。 よろしくお願いします。

  • エクセルコントロールのVB2008での参照方法

    VB2008でエクセルから値を取得するプログラムを作成しています セルの値を取得することはできたのですが、シートに貼り付けられた チェックボックスやラジオボックスの値の取得方法が分からずに 困っています。 セルの値を取得するまでのフローは以下の様に作成しました ------------------------------------------ Dim exapp As New Object Dim exbook As New Object exapp = CreateObject("Excel.Application") exbook = exapp.workbooks.open(FileName) Dim exsheet As Excel.Worksheet exsheet = CType(exbook.Worksheets.Item(1), Excel.Worksheet) textbox1.text=exsheet.range("A1").value ・ ・ exsheet.nothing exbook.close(False) exapp.quit ------------------------------------- 上記のセルの値を取得している流れの中でチェックボックスや ラジオボックスの値を参照したいのですが どのようにすればよいでしょうか お手数ですがアドバイスなど頂ければ幸いです

  • TextBoxに入力した文字をExcelに書き込むには?

    VB2008を使用しています。 VBフォーム内のTextBox1に入力した内容(例 りんご)をBottanを押すことによりExcelの指定したセル(例 A1)に書き込んで保存する方法はありますでしょうか? 現在、以下のところまでは出来ています。 ' excelを定義 Dim excel As New Microsoft.Office.Interop.Excel.Application ' excel testをファイルから開く Dim book As Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open("C:\test.xls") ' 1枚目のワークシートを取得 Dim sheet As Microsoft.Office.Interop.Excel.Worksheet sheet = CType(book.Worksheets.Item(1), Microsoft.Office.Interop.Excel.Worksheet) Excelの開放からsheetの取得までは出来たのですが、ここから先がわかりません。よろしくお願いいたします。

  • エクセルとVB6

    環境は OS XP Visual Basic 6 Excel 2003 です。 エクセルを扱うについては、今回初めてです。 ソースです----------------------------------- Dim ex As Object ' Excel.Application Dim wb As Object ' Excel.Workbook Dim ws As Object ' Excel.Worksheet Set ex = CreateObject("Excel.Application") ex.Visible = True 'エクセルを表示する Set wb = ex.Workbooks.Add '空白の新しいブックを追加 Set ws = wb.Worksheets.Add '新しいシートを追加 ws.Name = "XXX " 'シートの名前を設定 'シートのセルに書き込む '構文:Cells(行, 列).Value = 値 ws.Cells(1, 1).Value = "ID" ws.Cells(1, 2).Value = "PS" III% = 2 For x% = 0 To 135 III% = III% + 1 ws.Cells(1, III%).Value = 問D$(x%, 0) Next x% ----------------------------------- エクセルが起動し、挿入されます。 質問1 シート XXXはsheet3としてに挿入され、それ以外にsheet1 sheet2もできています。 これはなぜですか。 質問2 sheet1 sheet2を生成しないようにできますか。 できないようにするには、どうすればいいですか。 全くエクセルは詳しくありません。 お詳しい方、よろしくお願いします。

  • VB6からエクセル操作

    VB6でエクセルを開き、ある処理をして、 名前を付けて保存ダイアログを出して保存したいのですが、 名前を付けて保存ダイアログを出すところがうまくいきません。 Dim app As Excel.Application Dim book As Excel.Workbook Dim sheet As Excel.Workshee Set app = CreateObject("Excel.Application") app.Visible = True Set book = app.Workbooks.Open("c:\test.csv") 'ファイルを開く Set sheet = book.Worksheets(1) sheet.Columns("B:D").Delete Shift:=xlToLeft sheet.Columns("C:D").Delete Shift:=xlToLeft sheet.Rows("1:7").Delete Shift:=xlUp ここで、名前を付けて保存ダイアログを出して、ファイルを保存したい。

  • excelのデータをvbにとりこむ

    excelのあるセルのデータを取り込みたいのですが、 どうすればよいでしょうか? C:\123.xlsというファイルのsheet1の (2,4)というセルにある実数型のデータを 出力するという、意図です。 Private Sub Setting_Click() Dim xls As Object Dim xlsFilename As String Dim xlsSheetname As String xlsFilename = "C:\123.xls" xlsSheetname = "Sheet1" Set xls = CreateObject("Excel.Application") xls.Application.Visible = False xls.Application.Workbooks.Open xlsFilename Dim r1 As Double r1 = xls.Application.Workbooks.cells(2, 4).Value Print r1 end sub

  • アクセスから現在開いているエクセルの値を取得したい

    アクセスから現在開いているエクセル(BOOK1.xls)のシート1のA1に入っている値を取得するにはどうすればいいでしょうか? アクセスの参照設定の「Exsel 11.0 object Library」 にチェックを入れ Sub Test() Dim ExcelSheet As Object Set ExcelSheet = CreateObject("Excel.Sheet") ExcelSheet.Application.Visible = True MsgBox ExcelSheet.Application.Cells(1, 1).Value Set ExcelSheet = Nothing End Sub とやってみたのですが 新たなエクセルブックが表示され、空白のセルのA1が取得されてしまいます。 「現在開いているBOOK1のシート1」とするにはどうすればいいのでしょうか? ご教授よろしくお願いします。

  • VB.NETでのEecelデータの読み込みについて

    VB.netを使用しています。 過去ログを参考にして、Excel値の読み込みのプログラム作成をしています。 下記のコードでerrorはでないのですが、正常な値を読み込んでくれません。どなたかアドバイスお願いします。 ※sampleファイルのsheet1のセルA1の値をLabel1に読み込みたい このコードを実行するとLabel1に "System.__ComObject" と表示されてしまう。 セルA1には"100"という数値が入っています。 Dim excelFilePath As String = "C:\sample.xls" Dim Excel As Excel.Application Dim ExcelBook As Excel.Workbook Dim ExcelSheet As Excel.Worksheet Excel = CType(CreateObject("Excel.application"), Excel.Application) ExcelBook = CType(Excel.Workbooks.Open(excelFilePath), Excel.Workbook) ExcelSheet = CType(ExcelBook.Worksheets(1), Excel.Worksheet) Label1.Text = ExcelSheet.Cells(1, 1).ToString

  • VBでEXCELのシートのコピーに関して

    同一Book内で、シートのコピーをしようと考えて、幾つかのHPを参考に、以下のような 記述をしました。 その際に、以下の記述をした場合、本来はコピー先のシート名を変更したいにも関わらず、コピー 元のシート名が変わってしまいます。 追加したシートの名前を変更させるには、どのような書き方にすれば良いでしょうか? 自分で記述しておきながら、どのように対応したら良いかわからず。。。 また、以下のような記述をした場合、追加したセル側のシートを操作したいにも関わらず、 コピー元のシートを書き換えてしまいます。 追加したシートのセルを操作したい(値を入力)ような場合は、どのような記述を すれば良いでしょうか。。。 ご教授頂ければと思います。 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\test.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) '確認のためExcelのウィンドウを表示する xlApp.Visible = True Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) Dim xlSheet2 As Excel.Worksheet = xlBook.Worksheets(1) 'シートのコピー xlSheet.Copy(After:=xlSheet2) 'シートに名前を付ける xlSheet.Name = "TEST" Dim xlRange As Excel.Range 'データの入力セル範囲 xlRange = xlSheet.Range("A1:A1") 'セルへデータの入力 xlRange.Value = “AABBCC”

専門家に質問してみよう