• ベストアンサー

Excelデータの検索

AKARI0418の回答

  • 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)

関連する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を 使うには、データベースの宣言など、必要らしい。 でも、エクセルのデータやら、文字列や式まで、混ざっているシートと、データベースが頭の中で一致せず、困っています。 ある範囲を宣言するんでしょうか