KENスクールブログ-パソコンスクール パソコン教室 KENスクール

Access

【 Access VBA 】マクロからVBAへの変換方法

startup-593324_640

AccessにはExcelと同様に「マクロ」があります。
マクロを使用すると、さまざまな作業を自動化することができます。

操作方法は以下のとおりです。

① 「作成」タブを選択し、「マクロ」ボタンをクリックします。

img01

② マクロのアクションを選択する画面が表示されます。

img02

③ ドロップダウンリストをクリックすると、アクションの一覧が表示されます。

img03

④ 例えば「データベースを閉じる」を選択し、マクロを保存します。

マクロ名は「練習」とします。
img04

ナビゲーションウィンドウに保存したマクロが表示されます。

Excelのマクロは、記録をした後にVisual Basic Editorを開くと、記録内容をVBAに変換したコードをすぐに確認することができます。しかし、Accessのマクロは、記録をしただけではVBAに変換したコードを確認することができません。VBAに変換したコードを確認するためには、続けて以下の操作を行います。

⑤ 「デザイン」タブを選択し、「マクロをVisual Basicに変換」ボタンをクリックします。

img05

⑥ 下記ダイアログボックスが表示されたら、「変換」ボタンをクリックします。

img06

※「エラー処理コードを追加する」と「コメントを含める」については後述します。

変換が成功するとVisual Basic Editorが自動的に立ち上がり、プロジェクトエクスプローラー内に「変換するマクロ:練習」が作成されます。ダブルクリックをするとVBAに変換した内容を確認することができます。

img07

上図の赤線で囲まれている箇所は「コメント」です。VBAではシングルクォーテーションの後ろに書いた1行分がコメントになります。コメント部分は緑色で表示され、プログラム実行時に無視されます。プログラムの説明などをコメントとして残しておくと、処理内容を把握しやすくなります。

また、青線で囲まれている箇所は「エラー処理」です。プログラム実行時に何らかの理由でエラーが発生すると異常終了となりますが、エラー処理を記述することにより正常終了させることができます。マクロではエラー処理を行うことができませんが、「エラー処理コードを追加する」にチェックを入れるとプログラム内にエラー処理を含むことができます。

「DoCmd.RunCommand acCmdCloseDatabase」の部分が、今回記録した「データベースを閉じる」処理にあたります。マクロで行うことができる処理は、VBAでは「DoCmdオブジェクト」を使うことでほとんど実行できます。

DoCmdオブジェクトには「データベースを閉じる」以外にも多くのメソッドが用意されています。VBAで記述したいマクロのアクションがありましたら、ここまでの手順を行うことで、VBAではどのように記述されるのかを確認することができます。


カテゴリー: Access VBA プログラム

ADOを使用してAccessデータをExcelに取り込む【中級者向け】

kave-638249_640

今回はADOを使用してAccessのデータをExcelに取り込む方法をご紹介します。
環境は、Access2010とExcel2010。
取り込むAccessのファイル名は「顧客管理.accdb」、保存先はCドライブの直下のAccessフォルダの中です(C:\Access\顧客管理.accdb)。

動作イメージは以下のとおりです。
Accessの「T_顧客リスト」テーブルのデータをExcelに取り込み、「顧客リスト」シートに表示させます。

Accessの「T_顧客リスト」テーブル
image1

Excelブックの「顧客リスト」シートimge2-3

ADO(ActiveX Data Object)とは

Accessだけでなく、Oracle、MySQLなどの様々なデータベースに対して共通の手法で操作が出来る仕組みです。ExcelからADOを使用するためには、参照設定が必要です。
事前準備としてVBEの「ツール」メニュー → 「参照設定」をクリックし、「参照設定」ダイアログボックスを表示し、「Microsoft ActiveX Data Objects X.X Library」にチェックを入れます(X.Xはバージョン)。

サンプルコード

Public Sub Access接続()
    Dim con As New ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim i As Integer
    
    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Access\顧客管理.accdb;"
            
    Set rs = con.Execute("SELECT * FROM T_顧客リスト WHERE 性別 = '女'")
    
    i = 2
    
    Do Until rs.EOF
        With Worksheets("顧客リスト")
            .Cells(i, 1).Value = rs!顧客ID
            .Cells(i, 2).Value = rs!顧客名
            .Cells(i, 3).Value = rs!ふりがな
            .Cells(i, 4).Value = rs!性別
            .Cells(i, 5).Value = rs!生年月日
        End With
        
        i = i + 1
        rs.MoveNext
    Loop
    
    rs.Close: con.Close
    Set rs = Nothing: Set con = Nothing
End Sub

コード解説

1. Accessデータベースに接続します。

Accessデータベースへ接続するには、ConnectionオブジェクトのOpenメソッドを使用します。接続文字列内の「Data Source」には接続するAccessファイルのパスを記述します。

con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=C:\Access\顧客管理.accdb;"

2. ConnectionオブジェクトのExecuteメソッドを使用して、レコードセットを取得します。

今回は「顧客管理.accdb」の「T_顧客リスト」テーブルに対して、「性別」列の値が「女」の行を取得する問合せを発行しています。

Set rs = con.Execute("SELECT * FROM T_顧客リスト WHERE 性別 = '女'")

3. 問合せの結果をExcelの「顧客リスト」シートに出力します。

今回は2行目から出力します。

i = 2
    
    Do Until rs.EOF
        With Worksheets("顧客リスト")
            .Cells(i, 1).Value = rs!顧客ID
            .Cells(i, 2).Value = rs!顧客名
            .Cells(i, 3).Value = rs!ふりがな
            .Cells(i, 4).Value = rs!性別
            .Cells(i, 5).Value = rs!生年月日
        End With
        
        i = i + 1
        rs.MoveNext
    Loop

4. データベースを切断します。

Closeメソッドを使用し、レコードセットとConnectionオブジェクトを閉じます。
また、それぞれの変数に「Nothing」キーワードを代入し、オブジェクトへの参照を解除します。

rs.Close: con.Close
Set rs = Nothing: Set con = Nothing

以上、今回はADOを使用してAccessのデータをExcelに取り込む方法でした。


カテゴリー: Access VBA プログラム