• ベストアンサー

EXCEL2000のVBAで*.dbf形式データからデータを抽出するには(ODBCとの連携について)

oribeyakiの回答

  • ベストアンサー
  • oribeyaki
  • ベストアンサー率45% (18/40)
回答No.2

私はdBASEを使用したことがないので(dbfってdBASEですよね?)、 一般的にODBCを使用する方法を書きます。 参考にできるところがあれば幸いです。 ただし、ご質問の内容に回答しようと思うと本が書けますので・・・^^; 全体の流れでご勘弁を・・ >(1)ODBCやSQLをVBAを使って制御しデータベースファイル(*.dbf) >を扱うには。 まず、Excelからデータベースまでの経路を簡単に書きます。 Excelシート  ↓↑ ExcelVBA  ↓↑ ADOもしくはDAO  ↓↑ ODBC  ↓↑ データベース まず、この経路を確保する必要があります。 ここで要求されること。 1・ODBCドライバの設定 2・ExcelVBAがADOかDAOを使えるようにする設定 3・VBAからADOかDAOを使用して、ODBC経由でdBASEデータベースを開く方法 (1、2は設定、3はVBAで記述) なぜADOやDAOというものを使うのかというと、Excel単体のVBAの機能では、外部データベースとやり取りする能力がないからです。 ない機能なら、借りちゃえってことです。 1から3までがすべてうまくいけば、Excelからデータベースまでの1本の道ができたことになりますので、その道を使って、データのやり取りが可能になります。 >(2)データベースファイル(*.dbf)を扱えたとしてその後、どのように抽出 >や検索をさせるのか。 (1)の結果、経路は確保できていますから、要求を出して、結果を受け取ることをやればいいことになります。 要求を出すには?→SQL文を使いましょう。 結果をもらうには?→レコードセット(RecordSet)変数を使いましょう。 基本的なSQL文はSQL文が使用できるデータベースなら同じなので、問題ないと思います。 レコードセット変数というのは、SQL文で要求した結果のデータというのも、縦横のテーブル構造になってますので、それを受け取るためのものです。 これは、ExcelVBAにはなく、ADOやDAOの機能になります。 レコードセットにデータが入ったら、あとはエクセルのシートにぺったんぺったん張ってください。 実際のレコードセット変数にデータを受け取るまでのコードは、一番単純なモデルにすると3~4行ぐらいですみます。 (これだけ書いておいて・・・・^^;) ほかの設定ができているとして、 DAOの場合 Dim DB As Database Dim Rec as Recordset Set DB = DBEngine.WorkSpace(0).OpenDataBase('ここに接続する設定を入れます') Set Rec = DB.OpenRecordSet('ここにSQL文が入ります') あとは、Recからデータを貼り付けるだけ。 ADOはちょっと手元に資料がないので・・・ あまりお役に立たないような内容ですいません^^; 調べたり質問したりする方向性にでもお役に立てればと思います。 調査する対象が多いので大変かと思いますが、がんばってください。

hooma
質問者

補足

アドバイスありがとうございます。 確かに今回の質問を説明するとなると本が書けるでしょうね。全体の雰囲気はわかりましたが、「ADOやDAO」はどこから導入すればよろしいのでしょうか。 SQLは少しかじったので、なんとかなりそうですが、ADOやDAOがよくわかりません。

