VB2005でEXCELファイルからデータ読込みの方法を教えてください

このQ&Aのポイント
  • VB2005を勉強中の素人です。既に立ち上げた状態のEXCELファイルから単純に特定セルの数値をVBのラベルに読み取りたいだけなのですが、ネットや書籍にてVBでのEXCEL読込み方法について調べたのですが、EXCELの立ち上げとクローズがセットになっており、既にEXCELファイルを開いた状態からでは2重起動となり、読み込みだけの仕方が分かりません。ファイル名とセルを指定して単純な読み取り方法があれば教えてください。
  • VB2005で立ち上がった状態のEXCELファイルからデータ読込みの方法を教えてください。VB2005を勉強中の素人です。既に立ち上げた状態のEXCELファイルから特定セルの数値をVBのラベルに読み取りたいだけなのですが、ネットや書籍にてVBでのEXCEL読込み方法について調べたところ、EXCELの立ち上げとクローズがセットになっており、既にEXCELファイルを開いた状態からでは2重起動となります。ファイル名とセルを指定して単純な読み取り方法があれば教えてください。
  • VB2005で立ち上がった状態のEXCELファイルからデータ読込みの方法を教えてください。VB2005を勉強中の素人です。EXCELの立ち上げとクローズがセットになっており、既にEXCELファイルを開いた状態からでは2重起動となってしまいます。ファイル名と特定セルを指定して単純な読み取り方法があれば教えてください。
回答を見る
  • ベストアンサー

VB2005 で立ち上がった状態のEXCELファイルからデータ読込みだけしたいのですが

どなた様かお助けください。VB2005を勉強中の素人です。 既に立ち上げた状態のEXCELファイルから単純に特定セルの数値をVBのラベルに読み取りたいだけなのですが、ネットや書籍にてVBでのEXCEL読込み方法について調べたのですが、どこの情報をみても、EXCELの立ち上げとクローズがセットになっており、既にEXCELファイルを開いた状態からでは2重起動となり、読み込みだけの仕方が分かりません。一応下記でファイルのオープンからのクローズまでができるようですが、[open]のところを取り除くとエラーになってしまいます。 ファイル名とセルだけが私の指定したい条件なのですが、なにか単純な読み取り方法はないでしょうか? というか私がアホすぎるのも原因だとは思いますが、ちょっとEXCEL情報読み込ませたかっただけなのにもう2日も悩んでおり、こんなに難しいとは思いませんでした。VBって初心者向けとかいわれていますけど6.0やら.netやらと情報が分散していて何するにも一苦労ですね。  いろいろ調べて下記のコードで最低限読み込みはできるようになりました。(短いコードが好きなので宣言とかはかなり除去しているからかな?時々表示されるセルデータもおかしくなります) EXCELオブジェクトライブラリの参照は済です。 ファイルのオープンとクローズを除去し最終的には立ち上げっぱなしのEXCELから単純な読込み(のみ)を1秒に1回程度繰り返してラベル表示を随時更新するのが目的です。ご助言お願いします。 Dim xlApp As New Excel.Application Dim xlFilePath As String = "C:\あつし\sample.xls" label1.Text = xlApp.Workbooks.Open(xlFilePath).Worksheets.Item(1).Range("A3").Value() xlApp.Quit()

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

xlAppを new Excel.Applicationで作成してしまうと すでに起動しているExcelのインスタンスは取得できません どうしているExcelを取得するには GetObjectを使います xlApp = GetObject( , "Excel.Application" ) といった具合に使います この方法だと 複数のExcelが起動されている場合どのExcelを取得するかは指定できません ...

takabee
質問者

お礼

ありがとうございます。お教えくださった方法を使い、無事読み込みが出来ました。 本当に助かりました!

