教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 外部アプリケーション連携】(Access連携)Accessテーブルにデータを新規追加するにはどうすればいいの?教えて!

f:id:m_kbou:20210625102548p:plain

Accessテーブルにデータを新規追加する方法について紹介します。ExcelとAccessとの連携によるデータのやり取りでは基本中の基本操作となります。是非一連の流れを理解して活用してみて下さい。

 

 

構文

記述方法は以下の通りとなります。

①データベースへの接続
Set[変数1]= OpenDatabase(”[データベースの登録パス]”)

②テーブルへの接続
Set[変数2]=[変数1].OpenRecordset(”[SQL文]”)

-----------------------------

[変数2].AddNew
[変数2]![項目]=[シート名及びセル]
[変数2].Update

-----------------------------
②テーブルの切断
[変数2].Close
Set[変数2]= Nothing

①データベースの切断
[変数1].Close
Set[変数1]= Nothing

[説明]:

テーブルのデータを取り込むには

 [変数2].AddNew
 [変数2]![項目]=[シート名及びセル]
 [変数2].Update

と記述します。

各記述についての説明は以下の通りです。

・[変数2].AddNew
 ⇒「この後の処理に書かれている内容でテーブル([変数2])にデータを登録(AddNew)して下さい。」との意味になります。

・[変数2]![項目]=[シート名及びセル]
 ⇒Excelシートのセル([シート名及びセル])に入力されているデータを、テーブル([変数2])の項目([項目])にセットして下さい。」との意味になります。

・[変数2].Update
 ⇒「上記でテーブル([変数2])に追加したデータを保存(Update)して下さい。」との意味になります。

内容を纏めると、「指定したシートのセル([シート名及びセル])に入力されているデータを、テーブル([変数2])の項目([項目])に登録して下さい。」との意味になります。

-------------------------------

※Accessテーブルのデータを操作するには、事前にAccessデータベースへの接続(上記①データベースへの接続)やテーブルへの接続(上記②テーブルへの接続)の指定が必要となります。また、接続した後はテーブルの切断(上記②テーブルの切断)やデータベースの切断(上記①データベースの切断)の指定も必要となります。データベースへの接続/切断についてはこちらを、テーブルへの接続/切断についてはこちらを参照して下さい。

-------------------------------

[記述例]:

r.AddNew
r![氏名] = Sheets("従業員").Range("A1")
r![番号] = Sheets("従業員").Range("B1")
r![部署] = Sheets("従業員").Range("C1")
r![性別] = Sheets("従業員").Range("D1")
r![年齢] = Sheets("従業員").Range("E1")
r.Update

 

使い方

使い方について具体的に説明します。

(例①)テーブルへの登録件数が1件の場合

テーブルへの登録件数が1件の場合について説明します。

[プログラミング例]:

Sub サンプル()

  '↓処理①
  Dim db As Database
  Dim r As Recordset
  Dim 行 As Integer

  '↓処理②
  Set db = OpenDatabase("C:\テスト\従業員.accdb")

  '↓処理③
  Set r = db.OpenRecordset("select * from T_従業員")

  '↓処理④
  r.AddNew
  r![氏名] = Sheets("従業員").Range("A1")
  r![番号] = Sheets("従業員").Range("B1")
  r![部署] = Sheets("従業員").Range("C1")
  r![性別] = Sheets("従業員").Range("D1")
  r![年齢] = Sheets("従業員").Range("E1")
  r.Update

  '↓処理⑤
  r.Close
  Set r = Nothing

  '↓処理⑥
  db.Close
  Set db = Nothing

  '↓処理⑦
  MsgBox "登録しました。"

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
データベース/テーブルへの接続他を格納するための変数定義となります。

[処理②]:データベースへの接続
※データベースへの接続についてはこちらを参照して下さい。

[処理③]:テーブルへの接続
※テーブルへの接続についてはこちらを参照して下さい。

[処理④]:テーブルへのデータ登録
最初にAddNewでテーブルへの登録宣言を行い、次にA1セル~E1セルに入力されている値をテーブルの各項目(氏名・番号・部署・性別・年齢)にセットします。最後にUpdateで保存します。

[処理⑤]:テーブルの切断
※テーブルの切断についてはこちらを参照して下さい。

[処理⑥]:データベースの切断
※データベースの切断についてはこちらを参照して下さい。

[処理⑦]:登録完了メッセージの表示
最後に”登録しました。”をMsgBoxで表示します。

f:id:m_kbou:20210625102629p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。また、Accessデータベースとの接続には事前設定が必要となります。事前準備はこちらを参考にして下さい。

