Excel VBA ADOで外部データベースのテーブルにデータを追加する

スポンサーリンク

外部データベースのテーブルにデータを追加する方法

外部データベースのテーブルに更新可能な空白の新しいレコードを追加するには
Recordset【レコードセット】オブジェクトAddNew【アドニュー】メソッドを使用します。

新しいレコードが追加されると追加されたレコードにカーソルが移動します。

追加したレコードの各Field【フィールド】オブジェクトにValue【バリュー】プロパティでデータを設定しRecordset【レコードセット】オブジェクトのUpdate【アップデイト】メソッドを使用してレコードの更新処理を実行します。

AddNew【アドニュー】メソッド

外部データベースのテーブルに新しいレコードを追加するには、Recordset【レコードセット】オブジェクトのAddNew【アドニュー】メソッドを使用します。

AddNew【レコードセットアドニュー】メソッドの書式と設定値の説明

オブジェクト変数.AddNew


Update【アップデイト】メソッド

外部データベースのレコードの更新処理を実行するには、Recordset【レコードセット】オブジェクトのUpdate【アップデイト】メソッドを使用します。

Update【アップデイト】メソッドの書式と設定値の説明

オブジェクト変数.Update

  • オブジェクト変数(必須)
    Recordset【レコードセット】オブジェクトのインスタンスが格納されているオブジェクト変数を指定します。

Accessの商品マスターテーブルに新しいレコードを追加して
ワークシートの商品マスターデータを登録する例


コードと解説

ADOのライブラリファイルへの参照設定がされていることが前提のコード例です。

Sub レコード追加()
Dim コネクション As New ADODB.Connection
Dim レコード As New ADODB.Recordset
コネクション.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:¥Users¥Desktop¥Database1.accdb;"
レコード.Open Source:="商品マスター", ActiveConnection:=コネクション, _
CursorType:=adOpenKeyset, LockType:=adLockPessimistic
With レコード
.AddNew
.Fields("商品コード").Value = Range("A2").Value
.Fields("商品名").Value = Range("B2").Value
.Fields("仕入れ単価").Value = Range("C2").Value
.Fields("販売単価").Value = Range("D2").Value
On Error GoTo エラー処理
.Update
End With
MsgBox "商品データを登録しました。"
レコード.Close: Set レコード = Nothing
コネクション.Close: Set コネクション = Nothing
Exit Sub
エラー処理:
MsgBox "データが重複しています。"
Set レコード = Nothing
コネクション.Close: Set コネクション = Nothing
End Sub
2行目【Dim コネクション As New ADODB.Connection】
Dim【デム】ステートメントでNew【ニュー】キーワード使用して外部データベースとの接続を確立するConnection【コネクション】オブジェクトのインスタンスを生成してオブジェクト変数「コネクション」に格納します。


3行目【Dim レコード As New ADODB.Recordset】
Dim【デム】ステートメントでNew【ニュー】キーワード使用して外部データベースのレコードを参照するRecordset【レコードセット】オブジェクトのインスタンスを生成してオブジェクト変数「レコード」に格納します。


4行目~6行目【コネクション.Open ConnectionString:= _
“Provider=Microsoft.ACE.OLEDB.12.0;” & _
“Data Source=C:¥Users¥Desktop¥Database1.accdb;”】

Connection【コネクション】オブジェクトのOpen【オープン】メソッドを使用して外部データベースの接続をします。


7行目~8行目【レコード.Open Source:=”商品マスター”, ActiveConnection:=コネクション, _
CursorType:=adOpenKeyset, LockType:=adLockPessimistic】

Recordset【レコードセット】オブジェクトのOpen【オープン】メソッドを使用して外部データベースのレコードを参照します。引数CursorType【カーソルタイプ】を他のユーザーによって削除されたレコードにアクセスできない点以外、すべての動作が許可される動的カーソルのadOpenKeyset【キーセット】に指定し引数LockType【ロックタイプ】を編集直後のレコードをロックするadLockPessimistic【パスミステイク】に指定します。


9行目【With レコード】
Rcordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」をWith【ウィズ】ステートメントで指定します。


10行目【.AddNew】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してAddNew【アドニュー】メソッドで新しい空白のレコードを追加してカーソルを取得します。


11行目【.Fields(“商品コード”).Value = Range(“A2”).Value】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してFields【フィールズ】プロパティで商品コードフィールドのField【フィールド】オブジェクトを参照してA2セルの値を代入します。


12行目【.Fields(“商品名”).Value = Range(“B2”).Value】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してFields【フィールズ】プロパティで商品名フィールドのField【フィールド】オブジェクトを参照してB2セルの値を代入します。


13行目【.Fields(“仕入れ単価”).Value = Range(“C2”).Value】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してFields【フィールズ】プロパティで仕入れ単価フィールドのField【フィールド】オブジェクトを参照してC2セルの値を代入します。


14行目【.Fields(“販売単価”).Value = Range(“D2”).Value】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してFields【フィールズ】プロパティで販売単価フィールドのField【フィールド】オブジェクトを参照してD2セルの値を代入します。


15行目【On Error GoTo エラー処理】
外部データベースの主キーとなる商品コードが既に登録されている場合(重複している場合)次のUpdate【アップデイト】メソッド(データの更新)でエラーになるので処理が中断してデバックモードにならないようにOn Error(オンエラー)ステートメント
GoToステートメントを使用してエラーが発生した場合、エラー処理ラベルがある22行目まで処理をジャンプします。


16行目【.Update】
With【ウィズ】ステートメントで指定したRecordset【レコードセット】オブジェクトが格納されているオブジェクト変数「レコード」に対してUpdate【アップデイト】メソッドを実行してレコードの更新を実行します。


18行目【MsgBox “商品データを登録しました。”】
MsgBox【メッセージボックス】関数を使用してデータの登録が完了したことをユーザーに伝えます。


19行目【レコード.Close: Set レコード = Nothing】
Recordset【レコードセット】オブジェクトのClose【クローズ】メソッドでレコードの参照を切断し、Nothing【ナッシング】を代入して
メモリー領域を解放します。


20行目【コネクション.Close: Set コネクション = Nothing】
Connection【コネクション】オブジェクトのClose【クローズ】メソッドで外部データベースの接続を切断し、Nothing【ナッシング】を代入してメモリー領域を解放します。


21行目【Exit Sub】
Exit【エグジット】ステートメントでSub【サブ】プロシージャーを途中で終了させます。


22行目【エラー処理:】
16行目のUpdate【アップデイト】メソッドで主キーの商品コードの重複がありエラーになった場合このラベルまで処理がジャンプします。以降の処理はエラーが発生した場合の処理になります。


23行目【MsgBox “データが重複しています。”】
MsgBox【メッセージボックス】関数を使用してユーザーにエラーが発生したことを伝えます。


24行目【Set レコード = Nothing】
エラーが発生しているRecordset【レコードセット】オブジェクトのインスタンス(複製)が格納されているオブジェクト変数「レコード」にNothing【ナッシング】を代入してメモリーを解放します。


25行目【コネクション.Close: Set コネクション = Nothing】
Connection【コネクション】オブジェクトのClose【クローズ】メソッドで外部データベースの接続を切断し、Nothing【ナッシング】を代入してメモリー領域を解放して処理を終了します。


実行結果


以上で、ADOで外部データベースのテーブルにデータを追加する方法についての解説を終了します。ありがとうございます。

スポンサーリンク

関連記事・広告