関連するQ&A

  • EXCEL2007でdbf 4形式で保存するには??

    ご回答お願いいたします。 以前のEXCELでは、ArcView等のDBFファイルを形式選択で保存できたのですが、EXCEL2007では、デフォルトでその拡張子が現われません。 DBF 4ファイルを読んで、データを上書きして、新たにDBF 4ファイルを生成する場合はどのように処理すればよいでしょうか?

  • VBAで期間でデータを抽出するには?(Excel2003)

    いつも助けていただきありがとうございます。 Excel2003でデータベースを作成しました。 「日付」のところには、2008/11/18という形式で入力していますが、 VBAでフォームから「○○○○年○月~○○○○年○月までを抽出」として、 該当レコードを抽出するにはどうしたらよいでしょうか? いろいろ試してはみたのですが、よい方法・アイディアができませんでした。 VBA初心者です。よろしくお願いします。

  • Excel VBAで複数のExcelブックからある文字列を検索→抽出したものをまとめたい

    Excel VBAで以下の操作は可能でしょうか。 私はAccessVBAを少しさわる程度でExcel VBAはまったくわかりませんし、 まだ現物データを見ていないので説明不足ですが、 ご存知の方がいらっしゃいましたらどうぞご回答をお願いします。 コード等もあわせて教えて下さるととても助かります。 複数のExcelブックからある文字列を検索→抽出したものをまとめたい。 ・検索抽出したい文字列の入っているセル位置は固定。 ・抽出したデータを新たなファイルにするか、どうするかはまだ未定。 ・Excelブックは100個ほどある。

  • Excel2003のVBAで質問です。

    Excel2003のVBAで質問です。 名前や住所などの単純なデータベース(一人分で一行の)があります。 各行の一番左に、小さなユーザーフォームをそれぞれ付けます。 消したい行のユーザーフォームを押すと、その行が消える。 というマクロを作りたいと思っています。 必ずしも消したい行のセルにカーソルがあるとは限らないので、どうやって押されたユーザーフォームがある行番号を抽出したらいいのかわかりません。 説明がわかりにくくてすみません。 まだ勉強が足らないのですが、教えていただけたら助かります。 よろしくお願いします。

  • 日付データの抽出方法を教えてください

    ACCESS97のVBAで開発しています。ACCESSデータベースから該当する日付データを抽出したいのですが、YYYYのみの条件でYYYY/1/1からYYYY/12/31までのデータを抽出したいのです。SQLでできるのでしょうか?もしできるのならそのやり方を教えてください。

  • VBAのデータ抽出(間引き)について

    VBAのデータ抽出(間引き)について 当方VBA初心者なのですが、 VBA(EXCEL2007)を使用してグラフ作成をしようと思っています。 元データの書式は以下の通りでデータ行は30秒間隔で 一カ月分(8万行)あります。 2010/08/01 01:00:34     1112.83 2010/08/01 01:01:04     1110.43 2010/08/01 01:01:34     1111.87 2010/08/01 01:02:04     1112.23 2010/08/01 01:02:34     1112.43 2010/08/01 01:03:04     1112.03 2010/08/01 01:03:34     1110.83 2010/08/01 01:04:04     1112.43 2010/08/01 01:04:34     1110.63 ・・・ データ量が多すぎるので間引きしようと思っています。 間引き(抽出)条件は以下の様に考えています。 10行毎(5分毎)に値の最大値の行を抽出して別シートへコピー。 VBAマクロで処理するにはどの様な コードで実現可能でしょうか? 教えて頂きたく。よろしくお願いします。

  • ExcelVBAにて外部データ(*.csv)をSQL文を使って抽出する方法

    こんにちは VBAインポート問題で日々悩んでいるものです。 CSV形式のデータをODBCのシステムDSNに登録し、それをDAOでSQL要求しデータを抽出する方法がよくわかりません。 (1)データベースの定義記述内容 (2)レコードセットにSQL命令をかける記述 (3)抽出された内容をワークシートに貼る記述 等がよくわかりません。 DAOの場合、レコードセットを定義するのに set DB=DBEngine.OpenDatabase("******")があったり、なかったりする理由がわかりません。 突然、set rs = CurrentDb.OpenRecordset("*****") しているのはなぜでしょうか。

  • [Excel VBA] ODBCによる外部データ取込で書式が変わる。

    ExcelのVBAでODBCを使用してiSeriesのデータを取り込み、 シートに貼り付ける作業を行いました。 VB関連は素人ですが、↓を参考にして何とか作成しました。 http://firebird.skr.jp/wiki/Excel%20VBA%A5%B5%A5%F3%A5%D7%A5%EB(ADO%A1%A2ODBC) ところが、iSeriesの中では全角の数字として入っているデータが、 Excelで受信すると表示形式が日付に勝手に変更されてしまいます。 後で書式設定を標準に変えると半角のデータとなってしまいます。 何か解決法はありませんでしょうか? Windows XP Professional SP3 Excel 2003 iSeries v5.4 / v5.2 iSeries Access for Windows v5.2 SI23978

  • Excel2007でのデータ抽出

    前任者が作ったExcelでの給料計算表を使用していますが、先日そこに金種計算表を組み込めないかと言われました。 当方VBAなどは全くの初心者です。 VLOOKUP関数を使ってデータテーブルから金額を読み込み金種計算が出来るようにはしてみたのですが、データテーブルを更新すると金種計算表にある数式がエラーを吐いてしまいます。 金種計算表には一行目から =IF(B4="","",VLOOKUP(B4,テーブル!D4:BG4,10)) と関数を入れてあります。 B4は氏名欄です。 その際にはちゃんと金額が表示されていますが、入力フォームからデータテーブルを更新すると =IF(B4="","",VLOOKUP(B4,テーブル!#REF!,10)) となってしまいます。 金額を手入力すればいいのですが、全社員分となると膨大な量になってしまいます。 なんとか自動で抽出出来ないものでしょうか。 お知恵をお貸しいただければ幸いです。 稚拙な説明ではありますがよろしくお願いします。

  • データベースから特定の要件を満たすデータ抽出

    エクセルに入力したデータベースからデータの抽出をしたいと考えています。 データ抽出はフォームにチェックボタン(およそ60種類)で、条件をチェックします。 データベースからチェックに該当しないもののみを抽出して、他のシートへ転記したいのですが、 このようなファイルの作成方法を教えて頂けないでしょうか?