ExcelVBAだいぶ前からまとめてみたいとは思っていたのですが、書きたいことのボリュームがどんどん増えてゆき、シリーズものになってしまいました...。クラスで処理をまとめるこの連載がもっと実用的なサンプルで書籍になりました!連携させるメリット小規模なデータ量ならExcelだけでもなんとかなるし、Accessだって単体でアプリケーションも作れます。AccessのデータベースをExcelから操作する(私にとっての)メリットについて。私は、出産前は検査の仕事をしておりまして、1/1000mm単位の膨大な量の測定データを毎日毎日Excelに溜め込んでいました。Excelにデータを格納すると、グラフのテンプレートさえ作っておけば、自動でグラフに描写されていくので便利なんです。データを溜めれば溜めるほどファイルサイズは大きく、動作も重くなる...。結局、ある程度の期間でファイルを新規にし、またそこへデータを溜めていく日々。そこで、まずはExcelの測定用シート上にデータを入力データをAccessのデータベースへ格納データを見たいときはAccessからExcelのグラフ用シートへ読み込みという方式へたどり着きました。Excel自体にデータは格納されないので、ファイルサイズは増えないし動きもサクサク。いろんな条件で絞り込んでデータを読み込めるから、前より便利になりました!ExcelのVBAは勉強しやすいMicroSoftOfficeにはどれもVBAが使えますが、ExcelVBAが一番ユーザーが多いんじゃないかな、と、思っています。Excelからだととっつきやすく、ユーザーが多いということは、それだけ勉強している人も多くて、ネット上でも情報が抱負です。私の会社もそうですが、業務ソフトの自社開発は使用面でも金額面でも非常にメリットが大きいです。Excel+Accessでかなり実用的なものもつくれちゃいます。́∀`*)Accessでテーブルを用意というわけで、AccessではVBAを使わずに、データベースのテーブル設計だけやっておきます。テーブルとは、こんな感じのものです。フィールドの名前と型(数値とか、文字列とか)を指定しておいて、そこへレコードを登録していきます。フィールドには必ず1つ以上のキーと呼ばれる重複しないデータの入るフィールドを設定する必要があります。この例なら、男か女かではひとつのレコードを特定できませんよね。名前も、同じ人がいるかもしれないのでキーにはできません。ひとつでないとならないので、IDや番号などを設定することが多いです。ADOとSQL文を使ってExcelから読み書きデータベースへ読み書きするには、SQLという言語を使います。ExcelVBAでSQL文はそのままでは認識できないので、string型で宣言した変数に文字列としてSQL文を書いておいて、それをADOというインタフェースを使ってAccessを操作する...という感じです。Objectsの略で、Microsoftが提唱しているデータアクセスのための技術だとか。アプリケーション、言語などに依存しないため使い勝手がよいらしいです!基本コード参照設定は使わない方法で書いてみたので、できるだけ幅広い環境で動けばいいなと思ってます。参照設定の有無の違いについては、こちらの記事もご参照ください。Sub宣言(2~5行)接続・セット(7~12行)処理(15~36行)切断(39~42行)というのが一連の流れかなという感じです。処理部分(15~36行)だけ変えれば汎用的に使えそう。7,8行目のAccessファイル名指定と、11,12行目のファイルを開くところですが、Accessのバージョンが2003までと2007以降で書き方が変わってきます。Excelへの出力については、一気にズバっと貼り付けする方法と、カスタマイズしながら貼り付けできる(量が多いと遅そう)方法があるみたいですね。両方書いてみましたが、用途によって使い分ければ良さそうです。気がついたので追記します。(ADO)次回は、具体的に「こんなモノをつくるぞ」という提示をして、実際にAccess+Excelで動くプログラムを作って解説してみたいと思っています。よろしければお付き合いください。Lab公開日:2013/03/07更新日:2017/05/19ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。私がExcelVBAでよく使う便利なコード・スニペットまとめプログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいことExcelVBAのクラスモジュールって何?という人向けの使い方まとめ書籍を執筆しています。OfficeExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。PM素晴らしい内容だと思います。AM曾進さん、コメントありがとうございます。前に書いた記事でして、Officeのバージョンが変わったりなどして今現在用意できるDLサンプルが無く、申し訳ありません。PMラムさん、コメントありがとうございます。その組み合わせは試したことがないので確実なことは言えないのですが、バージョンが違うもの同士でも動いた経験はあります。バックアップを確実にとって検証してみるのが良いと思います。PM今回、ExcelVBAからAccessのデータベースにアクセスすることになり今回のページが大変役に立ち助かりました。小規模の会社からの依頼なんですが複数PCからExcelVBAのフォーム画面から入力してAccessへ更新するという内容なんですが複数PCからの更新はどのようにしたらいいのでしょうか?また、Accessは破損しやすいと聞いているのでバックアップもVBA側からしたいのですがその方法などがあればアドバイスして頂きたいのですが・・・。お時間があるときに教えてください。PMともさん、コメントありがとうございます。私は仕事では、Accessファイルをネットワークフォルダに入れておいて、つながっている複数のPCから更新しています。Accessの仕様上、多数の人間が頻繁に、同時・大量に書き換えるような目的のシステムではないことが前提です。バックアップは、ネットワークフォルダの中身を毎日同じ時間に別ドライブへ、というツールを使っているのでVBAでやったことはありません。やるならFileCopyステートメントで別ドライブへコピーとかでしょうか。最適化も定期的に行ったほうが良いと思います。私はたまーに中身をチェックして手動で行うので自動化したことはないのですが、Excelからでもできるようですので、一応参考記事のリンクを貼っておきます。教えて!gooAccessを最適化@Excelマクロ・VBAのお勉強ExcelVBAテクニックExcelって頑張ればなんでもできちゃうのですが、「そこまでExcelでやらなくても」ってところまでやってしまうと、制約が多くなって逆に使いにくくなっちゃうケースもよくあります。複数人で運用する場合、ルールが守られないことには回らないので、別のツールを使ったり、部分的には手動にしたほうが結果的に楽だったりということもあるので、いろんな方法を検討してみてください。PMyouさん、ありがとうございます^^もう少し聞きたいことがあるのですがアクセスでレコードレックというのは可能なんでしょうか??可能ならレコードロックされているかどうかのチェックなどはどうやればいいのでしょうか??何度も質問してしまい申し訳ありません。AMともさん、こんにちは。こちらの記事が参考になると思います。ADOによるレコードセットの作成1つめの記事にもあるとおり、前提としてAccessは、排他制御が必要になるほどマルチユーザーでガンガン使うようなシステムには向いていません。それでもどうにか実装してみるとなると、レコードセットを.Openするときにロックタイプを指定できるので、それを利用するという感じですね。AMyouさんありがとうございます。2~3台で稼働ということでしたからたぶん大丈夫かと思っています。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。週間人気記事ExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。-2019/09/27運営者*you非IT系の会社で社内業務アプリ開発したりWeb担してたり。ExcelとかAccessの本を書いてます。