関連するQ&A

  • VB2008でEXCELのセルデータが読めません

    VB2008でEXCELを開き、セルの内容を読み込もうとしましたが読み込めません。 EXCELのオープンとセルの読み込みは下記により行いました。 Dim strExcelFile As String 'エクセルファイル Dim xlApp As Excel.Application       Dim strExcelData As String xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open(Filename:=strExcelFile) xlApp.Visible = True 'EXCELは表示されている strExcelData = xlApp.Cells(3,4).ToString EXCELの3列4行には数値が入っていますが、strExcelDataには"System._ ComObject"というデータが読み込まれています。 ToStringは、これをつけないとデータの型が違うとエラーになります。 EXCELのデータは文字型と思っていましたがこれも判りません。 VBのMicrosoft Excel9.0Object LibraryをクリックしてOKしています。 原因の見当が皆目つかず困っています。

  • VB2008でEXCELのセルデータが読めません

    VB2008でEXCELを開き、セルの内容を読み込もうとしましたが読み込めません。 EXCELのオープンとセルの読み込みは下記により行いました。 Dim strExcelFile As String 'エクセルファイル Dim xlApp As Excel.Application       Dim strExcelData As String xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open(Filename:=strExcelFile) xlApp.Visible = True 'EXCELは表示されている strExcelData = xlApp.Cells(3,4).ToString EXCELの3列4行には数値が入っていますが、strExcelDataには"System._ ComObject"というデータが読み込まれています。 ToStringは、これをつけないとデータの型が違うとエラーになります。 EXCELのデータは文字型と思っていましたがこれも判りません。 VBの参照で「Microsoft Excel9.0Object Library」をクリックしてOKしていますが、チェックマークなどはつかず、正しく反映されたかについては未確認です。 原因の見当が皆目つかず困っています。 誤って「ディジタルライフ」-「その他」に同じ内容で投稿しています。

  • Excelのセルの値を取得

    VB2005Expressにて開発しています。 Excelのセルの値を取得するにはどうしたらいいのでしょうか。 下記でExcelは起動出来るのですが、値の取得ができません。 また、Rangeで範囲を指定して一括取得して、1データずつ配列化した 変数にセットすることは可能なのでしょうか。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = "C:\excel_test.xls" Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) xlApp.Visible = True どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • VB2005でExcelファイルを開く

    こんにちは。 VB2005の勉強をさせて頂いています。 ボタンを押すとコモンダイヤログを表示し、 ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが 上手くできません。一応現在のソースを下記に置いておきます。 特に、下記のソースの 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、 実際セルに入力したデータは5行程度のものです。 1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか? よろしければ、具体的なソースやアドバイスをお願いいたします。 -------------------------------------- Dim ofd As New OpenFileDialog() 'ofdの設定をする 'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If ofd.ShowDialog() = DialogResult.OK Then '選択されたファイルを読み取り専用で開く Dim ReadFile As System.IO.Stream ReadFile = ofd.OpenFile() If Not (ReadFile Is Nothing) Then Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '既存ファイルを開く場合 Dim xlFilePath As String = ofd.FileName Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next 'xlSheet の解放 'xlSheets の解放 'xlBook を閉じる 'xlBook の解放 'xlBooks の解放 'Excelを閉じる 'xlApp を解放 End If End If ofd.Dispose()

  • VB2008 エクセル出力

    VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています

  • 環境はVB2008です。開いているエクセルファイルの認識!

    環境はVB2008です。開いているエクセルファイルの認識! すいません。詳しいかた宜しくお願い致します。 【現象】 ファイルが既に開いている場合、読み取り専用で開いてしまうと保存できないため、 開いているファイルの検索をかけようと試みたが、 新しいエクセルを起動した中のWorkBook内を検索してしまうのか 開いているワークブックを検知してくれない。 Dim xlApp As New Excel.Application Dim xlwb As Excel.Workbook Dim xlws As Excel.Worksheet Dim URL3 As String URL3 = "C:\MailDB.xls" Dim allwb As Excel.workbook For Each allwb In xlApp.Workbooks If allwb.Path = URL3 Then MsgBox(URL3 & "のファイルを閉じてください。", MsgBoxStyle.Exclamation, "警告") Exit Sub End If Next xlwb = xlApp.workbooks.open(URL3) xlws = xlwb.worksheets(1) With xlws .Cells(1, 3) = "テスト" End With xlwb.Save() xlwb.close() xlApp.quit()

  • VB.net(2005)でエクセルの特定名称のシートを操作したい。

      お世話になります。 WindowsXP + SP3、VB.net(2005)の環境にて開発をしております。 VB.netから既存のエクセルファイル(雛形)を開き、特定の名称のシートを アクティブにしたいのですがどのようにコーディングすれば良いでしょうか? ※色々とネットで情報検索してみましたが特定の名前のシートを操作する  方法をうまく見つけられず質問致しました。 エクセルファイル名:売上情報_2009年.xls シート名     :"200901" ~ "200912" の12シート 以前、VB6で同様のことを行ったときは以下のような記述で実現できました。 Dim xlApp As Object Dim xlsheet As Object xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open(FileName:="C:\売上情報_2009年.xls") xlsheet = xlApp.Sheets("200908") xlsheet.Activate() 現状、vb.netで以下のコーディングまではできております。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open("C:\売上情報_200904.xls") Dim xlSheets As Excel.Sheets = xlBook.Worksheets よろしくお願い致します。  

  • VB2005で作成したエクセルファイルに問題が・・・。

    お世話になっております。 VB2005にてまず大元のエクセルファイルを分割し、別ツールにて分割したファイルを読み込み、その後に読み込んだファイルを処理をしようとしています。 先に質問させていただき、分割はVBAコードを改変することで可能となりました。 http://oshiete1.goo.ne.jp/qa3739293.html(以前の質問です。) 問題は、その分割したファイルを当方の別ツールにてStreamReaderで読み込んだ際に起こります。 20行づつに分割したエクセルファイルでは、20行目以降には文字列は入っておりませんが、StreamReaderで読み込むと20行以上(もしくは以下)読み込んでしまい、ファイル内の情報を正しく読み取ってくれません。 ファイルの作成方法に問題があるのでしょうか。 それとも、StreamReaderではなく、別の方法で最終行までの文字列を読み込んだほうがいいのでしょうか。 ご教示いただければ幸いに思います。 宜しくお願いいたします。 以下、作成したコードです。 ~分割するコード~ Dim xlApp As Object = CreateObject("Excel.Application") Dim xlwb As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Open(TextBox1.Text) Dim xlsheet As Microsoft.Office.Interop.Excel.Worksheet xlsheet = xlwb.Worksheets("Sheet1") Dim d As String d = xlsheet.Range("A65536").End(Excel.XlDirection.xlUp).Row Dim sh1 As Excel.Worksheet sh1 = xlwb.Worksheets("Sheet1") '元データシート Dim rs As Integer = 20 Dim i As Integer Dim m As String = 1 MsgBox(d + "件ありました(=゜ω゜)ノ") '分割フォルダを作成 System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\分割フォルダ") Dim s As Integer = 1 For i = 1 To d Step rs Dim dire As String = (System.IO.Directory.GetCurrentDirectory()) Dim xlFilePath As String = (dire + "\分割フォルダ\" + m + "つ目.csv") Dim xlApp3 As Object = CreateObject("Excel.Application") Dim xlwb3 As Microsoft.Office.Interop.Excel.Workbook = xlApp3.Workbooks.add Dim xlsheet3 As Microsoft.Office.Interop.Excel.Worksheet xlApp3.DisplayAlerts = False xlsheet3 = xlwb3.Worksheets("Sheet1") sh1.Range(sh1.Cells(s, "A"), sh1.Cells(s + rs - 1, "B")).Copy() xlsheet3.Paste() xlsheet3.SaveAs(xlFilePath) xlwb3.Close(True) xlApp3 = Nothing xlwb3 = Nothing xlsheet3 = Nothing m += 1 s = s + rs Next i MsgBox("分割OK♪") xlwb.Close(True) xlApp = Nothing xlwb = Nothing xlsheet = Nothing ~ファイルを読み込むコード~ Dim hReader As New System.IO.StreamReader(FileName) Dim lCount As Int64 While (hReader.Peek() >= 0) hReader.ReadLine() lCount += 1 End While MsgBox(lCount) hReader.Close()

  • VBでエクセルのデータを取り込む方法

    VB2010にエクセル(2003)のデータを取り込みたいのですが、うまくいきません。 どうすればよいのでしょうか。 外部アプリなので、Public Class Form1の前にImports Excel = Microsoft.Office.Interop.Excel と記入、dim xlapp as excel.apllcation dim xlbook as exce.book dim xlsheets as excel.sheets と記入してみますがこの時点でコードエラーとなります。(ネットで調べこのように記述しました) どうすればいいでしょうか。 すみません。vb初心者なので詳しく教えていただくとたすかります。 よろしくお願いします。

  • VB2005でエクセルの機能を使うには

    VB2005でエクセルに数値を貼り付けた後自動的に エクセルの機能を使ってA列で並び替えをしたいのですが可能でしょうか。 今のソース s1()の配列に数値がはいっている。 exp s1(1)="1.0,2.0,3.0,4.0......" Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = Application.StartupPath & "\aaa.xls" Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) ':::::::::::::::::::::::::::::::::::::::::::::::sheet1 '-----貼り付け開始 Dim xlRange As Excel.Range Dim xlCells As Excel.Range Dim xlRange1 As Excel.Range xlCells = xlSheet.Cells Dim j Dim Col As String For i = 1 To irec - 1 temp = Split(s1(i), ",") For j = 0 To 12 xlRange1 = xlCells(3 + i, 1 + j) Col = xlRange1.Address(False, False) xlRange = xlSheet.Range(Col) xlRange.Value = temp(j) Next j Next i ここで並び替えしたいのですが。

専門家に質問してみよう