• ベストアンサー

Excelデータの検索

1.コモンダイアログを開く 2.パス上のExcelファイルを取得 3.VB上で取得したデータベースのファイルと比較したいのですが。 1.のところは分かるのですが、VB上からExcelのデータの取り方がわかりません。 参考urlか関連ソースを教えてください。 VB.NET,SQL Server 2005を使用

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

3.のロジックとコードは、質問者の領分です。 VB.NETでエクセルファイルを開くのは http://7ujm.net/VB/VBEXCEL.html  にコードがあります。 それを多少修正して、やってみました。 エクセルオブジェクト・ライブラリへの参照設定は済ます。 VB.NETのコンソールアプリケーションで Module Module1 Sub Main() Dim app As Object Dim book As Object Dim sheet As Object app = CreateObject("Excel.Application") app.Visible = True 'アプリケーションの非表示 'book = app.Workbooks.Add '新規作成 book = app.Workbooks.Open("C:\Documents and Settings\XXXX\My Documents\エクセル1.xls") 'ファイルを開く sheet = book.Worksheets(1) 'シート1を選択 Debug.WriteLine(sheet.Cells(1, 1).Value) '値を読み出す sheet.Cells(1, 1).Value = "111" 'A1セルに値を入力 sheet.Cells(2, 1).Value = "222" sheet.Cells(3, 1).Formula = "=A1+A2" 'A3に計算式を入力 MsgBox(sheet.Cells(3, 1).value.ToString()) book.Save() '上書き保存 'book.SaveAs("c:\test.xls") '名前をつけて保存 app.Quit() '終了 ' オブジェクトを解放します。 sheet = Nothing book = Nothing app = Nothing End Sub End Module ーーー フルパスの中のXXXXはユーザーID、エクセル・ファイル名は適宜に変更。 このエクセルファイルは閉じておくこと。 == .NETのメニューでデバッグー開始 A3セルの値がメッセージボックスに表示された。 また私の場合の「エクセル1.xls」のA1セルは111、A2セルは222、A3セルは 式=A1+A2が入り、値は333となっていることが確認できました。

その他の回答 (2)

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.3

COMオブジェクトを使用してのアクセスは非常に遅く、かつCOMオブジェクトの開放漏れにより、EXCEL自体が正しく終了せずに残ってしまう可能性があります。 横槍申し訳ないのですが、COMオブジェの開放の仕方としてはimogasi様の書き方では不十分であり、EXCELが終了せずに野っこ手しまうと思います。 詳しくは以下をご覧ください。 Excel・Word・他(30)http://hanatyan.sakura.ne.jp/dotnet/index.html とりあえずVB上からExcelのデータの取り方がわかればよろしいでしょうか? OLEDBを使用して、データセットを作成する方法を紹介いたします。 私が作成したツールからの抜粋ですので、わかり図らいところは質問お願いいたします。 Dim filename As String = "エクセルパス" Dim cnstr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + filename + "; Extended Properties=Excel 8.0;" Dim cn As OleDbConnection = New OleDbConnection(cnstr) Dim dt As DataTable Dim tablename As String = Nothing 'シート名を取得する cn.Open() dt = cn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) cn.Close() Dim flag As Boolean = False For Each dr As DataRow In dt.Rows 'Debug.WriteLine(dr(2)) If dr(2) = "探したいシート名$" Then flag = True tablename = dr(2) Exit For End If Next dt.Dispose() Dim dAdp As OleDbDataAdapter Dim dSet As System.Data.DataSet = New System.Data.DataSet Dim strSQL As System.Text.StringBuilder = New System.Text.StringBuilder 'A5:AP11000が取得範囲 '指定しなくてもよい strSQL.Append("SELECT * FROM [") strSQL.Append(tablename) strSQL.Append("A5:AP11000]") dAdp = New OleDbDataAdapter(strSQL.ToString, cn) dAdp.Fill(dSet) dAdp.Dispose() cn.Dispose() dt = dSet.Tables(0)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

こんにちは、 VB.NETを、使うのは必須なのですか。?? SQL SEVER 2005は、express版では、ないですよね。 データの比較だけでいいのなら、いろいろな、 vbから、直接excelを操作しなくとも、逃げ道があるような気もしますが。