[実行例]:

(事前準備)

C:\テストにAccessデータベース(従業員.accdb)が登録されている必要があります。

f:id:m_kbou:20200511165951p:plain

また、従業員.accdbデータベースの中にはT_従業員テーブルが登録されています。

f:id:m_kbou:20210625102649p:plain

更に、T_従業員テーブルの中には何も登録されていない状況です。

f:id:m_kbou:20210625102706p:plain

(実行内容)

①A1セル~E1セルにデータが登録されており、<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210625102742p:plain

②「登録しました。」がMsgBoxで表示されます。

f:id:m_kbou:20210625102758p:plain

③再度T_従業員テーブルの中を確認すると、テーブルの各項目(氏名・番号・部署・性別・年齢)にデータがセットされている事が分かります。

f:id:m_kbou:20210625102814p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

Accessテーブルへデータを登録する方法(登録件数が1件の場合)についての説明は以上です。

 

(例②)テーブルへの登録件数が複数件の場合

テーブルへの登録件数が複数件の場合について説明します。

[プログラミング例]:

Sub サンプル()

  '↓処理①
  Dim db As Database
  Dim r As Recordset
  Dim 行 As Integer

  '↓処理②
  Set db = OpenDatabase("C:\テスト\従業員.accdb")

  '↓処理③
  Set r = db.OpenRecordset("select * from T_従業員")

  '↓処理④
  For 行 = 1 To 4
    r.AddNew
    r![氏名] = Sheets("従業員").Range("A" & 行)
    r![番号] = Sheets("従業員").Range("B" & 行)
    r![部署] = Sheets("従業員").Range("C" & 行)
    r![性別] = Sheets("従業員").Range("D" & 行)
    r![年齢] = Sheets("従業員").Range("E" & 行)
    r.Update
  Next

  '↓処理⑤
  r.Close
  Set r = Nothing

  '↓処理⑥
  db.Close
  Set db = Nothing

  '↓処理⑦
  MsgBox "登録しました。"

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
データベース/テーブルへの接続他を格納するための変数定義となります。

[処理②]:データベースへの接続
※データベースへの接続についてはこちらを参照して下さい。

[処理③]:テーブルへの接続
※テーブルへの接続についてはこちらを参照して下さい。

[処理④]:テーブルへのデータ登録
複数件のデータをテーブルに登録するために、繰り返し処理であるFor~Next文を使用して「AddNewでテーブルへの登録宣言を行い、A列~E列に入力されている値をテーブルの各項目(氏名・番号・部署・性別・年齢)にセットし、最後にUpdateで保存する。」の流れで1行目~4行目まで繰り返します。

[処理⑤]:テーブルの切断
※テーブルの切断についてはこちらを参照して下さい。

[処理⑥]:データベースの切断
※データベースの切断についてはこちらを参照して下さい。

[処理⑦]:登録完了メッセージの表示
最後に”登録しました。”をMsgBoxで表示します。

f:id:m_kbou:20210625110420p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。また、Accessデータベースとの接続には事前設定が必要となります。事前準備はこちらを参考にして下さい。

[実行例]:

(事前準備)

C:\テストにAccessデータベース(従業員.accdb)が登録されている必要があります。

f:id:m_kbou:20200511165951p:plain

また、従業員.accdbデータベースの中にはT_従業員テーブルが登録されています。

f:id:m_kbou:20210625102649p:plain

更に、T_従業員テーブルの中には何も登録されていない状況です。

f:id:m_kbou:20210625102706p:plain

(実行内容)

①A1セル~E4セルにデータが登録されており、<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210625110442p:plain

②「登録しました。」がMsgBoxで表示されます。

f:id:m_kbou:20210625110502p:plain

③再度T_従業員テーブルの中を確認すると、テーブルの各項目(氏名・番号・部署・性別・年齢)にデータがセットされている事が分かります。

f:id:m_kbou:20210625110515p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

Accessテーブルへデータを登録する方法(登録件数が複数件の場合)についての説明は以上です。

 

おわりに

今回はAccessテーブルへデータを登録する方法について説明しました。テーブルへ複数件のデータを登録するには、For~Next文(又はDo~Loop文)を用いて1行目~最終行までのデータを順番に読み込み&登録を繰り返す流れとなります。是非覚えておいて下さい。また、今回の様にExcel⇔Accessの連携した処理を行う場合に関しては、予め事前の準備作業が必要となります。こちらも忘れずに実施しておくようにお願いします。