2013
3
07

ExcelVBAとAccessの連携 第1回 Excelからデータベースへの接続

だいぶ前からまとめてみたいとは思っていたのですが、書きたいことのボリュームがどんどん増えてゆき、シリーズものになってしまいました…。できるだけ分かりやすく書けるようがんばります!


関連記事

この連載がもっと実用的なサンプルで書籍になりました!

連携させるメリット

小規模なデータ量ならExcelだけでもなんとかなるし、Accessだって単体でアプリケーションも作れます。が、敢えてAccessのデータベースをExcelから操作する(私にとっての)メリットについて。

グラフ化が容易

私は、出産前は検査の仕事をしておりまして、1/1000mm単位の膨大な量の測定データを毎日毎日Excelに溜め込んでいました。Excelにデータを格納すると、グラフのテンプレートさえ作っておけば、自動でグラフに描写されていくので便利なんです。

でも、データを溜めれば溜めるほどファイルサイズは大きく、動作も重くなる…。結局、ある程度の期間でファイルを新規にし、またそこへデータを溜めていく日々。どうなのこれ…。

そこで、

  1. まずはExcelの測定用シート上にデータを入力
  2. データをAccessのデータベースへ格納
  3. データを見たいときはAccessからExcelのグラフ用シートへ読み込み

という方式へたどり着きました。Excel自体にデータは格納されないので、ファイルサイズは増えないし動きもサクサク。いろんな条件で絞り込んでデータを読み込めるから、前より便利になりました!

ExcelのVBAは勉強しやすい

MicroSoftOfficeにはどれもVBAが使えますが、ExcelVBAが一番ユーザーが多いんじゃないかな、と、思っています。

もちろんAccessも多いと思うんですが、使えるようになるまでの敷居がなかなか高く、ライトユーザーさんに敬遠される…(;´Д`) Excelからだととっつきやすく、ユーザーが多いということは、それだけ勉強している人も多くて、ネット上でも情報が抱負です。

中小企業の強い味方

私の会社もそうですが、業務ソフトの自社開発は使用面でも金額面でも非常にメリットが大きいです。Excel+Accessでかなり実用的なものもつくれちゃいます。

2016/6/29追記:このページをたくさんの方にご覧にいただいたおかげで、貴重な体験をさせていただきました…! 参考書選びの選択肢のひとつにしていただけたら光栄です(*´∀`*)

Accessでテーブルを用意

というわけで、AccessではVBAを使わずに、データベースのテーブル設計だけやっておきます。

130307-1

テーブルとは、こんな感じのものです。フィールドの名前と型(数値とか、文字列とか)を指定しておいて、そこへレコードを登録していきます。

フィールドには必ず1つ以上のキーと呼ばれる重複しないデータの入るフィールドを設定する必要があります。

この例なら、男か女かではひとつのレコードを特定できませんよね。名前も、同じ人がいるかもしれないのでキーにはできません。必ずひとつでないとならないので、IDや番号などを設定することが多いです。

ADOとSQL文を使ってExcelから読み書き

データベースへ読み書きするには、SQLという言語を使います。ExcelVBAでSQL文はそのままでは認識できないので、string型で宣言した変数に文字列としてSQL文を書いておいて、それをADOというインタフェースを使ってAccessを操作する…という感じです。

ADOというのはActiveX Data Objectsの略で、Microsoftが提唱しているデータアクセスのための技術だとか。アプリケーション、言語などに依存しないため使い勝手がよいらしいです!

基本コード

参照設定は使わない方法で書いてみたので、できるだけ幅広い環境で動けばいいなと思ってます。

参照設定の有無の違いについては、こちらの記事もご参照ください。

  1. 宣言(2~5行)
  2. 接続・セット(7~12行)
  3. 処理(15~36行)
  4. 切断(39~42行)

というのが一連の流れかなという感じです。処理部分(15~36行)だけ変えれば汎用的に使えそう。

7,8行目のAccessファイル名指定と、11,12行目のファイルを開くところですが、Accessのバージョンが2003までと2007以降で書き方が変わってきます。

Excelへの出力については、一気にズバっと貼り付けする方法と、カスタマイズしながら貼り付けできる(量が多いと遅そう)方法があるみたいですね。両方書いてみましたが、用途によって使い分ければ良さそうです。

次回は、具体的に「こんなモノをつくるぞ」という提示をして、実際にAccess+Excelで動くプログラムを作って解説してみたいと思っています。よろしければお付き合いください。

参考

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 618
  • RSSを登録

公開日:2013/03/07
更新日:2014/04/29


4件のコメント

  • テスター
    2013年12月10日 6:28 PM

    ExcelでOracle,DB2,Sybase,MySQL,Postgre,SQLServer,Sqliteのデータを取得/更新するなら、ExcelDBToolをお勧めします。
    テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
    一括Excelの各シートに出力することもできます。データ作成の機能を使って、
    氏名、住所、電話など60種類以上のダミーデータも作成できます。
    作成したデータを直接DBに登録して、シート名とテーブル名が一致すれば、
    一括で複数テーブルのデータもExcelに取得できます。
    詳しくは下記サイトをご参照ください。

    http://www.superdbtool.com
    ベクターからもダウンロードできます。

    またExcelDBToolを使って、テストデータを作成するのは非常に簡単です。
    作成できるダミーデータ種類:
    郵便番号, 都道府県, 企業名, 市区,町村,最寄駅,最寄駅ふりがな,路線,銀行コード, 銀行名, 銀行カタカナ, 支店コード, 支店名, 支店カタカナ,E-Mail, URL, 携帯, 苗字のみ, 氏名, 住所, 住所ふりがな,性別, 年齢, 血液型, 固定電話, 婚姻, ふりがな, 大学名,身長,体重固定値,国籍,国籍英語,国籍英語略,クレジットカード会社,クレジットカード番号,有効期限,IPアドレス,業種大分類,業種大分類名称,業種中分類,業種中分類名称,業種小分類,業種小分類名称,職種大分類,職種大分類名称,職種中分類,職種中分類名称,職種小分類,職種小分類名称,数値連番,整数・小数点数,英数混在,文字列+連番,文字列+全角連番全角漢字,ひらがな,全角カタカナ,半角カタカナ,全角英数,全角数値,全角英字,全半混在日付,時間,タイムスタンプ,特殊文字

    • *you
      2013年12月10日 7:01 PM

      こんなツールがあるんですね!情報ありがとうございますー!

  • 曾 進
    2015年5月29日 12:22 PM

    素晴らしい内容だと思います。
    サンプルプログラム(Excel+MDB)一式をダウンロードできますでしょうか?

    • *you
      2015年6月1日 11:20 AM

      曾進さん、コメントありがとうございます。

      だいぶ前に書いた記事でして、Officeのバージョンが変わったりなどして今現在用意できるDLサンプルが無く、申し訳ありません。産休明けて落ち着いたら検討してみようかと思います!

コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top