shyadow
質問者

補足

VBを使うのは必須です。 SQL Server Management Studio Expressを使ってます。 データは比較というかserverのデータとExcelのデータを検索して ServerとExcelのデータでExcelにないデータ又はあるデータをAccessレポートに表示します

関連するQ&A

  • コモンダイアログからExcelへ

    コモンダイアログから既存のExcelファイルを表示させたいのですが、わかりません。 コモンダイアログの「開く」を押すとフルパスが取得されるというのは理解できたのですが、実際にプログラムをどう書いていいのかわかりません。 ファイルのパスを使うとはどういうことでしょうか? またshell関数をどう使えばいいのでしょうか? 基本的な質問で申し訳ありませんが、よろしくお願いします。

  • Excel97のVBAでコモンダイアログを使いたい

    現在Excel97で二つのテキストデータベース(固定長形式)を読み込み、解析を行おうとしています。 現在、べたに二つのファイルのパスをコードに書き込めばファイルの読み込みも上手くいくのですが、やはりここは出来るならばファイル指定を汎用のダイアログで行えるようにしたいと思いあれこれ方法を探しています。 そこで読み込みたい二つのファイルのパスを、VBで利用できるCommonDialogで取得出来るなら、一からファイル選択用フォームを作成しなくても済むので楽になると思いついたのですが、Excel97のVBAでの転用がうまくいかなくて企画倒れの状態になっています。 参照設定でComCtrl32.OCXを読み込めればと思い試験してみたもののうまくいかず、次の方法が見つからずに途方に暮れています。 もしかしてVBAではコモンダイアログは利用できないのでしょうか?

  • VBでSQLサーバーへ接続できない

    WVD2008ではSQLサーバーへ接続できて、データも表示できるのに、 VB2008からは最初の設定画面がわかりません。 添付の図は 右:WVD 左:VB です。 WVDは データソース:Microsoft SQL Server (SqlClient) サーバー名:○○○\SQLEXPRESS データベース名:master と入力しテスト接続すると「成功」します。 しかしVBは データソース:Microsoft SQL Server Compact 3.5 データベースファイル名:○○○\SQLEXPRESS もしくは データソース:Microsoft SQL Server データベース ファイル (SqlClient) データベース:○○○\SQLEXPRESS と入力しテスト接続すると「見つかりません」となります。 アクセスへなら データソース:Microsoft Access データベース ファイル (OLE DB) データベースファイル名:C:\\Desktop\Documents\○○○.mdb として接続できます。 接続できないというよりもVBにおいてのSQLサーバーへの設定方法がわかりません。 VBにて サーバー名:○○○\SQLEXPRESS データベース名:master へ接続したい場合はどうすればいいでしょうか? ご教授よろしくお願い致します。

  • SQL Serverのデータ格納場所

    SQL Serverのデータ格納場所 Visual Studioを勉強しだしました。データベースのところで、mdfファイル、ndfファイルという言葉が出てきました。 ネットで色々調べていますが、いまいちわからないのでお教えください。 参考にしたURL: http://itpro.nikkeibp.co.jp/article/COLUMN/20070201/260338/ ■mdfファイルとはSQL Server Express Editionのデータベースデータファイルとあります。 Express Editionではない、SQL Server 2012 Standardなどのデータベースは違う拡張子のデータベースファイルになるのでしょうか? もしそうなら、何故Express Edtionと有料バージョンではデータの持ち方が違うのでしょうか? ■mdfファイルを違うパソコンで開きたいとします。Accessみたいに、ファイルをコピーして別PCに持って行けばファイルはひらけるものなのでしょうか? ■mdfファイルのデータをAccessにインポートできるのもなのでしょうか? 当方、Accessがわかる程度で、その他のデータベース関連のソフトウェアはさわったこともありません・・・ 宜しくお願い致します。

  • VB6.0で現在参照しているエクセルファイルの絶対パスを取得したい

    VB6.0で現在参照しているエクセルファイルの絶対パスを取得したい 環境:VB6.0/Excel2003/WindowsXP VB初心者です。 現在プログラム内で参照しているexcelファイルの絶対パスと、フォームのテキストボックスに入力された絶対パスを比較して、 それらが同一だった場合エラーを表示するというプログラムを作成しています。 プログラム内では、現在開かれているエクセルファイルの内容をチェックして、対象となるデータを持っているエクセルファイルを1つ選択し、データを取り込むという動きをしています。 現在開かれているファイルのパスと入力されたパスを比較する事は出来たのですが、 そうではなくデータを取り込んでいるエクセルファイルのみ比較したいのです。 (複数のファイルが開かれている場合、データを取り込んでいるファイルとは別のファイルのパスが入力されたファイルパスと同一だったときもエラーとなってしまうので..) データを取得しているところからはフルパスは取れそうにないので、ほかの方法を模索しています。 どうぞ宜しくお願い致します。

  • ExcelからODBCを使おうと考えています。

    ExcelからODBC経由でデータベースを読み込むマクロを作ろうとしています。 参考になるWeb Pageか、書籍を教えてください。 本番環境ではSQL Server相手だけど、開発環境ではmdbファイルを使って勉強しようと考えています。

  • Word2003での差込印刷 - データソースが保存されない

    ■環境 ・WinXP(SP2) ・MS Word 2003 / Excel 2003 Excelでデータを作り、それをWordにデータの差し込みを行って、文書を 作成し、利用しておりました。 ところが今回、Excelのデータの場所とファイル名が変更になりました。 Wordを開くと、 -------------------------------------------------------------- この文書を開くと、次のSQLコマンドが実行されます: SELECT * FROM '××××$' データベースからのデータが、文書に挿入されます。続行しますか?   「はい」  「いいえ」 -------------------------------------------------------------- というダイアログが表示されます。 データのパスが変わりましたので、「はい」をクリックして、 「データファイルの選択」ダイアログから新しいパスを参照するように 指定して、そのまま上書き保存を行いました。 けれども2度目にまたそのファイルを開いてもその情報は保存されず、 再び「データファイルの選択」ダイアログが開きます。 以前は「はい」で文書が正常に開かれていたのですが、一体何が原因 として考えられますでしょうか? なぜデータソースのパスが保存されないのでしょうか。 毎回データを指定するのも手間がかかりますので、以前のように自動的に 読み込んでくれれば、と思います。 原因や対処法にお心当たりのおありの方は、ご助言いただけますと幸いです。

  • コモンダイアログのファイルを開くについて

    Windowsのファイルを開くダイアログで、ファイルを開くダイアログから エクセルファイルを選択し、開くボタンを押したら、選択された エクセルファイルを開きたいのですが、ヘルプで参照したところコモンダイアログ があるのを知りました。 ダイアログを開くところまでは、できたのですが、次にエクセルファイルを選択 し、開くボタンを押したときのイベントってどうやってとればよいのかわかりません。 開くボタンを押時に、選択されているパスを取りたいのですが、それもどうやって 取ればよいのやら、、、(+_+) ご教示ねがえませんでしょうか? よろしくお願いいたします。

  • オブジェクト変数の取得

    コモンダイアログを使用して、選択したExcelファイルをAPIの ShellExecute関数で起動を行っているんですが、エクセルファイルを 開いた後に、エクセルのセルのデータを取得したいのです。 オブジェクト変数でエクセルを取得したいのですが、なかなか上手くいきません。 今までは普通に以下のような処理でオブジェクト変数を取得していたのですが set オブジェクト変数 = GetObject("パス") または set オブジェクト変数 = CreateObject("パス") これだど、またエクセルを起動させてしまうので、、 既に起動してしまっているものを取得するのはどうすれば よいのでしょうか? ご教示ねがえませんでしょうか? よろしくお願いいたします。

  • エクセルでSQLを使う

    VB6.0でのSQLは 理解しているのですが (アクセスのデータベース宣言して、使ってるんですが) エクセルでSQLを 使うには、データベースの宣言など、必要らしい。 でも、エクセルのデータやら、文字列や式まで、混ざっているシートと、データベースが頭の中で一致せず、困っています。 ある範囲を宣言するんでしょうか

専門家に質問してみよう