(license)みなさん、こんにちは!タカハシ(@ntakahashi0505)です。エクセルVBAでAccessデータベースを操作する方法についてシリーズでお伝えしています。前回が以下の記事ですか、何回かに分けてAccessデータベースからいくつかの方法でデータを抽出する方法についてお伝えしました。【エクセルVBAでAccess連携】SQLのJOINを使って複数のテーブルを組み合わせてデータを取り出すエクセルVBAでAccessデータベースを操作する方法についてシリーズでお伝えしています。今回はSQL文にJOINを使うことで複数のテーブルを組み合わせてデータを取り出す方法についてお伝えします。tonari-it.com2016.09.01少し方向性を変えまして、エクセルVBAからデータベースにレコードを追加する方法についてお伝えしたいと思います。今回はその最もシンプルな方法として、AddNewメソッドを使う方法についてお伝えします。値を代入しないフィールドはどうなるか実行結果まとめ連載目次:エクセルVBAでエクセルからAccessデータベースを操作するサンプルとするテーブルについてまずサンプルとして、このようなテーブルをAccessデータベース「test2.accdb」内に用意しました。テキスト型、「推計人口」は数値型のフィールドです。このテーブルに一行のレコードを追加するプログラムを作っていきたいと思います。Accessデータベースにレコードを追加する上記Accessファイル「test2.accdb」と同じフォルダに、Excelマクロ有効ブックファイルを作成し、このプログラムを作成してみましょう。Subこれまでのシリーズでお伝えしている部分のおさらいとしますと、6行目~11行目はADODBコネクションオブジェクトを生成して開くADODBレコードセットオブジェクトを生成するという処理、また飛んで26行目~29行目についてはADODBレコードセットオブジェクトを開放するADODBコネクションオブジェクトを閉じて開放するという処理です。ここはデータベースからデータを抽出する場合と、データベースにレコードを追加する場合とほぼ一緒の作りでOKです。残りの13行目~24行目がレコードの追加に関する部分となりますので、以下で説明をしていきます。レコード追加の際のADODBレコードセットのオープンレコードを追加する場合もADODBレコードセットオブジェクトを使うため、Openメソッドでオープンをします。ADODBコネクションオブジェクトと書きましたね。レコードの書き込みをする場合は、少し記述方法が異なります。adLockOptimisticと書きます。長いですが...この方法でオープンすることにより、ADODBレコードセットオブジェクトを通して、テーブルにレコード追加の処理をすることができるようになります。Openメソッドの第一パラメータはテーブル名またはSQL文まず、テーブル名ですが、データの抽出のときはここにはSQL文が入っていましたね。ここの部分には、実はSQLではなくてテーブル名をそのまま記述することができます。adoCnと抽出したデータは結果が同様になります。このように、ADODBレコードセットオブジェクトのOpenメソッドの一つ目のパラメータとしては、テーブル名とSQL文とどちらでも良いということを覚えておいて頂ければと思います。カーソルタイプ、ロックタイプのパラメータデータの抽出のときには必要なかったパラメータであるadOpenKeyset,adLockOptimisticですが、これはそれぞれカーソルタイプ、ロックタイプを指定するパラメータとなります。データ抽出の際には省略可能でしたが、既定値ではデータの追加が許可されませんので、データの追加の際にはこれらのパラメータを指定するようにしましょう。AddNew,Upadateメソッドでレコードを追加するレコードの追加をする場合はADODBレコードセットオブジェクト.AddNewADODBレコードセットオブジェクト!フィールド名1=値1ADODBレコードセットオブジェクト!フィールド名2=値2...ADODBレコードセットオブジェクト.Updateと記述します。AddNewメソッドで新規レコードを追加します。その時点で、カレントレコード(現在対象となるレコード)が、新規追加されたレコードに移動します。次にそのカレントレコードの各フィールドに値を代入します。フィールドはADODBレコードセットオブジェクトに続き「!」(エクスクラメーションマーク)、そしてフィールド名で表現することができます。最後にUpdateメソッドでカレントレコードの変更が保存されます。ちなみに、ADODBレコードセットオブジェクトについてWithを使用すると、プログラムがスッキリしますね。代入する値の指定の方法また代入する値ですが数値型:そのままテキスト型:ダブルクォーテーション(”)で囲む日付型:シャープ記号(#)で囲むというルールがあります。日付型はならではのルールなので注意ください。値を代入しないフィールドはどうなるかまたテーブルにはフィールドが存在するのにAddNewメソッドとUpdateメソッドの間に指定しなかったフィールドはどうなるのか、ということについてはフィールドがオートナンバー型:自動で採番されるフィールドの入力規則が必須ではない:Null値が代入されるフィールドの入力規則が必須:エラーが発生するとなります。実行結果プログラムの実行結果です。このように一行だけではありますが、無事にレコードが追加されていますね。まとめ以上、エクセルVBAからAccessデータベースのテーブルにレコードを追加する方法についてお伝えしました。ADODBレコードセットオブジェクトに対するAddNewメソッド、Updateメソッド、そして各フィールドへの代入の方法について覚えて頂ければよいと思います。ところで、SQLにちょっと詳しい方は「SQLのINSERT文を使ってもいいのでは?」と思われるかも知れません。その方法でも目的を達成することができるのですが、エクセルVBAからレコードを追加する場合、今回のADODBレコードセットオブジェクトに対するAddNewメソッド、Updateメソッドの方法のほうが処理が速いのです。全部SQLでできたら、独自のメソッドとか覚えなくて楽は楽なんですけどね。次回ですが、複数のレコードを追加する方法についてお伝えできればと思います。エクセルVBAでAccessデータベースに複数のレコードを追加する方法とその実行速度についてエクセルVBAでAccessデータベースを操作する方法についてお伝えしています。今回はエクセルVBAでAccessデータベースに複数のレコードを追加する方法とその実行速度についてお伝えします。tonari-it.com2016.09.22どうぞお楽しみに!連載目次:エクセルVBAでエクセルからAccessデータベースを操作するエクセルと相性の良いデータベースとして第一候補として挙がるAccess。エクセルをインターフェース、AccessをデータベースとしてエクセルVBAを使って連携する方法とその様々なテクニックについてお伝えしていきます。プランノーツ代表、コミュニティ「ノンプロ研」主宰。ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ★フォロー頂ければ嬉しいです。「コミュニティ+講座」形式で継続性&教え合える環境も提供。!ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。関連記事Excel・VBA活用術エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方ShapesオブジェクトのAddPictureメソッドで、エクセルのシート上に画像を追加する方法をご紹介しています。画像のサイズや位置が決まっている場合、手動で調整するのは手間なもの。エクセルVBAで位置やサイズを指定しておけば、面倒な調整が不要になりますよ。【Excel】勝手な編集は許しません!初心者向けのシート保護設定エクセルの「シートの保護」を使ったシートの値編集を制限したり、パスワードを使って特定の人だけに操作できるようにする方法をご紹介しています。関数やマクロを使ったエクセルブックのように、値やシートを操作されると正しく動作しなくなる、というときに便利な機能です。不要なシートを作らせない!エクセルのデフォルトシート数を変更する方法エクセルのブックを開いたときに自動的に作成されるシート数を、任意の数に変更する方法をご紹介しています。オプションから基本設定を開いて、該当項目の値を設定するだけで変更完了!「ブックを開いたときに不要なシートがある!」「毎回不要なシートを削除するのが面倒だ!」という方にオススメです。2018.03.15Excel・VBA活用術エクセルVBAでセルが結合されているかどうか、またそのセルの数を判定する方法エクセルVBAでセルが結合されているかどうか、またその結合されているセルの数を判定する方法を紹介します。結合セルがある場合のエクセル表をHTML形式に出力するプログラムも合わせて紹介します。請求書マクロを題材にエクセルVBAでテーブル操作する方法をお伝えしています。今回は、ListRowsオブジェクトがポイント。テーブルのデータ行についてループ処理を行う方法についてお伝えしていきます。シリーズで、請求データ一覧から請求書を作成する方法についてお伝えしています。今回は、エクセルVBAでセル範囲を並行移動する方法とセル範囲をリサイズする方法です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった2020.02.072020.02.08GASでコピーしたGoogleスライドのプレゼンテーションを取得する方法2020.02.052020.02.05Facebookページいつも隣にitのお仕事タイトルとURLをコピーしました。