<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns="http://purl.org/rss/1.0/"
>

<channel rdf:about="https://vba-excel-access.seesaa.net/">
<title>vba excel access</title>
<link>https://vba-excel-access.seesaa.net/</link>
<description>vba を使用すると、excelとaccessを簡単に接続でき、データのエクスポート・インポートなどの連携ができます。　両者にvba文法の違いがないので、excelのvba学習の知識をaccessでも活用できます。 Excelでデータ分析を、Accessでデータの蓄積をすると、データの管理が効率的で作業能率を高めることができます。確かめましょう！</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="https://blog.seesaa.jp/" />
<items>
<rdf:Seq>
<rdf:li rdf:resource="https://vba-excel-access.seesaa.net/article/160897911.html" />
<rdf:li rdf:resource="https://vba-excel-access.seesaa.net/article/160897912.html" />
<rdf:li rdf:resource="https://vba-excel-access.seesaa.net/article/160897913.html" />
<rdf:li rdf:resource="https://vba-excel-access.seesaa.net/article/160897914.html" />
<rdf:li rdf:resource="https://vba-excel-access.seesaa.net/article/160897915.html" />
</rdf:Seq>
</items>
</channel>

<item rdf:about="https://vba-excel-access.seesaa.net/article/160897911.html">
<link>https://vba-excel-access.seesaa.net/article/160897911.html</link>
<title>接続</title>
<description>vba を使用した excel と accessの接続は、ADOまたはオートメーションで簡単に実現できます！vba excel access 簡単です！ Homeへ接続vbaによる有効な２つの「接続」方法は、ado と オートメーションです。データ処理には軽快な ado 、データ以外のAccessオブジェクトには、オートメーションが有効です。　接続の動作確認は、Office 2007、2010で行いました。１．　ADO（ActiveX Data Objects）を利用して接続..</description>
<dc:subject>接続</dc:subject>
<dc:creator>Yy</dc:creator>
<dc:date>2010-08-29T05:33:19+09:00</dc:date>
<content:encoded><![CDATA[
<h2><strong>vba</strong> を使用した excel と accessの接続は、ADOまたはオートメーションで簡単に実現できます！</h2><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><br />接続<br /><h3><strong>vba</strong>による有効な２つの「接続」方法は、ado と オートメーションです。</h3><br /><b><span style="background: #FFFFAF;">データ処理には軽快な ado 、データ以外のAccessオブジェクトには、オートメーションが有効です。</span></b><br />　接続の動作確認は、Office 2007、2010で行いました。<br /><b>１．　ADO（ActiveX Data Objects）を利用して接続する方法</b><br />※　まず、VBEウィンドウの「ツール」ー「参照設定」で　Microsoft ActiveX Data Objects X.XX Library にチェックを入れます。<br />X.XX は、Libraryのバージョンです。　まず、最新版のLibraryをチェックしましょう。<br />接続 手順は、主に次の通りです。　<br />※　（ ）内の番号は、後半の vba ステートメントのコメントの番号と対応しています。<br />（１）　ADOのConnectionオブジェクトの変数を宣言します。<br />（２）　新しいConnectionオブジェクトを生成し、そのオブジェクトを「参照」するため、宣言した変数に代入します。<br />（３）　Office 2010 の「信頼できる場所」にあるaccdbと接続します。<br />　　　この場所のファイルは、信頼できる、とした結果保存する場所なので、ファイルを開く「警告」が表示されません。<br />　　　この例のADOの場合、別の保管場所でも動作します。<br />　　場所の選択は、「ファイル」－「オプション」ー「セキュリティーセンター」ー「セキュリティーセンター」ボタンを押し、「信頼できる場所」です。<br />　　Providerは、最新の <b>Microsoft.ACE.OLEDB.12.0</b> を指定しなければなりません。<br />　　なお、Office 2000から2003までは、<b>Microsoft.Jet.OLEDB.4.0</b>です。<br />　　Office 97は、<b>Microsoft.Jet.OLEDB.3.5.1</b> です。<br /><br />（４）　接続を解除するには、Closeメソッドを実行します。　※　（５）のリソースをクリアする場合、省略できます。<br />（５）　オブジェクト参照に使用されたリソースをクリアし、使用可能メモリ容量を大きくする必要があります。<br />　　このリソース解除を行わない場合、使用可能メモリ容量が減るので、excelの動作が遅くなります。<br /><br />次のステートメントは、上記で説明したADOを利用したaccessDBとの接続・解除の手順を実行します。<br />　　Dim oCn As ADODB.Connection　'（１）<br />    <br />　　Set oCn = New ADODB.Connection　'（２）<br />　　oCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _<br />　　　　　　　　　"Data Source=C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb;"　'（３）<br /><br />　　oCn.Close　'（４）<br />　　Set oCn = Nothing　'（５）<br /><br /><b>２．　オートメーションにより接続する方法</b><br />　この方法は、1993年にMicrosoftから発表されました。（※　OLE Automation Wikipedia より引用 ）<br />　Accessは、オートメーションに対応したアプリケーションです。　<br />　Officeのバージョンがオートメーションに対応している場合、活用できます。<br />したがって、その場合、excel　から vba により、accessの機能をオブジェクトを参照することにより利用できます。<br />オートメーションを利用した「接続」が簡単にでき、access のテーブルを操作できます。<br />その結果、データをインポート・エクスポート出来ることが分かります。<br />　実際、接続は、主に次の手順で実行できます。<br />　（ ）内の番号は、後半の vba ステートメントのコメントの番号と対応しています。<br />（１）　オブジェクトの変数を宣言します。<br />（２）　Accessが起動されている場合、そのAccessを利用して処理効率を向上させます。<br />　　　新しいAccessを起動するオーバーヘッド時間が無い場合、ユーザーのストレスを軽減する効果があります。<br />　　　１）　エラーが出た場合、次のステートメントを実行させます。<br />　　　２）　実行中のAccessのオブジェクトを参照するため、オブジェクト変数に代入します。<br />　　　３）　エラーが発生した場合、Accessが起動していないことが分かります。<br />　　　４）　エラーをクリアーします。<br />（３）　Accessオブジェクトを新しく作成し、そのオブジェクトを「参照」するため、宣言した変数に代入します。<br />（４） AccessDBに接続します。<br />　　　この場所のファイルは、信頼できる、とした結果保存する場所なので、ファイルを開く「警告」が表示されません。<br />　　　前の例と同様、この例の場合、「信頼できる場所」としています。　しかし、別の保管場所でも動作します。<br />　　場所の選択は、「ファイル」－「オプション」ー「セキュリティーセンター」ー「セキュリティーセンター」ボタンを押し、「信頼できる場所」です。<br />（５）　通常にaccessを使用できるため、acｃesｓが見える設定にします。<br />（６）　接続を解除するには、Closeメソッドを実行します。　※　（７）のリソースをクリアする場合、省略できます。<br />（７）　オブジェクト参照に使用されたリソースをクリアし、使用可能メモリ容量を大きくする必要があります。<br />　　このリソースクリアを行わない場合、使用可能メモリ容量が急速に減るため、excelの動作が遅くなってきます。<br />　　理由は、オートメーションのオブジェクトの参照で割り当てられるメモリ容量が大きいからです。<br /><br />次のステートメントは、上記で説明したオートメーションを利用したaccessDBとの接続・解除の手順を実行します。<br />　　Dim oApp As Object　'（１）<br />    <br />　　On Error Resume Next　'（２）－１）<br />　　Set oApp = GetObject(, "Access.Application")　'（２）－２）<br />　　If Err.Number <> 0 Then　'（２）－３）<br />　　　　Err.Clear　'（２）－４）<br />       <br />　　　　Set oApp = CreateObject("Access.Application")　'（３）<br />    <br />　　End If　'（２）　－３）<br />    <br />　　oApp.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb"　'（４）<br />　　oApp.Visible = True　'（５）<br /><br />　　oCn.Close　'（６）<br />       <br />　　Set oCn = Nothing　'（７）<br /><br /><font color="red"><b>※　上記２つのマクロの使用例は、「エクスポート」記事で説明しました。</b></font><br /><br /><br><br /><h4>ADOとオートメーションの<strong>vba</strong> を使用した excel と access の接続を活用しましょう！</h4><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="https://vba-excel-access.seesaa.net/article/160897912.html">
<link>https://vba-excel-access.seesaa.net/article/160897912.html</link>
<title>エクスポート</title>
<description>vba を使用して excel から access へエクスポートが簡単にできます！vba excel access 簡単です！ Homeへエクスポートvbaを使用して excel から access へデータをエクスポートできます。 ADOは、データをより簡単・高速にエクスポートできます。エクスポートの例として、次に説明した excel ワークシートの１０万行Ａ，Ｂ２列のテーブルを対象にしました。  （１）　１行目は、ヘッダーです。　Aceessのフィールド名に合わせました..</description>
<dc:subject>エクスポート</dc:subject>
<dc:creator>Yy</dc:creator>
<dc:date>2010-08-28T05:33:20+09:00</dc:date>
<content:encoded><![CDATA[
<h2><strong>vba</strong> を使用して excel から access へエクスポートが簡単にできます！</h2><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><br />エクスポート<br /><h3><strong>vba</strong>を使用して excel から access へデータをエクスポートできます。</h3><br /><b><span style="background: #FFFFAF;"> ADOは、データをより簡単・高速にエクスポートできます。</span></b><br />エクスポートの例として、次に説明した excel ワークシートの１０万行Ａ，Ｂ２列のテーブルを対象にしました。  <br /><br />（１）　１行目は、ヘッダーです。　Aceessのフィールド名に合わせました。<br />（２）　ワークシートは、Sheet1 を利用しました。<br />（３）　データは、１０万行をエクスポートできます。<br /><b><Tt><br />ID　　　　Data1　　　　Data2<br />0000001　A-0000001  B-0000001<br />0000002　A-0000002  B-0000002<br />　　　　・・・・・・・・・・・<br />（同様のエクスポート・データが１００，０００行続きます。）<br />　　　　・・・・・・・・・・・<br />0099999　A-0099999  B-0099999<br /></Tt></b><br /><br />一方、Accessは、上記のデータをインポートした結果作成できるテーブルを利用しました。<br />（１）　テーブルは、Sheet1 と命名しました。<br />（２）　テーブルは、３つのフィールドで構成させました。<br />　　　１）　ID　主キー　　　　<br />　　　２）　Data1  テキストフィールド　<br />　　　３）　Data2　テキストフィールド<br /><br /><b>１．　ADOを利用して excel から　access　のテーブルへエクスポートする方法</b><br />※　接続と解除、デバッグプリントについては、説明がありません。　「接続」記事を参照ねがいます。<br />主なポイントは、次の通りです。　（ ）内の番号は、説明の次にある各ステートメントのコメント内の番号と対応しています。<br />（１）　テーブル情報を変数として宣言します。<br />（２）　テーブル情報のオブジェクトを作成し、参照を変数に代入します。<br />（３）　レコードを追加する前に、テーブルのデータを削除します。<br />　　　１）　エクスポート先のSheet1テーブルのデータを全て削除します。<br />　　　２）　エクスポート先のSheet1テーブルを開きます。<br />（４）　セル範囲の列数より、フィールド数を求めます。<br />（５）　行番号を仮変数に代入します。　カーソルの位置と対応させています。<br />（６）　ワークシートのテーブルのセル範囲をループさせ、エクスポートします。<br />（７）　<b>★　次の　Forループで情報をテーブルに追加します。</b><br />（８）　主キーID フィールドの隣のフィールドからエクスポート・データを入力します。<br />（９）　<b>★　上記のForループでテーブルに追加した情報を含め、テーブルを更新します。</b><br />（１０）　次の行に移動します。<br />（１１）　テーブルを閉じます。<br />（１２）　テーブル情報のリソースをクリアーし、メモリを解放します。<br /><br />Sub export_ws_ADO()<br />''VBEの「ツール」ー「参照設定」で　Microsoft ActiveX Data Objects X.XX Library にチェックを入れます。<br />　　Dim oCn As ADODB.Connection<br />　　Dim oRs As ADODB.Recordset　'（１）<br />　　Dim intL As Long, intMaxF As Integer　'使用する仮変数の宣言です。<br />    <br />　　Debug.Print "Start ADO " & Time<br />    <br />　　Set oCn = New ADODB.Connection<br />　　Set oRs = New ADODB.Recordset　　'（２）<br />　　oCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _<br />　　　　"Data Source=C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb;"<br />               <br />　　oRs.Open "DELETE FROM Sheet1;", oCn　　'（３）－１）<br />　　oRs.Open "SELECT * FROM Sheet1;", oCn, adOpenDynamic, adLockOptimistic　'（３）－２）<br />    <br />　　intMaxF = Range("A1").CurrentRegion.Columns.Count - 1　'（４）<br />    <br />　　intL = 2　'（５）<br />　　Do While (Cells(intL, 1).Value <> "")　'（６）<br />　　　　oRs.AddNew　'（７）　★<br />　　　　For j = 0 To intMaxF<br />　　　　　　oRs.Fields(j + 1) = Cells(intL, j + 1).Value  '  （８）<br />　　　　Next j<br />　　　　oRs.Update　'（９）　★<br />　　　　ntL = intL + 1　'（１０）<br />　　Loop<br />　　oRs.Close　'（１１）<br />　　oCn.Close<br />       <br />　　Set oRs = Nothing　'（１２）<br />　　Set oCn = Nothing<br /><br />　　Debug.Print "END ADO " & Time<br /><br />End Sub<br /><br /><b>２．　excel から　access　へテーブル（表・リスト）をオートメーションによりエクスポートする方法</b><br />オートメーションは、データ以外のフォームなど、ADOに無い accessオブジェクトの機能を使用する場合、活用できます。<br />このオートメーションは、Office 95などにも対応でき、応用範囲の比較的広い方法であることが分かります。<br />※　接続と解除、デバッグプリントについては、説明がありません。　「接続」記事を参照ねがいます。<br />ポイントは、２か所です。　（ ）内の番号は、説明の次にある各ステートメントのコメント内の番号と対応しています。<br />（１）　エクスポート・データを追加する前に、Sheet1テーブルのデータを全て削除します。<br />（２）　excel のワークシートは、セル範囲まとめて access へエクスポート転送できます。<br />　　　accessのインポートモードにより、シートの１０万行のセル範囲を転送します。<br />　　　エクスポートのオートメーションは、vba ステートメントがより単純なことが分かります。<br />Sub export_ws_automation()<br />　　Dim oApp As Object<br />    <br />　　Debug.Print "Start AutoMation " & Time<br />　　On Error Resume Next<br />　　Set oApp = GetObject(, "Access.Application")<br />　　If Err.Number <> 0 Then<br />　　　　 Err.Clear<br />       <br />　　　　Set oApp = CreateObject("Access.Application")<br />    <br />　　End If<br />    <br />　　oApp.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb"<br />　　oApp.Visible = True<br />               <br />　　oApp.Docmd.RunSQL "DELETE FROM Sheet1"　'（１）<br />    <br />　　oApp.Docmd.TransferSpreadsheet acImport, 8, "Sheet1", "C:\Documents and Settings\Administrator\デスクトップ\Exp_Book1.xlsm", True, "A1:B100000"<br />　　　　　　　　　　　　　　　　　　　　　　　　'（２）<br />　　Set oApp = Nothing<br />    <br />　　Debug.Print "END AutoMation " & Time<br /><br />End Sub<br /><br /><br /><b>３．　ADOとオートメーションのエクスポート処理スピード結果・比較</b><br /><br />　データのエクスポートのベンチマークテストを行った結果、ADOがより高速に処理できました。<br />　実際、１０万行２列のexcelデータをaccessへエクスポートしました。<br />　結果は、次の通りです。<br />　　　（１）　ADO　　約４７秒<br />　　　（２）　オートメーション　約２分<br />したがって、エクスポート速度は、ADOがオートメーションより約３倍ほど速いことが分かりました。<br />　テスト環境は、次の通りです。<br />　　　（１）PentiumR 4 CPU 2.60 GHz<br />　　　（２）OS　Windows XP　Professional　SP3<br />　　　（３）Office　２０１０<br /> ※　エクスポート・テストは、前半で説明に使用したマクロで行いました。<br />　　なお、処理時間は、Alt ＋ F11 キーを押して表示させたVBEウィンドウの「イミディエイト ウィンドウ」にプリントされます。<br /><br />※　vba ステートメントの詳細は、「接続」記事など関連した記事を参照願います。<br /><br /><br><br /><h4>ADOとオートメーションの<strong>vba</strong> を使用した excel と access の接続を活用しましょう！</h4><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="https://vba-excel-access.seesaa.net/article/160897913.html">
<link>https://vba-excel-access.seesaa.net/article/160897913.html</link>
<title>連携</title>
<description>vba を使用して excel と access との連携が簡単にできます！vba excel access 簡単です！ Homeへ連携vba使用し、 excel と access とを連携させ、データをインポート・エクスポートできます。ADOとオートメーションを使用する２通りの vba を使用した連携ができます。連携によるエクスポートについて、別のページ「エクスポート」記事を参照願います。ここで説明した連携によるインポートは、excel へ access からデータをインポ..</description>
<dc:subject>連携</dc:subject>
<dc:creator>Yy</dc:creator>
<dc:date>2010-08-27T05:33:20+09:00</dc:date>
<content:encoded><![CDATA[
<h2><strong>vba</strong> を使用して excel と access との連携が簡単にできます！</h2><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><br />連携<br /><h3><strong>vba</strong>使用し、 excel と access とを連携させ、データをインポート・エクスポートできます。</h3><br /><b><span style="background: #FFFFAF;">ADOとオートメーションを使用する２通りの vba を使用した連携ができます。</span></b><br />連携によるエクスポートについて、別のページ「エクスポート」記事を参照願います。<br />ここで説明した連携によるインポートは、excel へ access からデータをインポートすることを意味します。<br />省略した説明は、「接続」、「エクスポート」記事にあります。　参照願います。<br /><br />「連携」とは、お互いに連絡をとりあって物事をおこなうこと。（※　岩波書店、広辞苑より引用）<br />この内容をexcelとaccess連携に適用すると、excelとaccessは、お互いにADOを使用して連絡をとりあい、<br />データをexcelのセルからaccessのレコードのフィールドへエクスポートすることです。<br />また、excelのセルへaccessのフィールドデータをインポートすることで連携する、と言えます。<br />データのインポート・エクスポートが「連携」の目的であり、軽快なＡＤＯが活用される理由となっています。<br /><br /><b>１．　ADOを利用して excel へ access　連携させ、テーブルからデータをインポートする方法</b><br />連携するための主なポイントは、ひとつです。<br />（１） access テーブルから全てのデータをセルにコピーできます。<br />　　※　その他のステートメントの詳細は、「接続」、「エクスポート」記事を参照願います。<br />Sub import_ws_ADO()<br />''VBEの「ツール」ー「参照設定」で　Microsoft ActiveX Data Objects X.XX Library にチェックを入れます。<br />　　Dim oCn As ADODB.Connection<br />　　Dim oRs As ADODB.Recordset　<br />    <br />　　Debug.Print "Start ADO " & Time<br />    <br />　　Set oCn = New ADODB.Connection<br />　　Set oRs = New ADODB.Recordset　<br />　　oCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _<br />　　　　"Data Source=C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb;"<br />               <br />　　oRs.Open "SELECT * FROM Sheet1;", oCn, adOpenStatic, adLockReadOnly　<br /><br />　　WorkSheets("Sheet1").Activate<br />　　Cells(1, 1).Value = "Data1"<br />　　Cells(1, 2).Value = "Data2"<br />    <br />　　Range("A2").CopyFromRecordset oRs　'（１）　テーブルのデータをまとめてコピーできます。<br />       <br />　　Set oRs = Nothing　<br />　　Set oCn = Nothing<br /><br />　　Debug.Print "END ADO " & Time<br /><br />End Sub<br /><br /><br /><b>２．　excel へ access　のデータをオートメーションによる連携でインポートする方法</b><br />連携のポイントは、１か所です。　（ ）内の番号は、説明の次にある各ステートメントのコメント内の番号と対応しています。<br />（１）　excel のワークシートは、セル範囲まとめて access へ転送できます。<br />　　　この連携は、accessのエクスポートモードによりデータが転送され、シートの　excelセルA1 が転送先の基準セルです。<br />　　　１行目は、ヘッダーを入力させるため、　引数「True」を指定します。<br />Sub import_ws_automation()<br />　　Dim oApp As Object<br />    <br />　　Debug.Print "Start AutoMation " & Time<br /><br />　　On Error Resume Next<br />　　Set oApp = GetObject(, "Access.Application")<br />　　If Err.Number <> 0 Then<br />　　　　 Err.Clear<br />       <br />　　　　Set oApp = CreateObject("Access.Application")<br />    <br />　　End If<br />    <br />　　oApp.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb"<br />　　oApp.Visible = True<br />               <br />　　oApp.Docmd.TransferSpreadsheet acExport, 8, "Sheet1", "C:\Documents and Settings\Administrator\デスクトップ\Exp_Book1.xlsm", True<br />　　　　　　　　　　　　　　　　　　　　　　　　'（１）<br />　　Set oApp = Nothing<br />    <br />　　Debug.Print "END AutoMation " & Time<br /><br />End Sub<br /><br /><br><br /><h4>ADOとオートメーションの<strong>vba</strong> を使用した excel と access の接続を活用しましょう！</h4><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="https://vba-excel-access.seesaa.net/article/160897914.html">
<link>https://vba-excel-access.seesaa.net/article/160897914.html</link>
<title>ado</title>
<description>vba を使用した excel と accessの接続は、ADOで簡単・高速、軽快に動作します！vba excel access 簡単です！ Homeへadovbaで簡単に使えるADO(ActiveX Data Objects)は、高速・小容量メモリのため軽快に動作します。ADOでレコードの追加・更新・削除・検索が簡単にできます。１．　まず始めに、ADOで接続するために Dim文でProgIDが「ADODB.Connection」であるオブジェクト変数を宣言します。&#39;&#39;VBE..</description>
<dc:subject>ado</dc:subject>
<dc:creator>Yy</dc:creator>
<dc:date>2010-08-26T05:33:20+09:00</dc:date>
<content:encoded><![CDATA[
<h2><strong>vba</strong> を使用した excel と accessの接続は、ADOで簡単・高速、軽快に動作します！</h2><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><br />ado<br /><h3><strong>vba</strong>で簡単に使えるADO(ActiveX Data Objects)は、高速・小容量メモリのため軽快に動作します。</h3><br /><b><span style="background: #FFFFAF;">ADOでレコードの追加・更新・削除・検索が簡単にできます。</span></b><br /><br /><b>１．　まず始めに、ADOで接続するために Dim文でProgIDが「ADODB.Connection」であるオブジェクト変数を宣言します。</b><br />''VBEの「ツール」ー「参照設定」で　Microsoft ActiveX Data Objects X.XX Library にチェックを入れます。<br />※　詳細は、「接続」記事を参照願います。<br /><br /><b>２．　次に、レコードセットに対してADOでは、 Dim文で ADODB.Recordset オブジェクト変数を宣言します。</b><br />※　詳細は、「エクスポート」、「連携」記事を参照願います。<br /><br /><b>３．　ADOの接続は、Set文でオブジェクトの参照を代入した変数に対して行われます。</b><br />※　詳細は、「エクスポート」、「連携」記事を参照願います。<br /><br /><b>４．　カーソル（Cursor）は、一連のデータに順にアクセスする際の検索条件および「現在位置」を保持するデータベースの要素です。</b><br />※　カーソル（データベース） Wikipediaより引用<br />　次の図の黄色の部分は、一連のデータの３番目を「現在位置」とした<b>カレントレコード</b>です。<br />図の右辺には、カーソルタイプに従い、カレントレコードを移動させるメソッドを５種類示しました。<br />レコードの位置は、Move n によりカレントレコードから「移動するレコード数」 ｎ 分移動できます。<br />カーソルを開いたとき、レコードの位置は、先頭レコードですので、 ｒecordｓet.Move　２ により　３番目のレコードに移動します。<br />RecordSetオブジェクトの <b>Move メソッド</b>を使用してカレントレコードの位置を移動できます。<br />MoveNextにより次のレコードに移動でき、MovePreviousにより前のレコードに移動できることを示します。<br />また、MoveFirstにより先頭レコードに移動でき、MoveLastにより最終レコードに移動できることを示しています。<br />ただし、レコード位置を１つの方向・順方向にのみ移動制限するタイプがあります。　<br />※　詳細は、後半の　（３）カーソルタイプの説明を参照願います。<br /><br /><img src="http://vba-excel-access.seesaa.net/image/move.jpg" alt="カーソル" title="カーソル"><br /><br />上記の一連のデータは、レコードセットの「カーソル」を開いた結果として得ることができます。<br />次のステートメントは、レコードセット・オブジェクトのメソッド Ｏｐｅｎ の引数(省略可能）を示しています。<br /><br /><b>recordset.Open Source, ActiveConnection, CursorType, LockType, Options </b><br /><br />（１）　最初の引数 Sourceは、ＳＱＬ文、テーブル名、クエリ名、有効な Command オブジェクトなどを指定します。<br />（２）　ActiveConnectionは、オブジェクトの参照を代入した変数または接続情報文字列を指定します。<br />（３）　CursorTypeは、次の３つのカーソルの機能を指定する定数です。<br />　　　　【a】 <b>カレントレコード位置の移動性</b><br />　　　　【b】 <b>データの更新可能性</b><br />　　　　【c】 <b>他のユーザーが行ったデータベースの変更結果の可視性</b><br /><br />これにより一連のデータにアクセスする方向や追加・編集・削除・検索したレコードが参照可能か否かを明確にできます。<br />このカーソルタイプには、次の種類があります。<br />　　　１）　<b>adOpenForwardOnly</b>　：　<b>既定値</b>　順方向のみ<br />　　　　　　レコード位置が順方向にのみ移動でき、個々のレコードを検索できず、レコード数を返しません。<br />　　　　　　参照のみ可能であり、高速に動作できます。　他のユーザーによる更新レコードを表示できません。<br />　　　２）　<b>adOpenStatic</b>　：　静的<br />　　　　　　レコード位置が順・逆の２方向に移動でき、Findを使用でき、レコード数を返すことができます。<br />　　　　　　他のユーザーによる更新レコードを表示できません。<br />　　　３）　<b>adOpenDynamic</b>　：　動的<br />　　　　　　レコード位置を全ての方向に移動でき、Findを使用でき、レコード数を返すことができます。<br />　　　　　　レコードの全ての更新を表示できます。<br />　　　４）　<b>adOpenKeyset</b>　：　キーセット<br />　　　　　　レコード位置を全ての方向として順・逆方向に移動でき、Findを使用でき、レコード数を返します。<br />　　　　　　既に記録されていたレコードの更新を表示できます。<br />　　　　　　削除されたレコード、新しく記録されたレコードの更新を表示出来ません。<br />　　　５）　<b>adOpenUnspecified</b>　：　指定せず<br />　　　　　　カーソルの種類を指定しません。<br /><br />（４）　LockTypeは、編集時 recordset を開くときに使用するロック（同時作用）の種類を指定する定数です。<br />このロックタイプには、次の種類があります。<br />　　　１）　<b>adLockReadOnly</b>　：　<b>既定値</b>　読み取り専用、データを変更できません。<br />　　　２）　<b>adLockPessimistic</b>　：　レコード単位の排他的ロック、編集直後にデータソースでレコードをロックします。<br />　　　３）　<b>adLockOptimistic</b>　：　レコード単位の共有的ロック、Update メソッドを呼び出した場合のみロックします。<br />　　　４）　<b>adLockBatchOptimistic</b>　：　共有的バッチ更新を示しています。　バッチ更新モードの場合に設定します。<br />　　　５）　<b>adLockUnspecified</b>　：　指定せず。　ロックの種類を指定しません。<br /><br />（５）　Optionsは、省略可能です。　<br />　　　※　詳細は、Ｍｉｃｒｏｓｏｆｔ　Ａｃｃｅｓｓ　の開発者リファレンスを参照願います。<br /><br /><b>５．　ADOによるレコードの追加・編集・削除・検索・抽出</b><br />先ず最初にVBEの「ツール」－「参照設定」で Microsoft ActiveX Data Objects X.XX Libraryにチェックを入れます。<br />ADOのレコードに対する機能は、主にRecordSetオブジェクトのメソッドまたはプロパティにより実現できます。<br />（１）<b>追加</b>　　<b>AddNew</b>、<b>Update</b>メッソドを使用します。<br />Sub 　ado_add()<br />　　Dim oCn As ADODB.Connection<br />　　Dim oRs As ADODB.Recordset<br />    <br />　　Set oCn = New ADODB.Connection<br />　　Set oRs = New ADODB.Recordset<br />　　oCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _<br />　　　　"Data Source=C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb;"<br />               <br />　　oRs.Open "SELECT * FROM Sheet1;", oCn, adOpenDynamic, adLockOptimistic<br />　　'*************<br />　　<span style="background-color:yellow">oRs.AddNew</span><br />　　　For j = 1 To (oRs.Fields.Count - 1)<br />　　　　　　oRs.Fields(j).Value = Cells(1, j).Value<br />　　　Next j<br />　　<span style="background-color:yellow">oRs.Update</span><br />　　'*************<br />　　oRs.Close<br />　　oCn.Close<br />       <br />　　Set oRs = Nothing<br />　　Set oCn = Nothing<br /><br />End Sub<br /><br />上記のマクロは、アクティブシートの１行目をレコードに追加しています。<br />最初のフィールドは、主キーとして使用しているので、２番目のフィールドから入力し、最終レコードの次に追加します。<br />ADOのCloseメソッドに対する注意があります。<br />このメソッドを使用してRecordSetを閉じる前にConnection オブジェクトを閉じる場合があります。<br />その場合、その接続に関連するアクティブな Recordset オブジェクトもすべて閉じてしまいます。<br />この結果、保留中の更新または編集がキャンセルされますので、注意が必要です。<br />最初に RecordSet オブジェクトを Close し、保留中の更新または編集を完了しなければなりません。<br /><br />（２）<b>編集</b>　　ADOの<b>Update</b>メッソドを使用します。<br />上記のマクロの一部を「編集」用に修正しました。<br />　　'*************<br />　　Do<br />　　　　For j = 1 To (oRs.Fields.Count - 1)<br />　　　　　oRs.Fields(j).Value = oRs.Fields(j).Value & "z"<br />　　　　Next j<br />　　　　<span style="background-color:yellow">oRs.Update</span><br />　　　　oRs.MoveNext<br />　　Loop Until oRs.EOF<br />　　'*************<br /><br />このマクロは、１番目のレコードから最終のレコードまでデータの末尾に　z　を追加します。<br /><br />（３）<b>削除</b>　　ADOの<b>Delete</b>メソッドを使用します。<br />上記のマクロの一部を「削除」用に修正しました。<br />　　'*************<br />　　Do<br />　　　　<span style="background-color:yellow">oRs.Delete</span><br />　　　　oRs.MoveNext<br />　　Loop Until oRs.EOF<br />　　'*************<br /><br />このマクロは、開いたレコードセットのすべてのレコードを削除します。<br /><br />（４）<b>検索</b>　　ADOの<b>Find</b>メソッドを「ただ１つのフィールド名」に対して使用します。<br />書式は、<b>Recordset.Find 検索条件, SkipRows, SearchDirection, Start</b>　です。<br />１）検索条件は、列の名称１つだけ指定できます。<br />２）SkipRowsは、読み飛ばすレコード数を指定します。省略時、カレントレコードから検索します。<br />３）SearchDirectionには、adSearchBackward, adSearchForward の２つがあります。<br />省略可能です。検索が成功しなかった場合、それぞれBOF、EOFに移動して止まります。<br />４）Stratは、検索開始位置を指定できます。省略すると、カレントレコードから検索を開始します。<br />上記のマクロの一部を「検索」用に修正しました。<br />　　'*************<br />　　oRs.MoveFirst  '検索は、開始するカレントレコードを明確に設定する必要があります。<br />　　Do<br />　　　　<span style="background-color:yellow">oRs.Find oRs.Fields(1).Name & " Like '%333%' "</span><br />　　　　If Not (oRs.EOF) Then<br />　　　　　　Debug.Print oRs.Fields(1).Value<br />　　　　Else<br />　　　　　　Exit Do<br />　　　　End If<br />　　　　oRs.MoveNext<br />　　Loop Until oRs.EOF<br />　　'*************<br /><br />このマクロは、２番目のフィールドデータに文字列　333　を含む場合、イミディエイトウィンドウに出力します。<br /><br />（５）<b>抽出</b>　　ADOの<b>Filter</b>プロパティを使用します。複数フィールドでも使用できます。<br />上記のマクロの一部を「抽出」用に修正しました。<br />　　'*************<br />　　<span style="background-color:yellow">oRs.Filter = "Data1 Like '%333%' OR Data2 Like '%333%' "</span><br />　　If oRs.RecordCount = 0 Then<br />　　　　MsgBox "抽出できるレコードがありません"<br />　　Else<br />　　　　Do<br />　　　　　　Debug.Print oRs.Fields(1).Value<br />　　　　　　oRs.MoveNext<br />　　　　Loop Until oRs.EOF<br />　　End If<br />　　oRs.Filter = ""    '空白を代入し、フィルタを解除します。<br />　　'*************<br /><br />このマクロは、２、３番目のフィールドデータに文字列　333　を含む場合、イミディエイトウィンドウに出力します。<br /><br /><b>５．　ADO X によりテーブルやフィールドを新しく作成する方法</b><br />　ADOには、ADOX(ADO Extensions for DDL and Security)と呼ばれるADOの拡張コンポーネントがあります。<br />このADOXには、データベースの構造を保守するための各種プロパティとメソッドがサポートされています。<br />ADOXにより、Table や Field を新規に作成することができます。<br />Office 2010 をインストールしている環境で、実際にテーブルとフィールドを作成し、削除するサンプルを示しました。<br />先ず最初にVBEの「ツール」－「参照設定」で Microsoft ADO Ext. X.X for DDL and Security にチェックを入れます。<br /><br />Sub Main_table_add_delete()<br />    On Error GoTo CreateTableError<br />    <br />    Dim tbl As New Table<br />    Dim cat As New ADOX.Catalog<br />    <br />    'カタログを開きます。<br />    cat.ActiveConnection = "Provider='Microsoft.ACE.OLEDB.12.0';" & _<br />        "Data Source='C:\Documents and Settings\Administrator\My Documents\ノースウィンド.accdb';"<br />    <br />    tbl.Name = "MyTable"<br />    tbl.Columns.Append "Column1", adInteger<br />    tbl.Columns.Append "Column2", adInteger<br />    tbl.Columns.Append "Column3", adVarWChar, 50<br />    cat.Tables.Append tbl<br />    Debug.Print "テーブル 'MyTable' を追加しました。."<br />    <br />    '実際に作成したテーブルを削除します。<br />    cat.Tables.Delete tbl.Name<br />    Debug.Print "テーブル 'MyTable' を削除しました。"<br />    <br />    '接続を解除し、リソースメモリを解放します。<br />    Set cat.ActiveConnection = Nothing<br />    Set cat = Nothing<br />    Set tbl = Nothing<br />    Exit Sub<br />    <br />CreateTableError:<br /><br />    Set cat = Nothing<br />    Set tbl = Nothing<br /><br />    If Err <> 0 Then<br />        MsgBox Err.Source & "エラー：　" & Err.Description, , "Error"<br />    End If<br />End Sub<br /><br />※　詳細は、Access 2010の開発者用リファレンス「１５章：　ADOXに関する基本事項」を参照願います。<br />　　なお、接続は、<b>"Provider='Microsoft.ACE.OLEDB.12.0';"</b>であることが必要です。<br /><br /><br><br /><h4>ADOとオートメーションの<strong>vba</strong> を使用した excel と access の接続を活用しましょう！</h4><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
<item rdf:about="https://vba-excel-access.seesaa.net/article/160897915.html">
<link>https://vba-excel-access.seesaa.net/article/160897915.html</link>
<title>違い</title>
<description>excel と access のvbaの文法の違いは、ありません。同じプログラミング言語 VBAです！vba excel access 簡単です！ Homeへ違いexcelとaccessで vba の文法の違いは、ありません。１．excel で学んだ vba　の知識は、 そのまま access で役立ちます。同じ vba で excel と access を操作できます。　違いは、ありません。excel で vba は、マクロを作成するプログラミング言語です。access で..</description>
<dc:subject>違い</dc:subject>
<dc:creator>Yy</dc:creator>
<dc:date>2010-08-25T05:33:20+09:00</dc:date>
<content:encoded><![CDATA[
<h2>excel と access の<strong>vba</strong>の文法の違いは、ありません。同じプログラミング言語 VBAです！</h2><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><br />違い<br /><h3>excelとaccessで <strong>vba</strong> の文法の違いは、ありません。</h3><br /><b><span style="background: #FFFFAF;">１．excel で学んだ vba　の知識は、 そのまま access で役立ちます。</span></b><br />同じ vba で excel と access を操作できます。　違いは、ありません。<br />excel で vba は、マクロを作成するプログラミング言語です。<br />access でも vba は、excel と同様のマクロを作成するプログラミング言語です。<br />『Visual Basic for Applications（ビジュアルベーシック・フォー・アプリケーションズ、VBA）は、マイクロソフト社製のMicrosoft Officeシリーズに搭載されているプログラミング言語である。』<br />（※　vba Wikipediaより引用）<br /><br />vba は、Excel 5.0より使用できるプログラミング言語です。<br />vba は、例えば excel の「ワークシート」に対して次の操作・値取得・アクション発生を知ることができます（excel 2010）。<br />（１）　Activate, Copy などの操作は、---> <b>「メソッド」</b><br />（２）　Cells, Range などの状態の値取得は、---> <b>「プロパティ」</b><br />（３）　Activate, Change などのアクション発生のメッセージは、---> <b>「イベント」</b><br />　　この３つは、それぞれ、３０、５５、１４　計９９個あります。<br />このように、vba は、メソッド、プロパティ、イベントを記述できる言語、となっています。<br />メソッド、プロパティ、イベントの記述の仕方は、excel と access　との間で違いがありません。<br />したがって、excel で 習得した vba の知識は、access で活用できることが分かります。<br /><br />excel と access との違いは、メソッド、プロパティ、イベントの種類の違いです。<br />excel は、セルやワークシートなどを操作します。<br />一方、access は、テーブル、クエリーまたフォームやレポートなどを取り扱います。<br /><br /><br /><b><span style="background: #FFFFAF;">２．Excel 2010は、Excel ４ マクロを作成、編集、実行できます。</span></b><br />vba が発表される前、Ｅｘｃｅｌには Excel 4 マクロと呼ばれるマクロ機能がありました。<br />このマクロのファイルは、拡張子を　ＸＬＭ としていたので、Excel 4 マクロをＸＬＭと呼んでいました。<br />ＸＬＭは、関数を中心とした「関数型」言語で記述されます。<br />例えば、印刷は、次のＰＲＩＮＴ関数を使用します。<br /><br />=PRINT()<br />　印刷ダイヤログを表示する<br />=PRINT(「印刷範囲」「,先頭ページ」「,終了ページ」「,部数」「,画像」「,プレビュー」「,メモ印刷」「,カラー印刷」「,給紙方法｣「,品質｣「,解像度」「,印刷対象」)<br /><br /><b>実は、vba は、この２つ目の印刷ができません。</b><br />したがって、Excel 4 マクロを使用できることが、　excel 2010の開発目標の１つとなりました。<br />印刷の他に、グラフのプロパティなども vba にはありません。<br />関数型言語は、簡潔に記述できることが最大の特徴です。<br />したがって、このExcel 4 マクロに強い関心が寄せられる理由が分かります。<br /><br />PRINT関数の詳細を示しました。<br />Excel 4.0 マクロヘルプの英文を訳した内容です。<br />１）印刷範囲<br />　1　又は　2　で指定<br />　1　全てを印刷する<br />　2　指定ページを印刷する<br /><br />２）先頭ページ　省略可<br />　「印刷範囲」で2を指定した時の先頭ページを数値で指定する。<br /><br />３）終了ページ　省略可<br />　「印刷範囲」で2を指定した時の終了ページを数値で指定する。<br /><br />４）部数　省略可<br />　印刷部数を数値で指定する。<br />　省略すると1<br /><br />５）画像　省略可<br />　TRUE　または　FALSEで指定<br /><br />　TRUE　画像を印刷しない<br />　FALSE　画像を印刷する<br /><br />　省略すると現在の設定を使用する。 <br /><br />６）プレビュー　省略可<br />　TRUE　または　FALSEで指定<br /><br />　TRUE　プレビューを表示する<br />　FALSE　プレビューを表示しない<br /><br />　省略するとFALSE<br /><br />７）メモ印刷　省略可<br />　1 -3　を数値で指定する。<br /><br />　1　ワークシートのみ印刷<br />　2　メモのみ印刷<br />　3　ワークシートとメモを両方印刷<br /><br />　省略すると現在の設定を使用する。<br /><br />８）カラー印刷　省略可<br />　Macintosh版EXCELのみで使用<br />　TRUE　または　FALSEで指定<br />　省略すると現在の設定を使用する。<br /><br />９）給紙方法　省略可<br />　Macintosh版EXCELのみで使用<br />　1　または　2　で指定する<br /><br />　1　用紙カセット<br />　2　手差し<br /><br />　省略すると現在の設定を使用する。<br /><br />１０）品質　省略可<br />　WINDOWS版EXCELのみで使用<br />　印刷品質をDPIで指定する<br />　省略すると現在の設定を使用する。<br /><br />１１）解像度　省略可<br />　WINDOWS版EXCELのみで使用<br />　縦方向解像度をDPIで指定する<br />　省略すると現在の設定を使用する。<br /><br />１２）印刷対象　省略可<br />　1 - 3　を数値で指定する<br /><br />　1　選択されているシートの現在選択されているセル範囲<br />　2　選択されているシートの定義されている印刷範囲　または　シート全体<br />　3　ブックに含まれるシートすべての定義されている印刷範囲　または　シート全体<br /><br /><br><br /><h4>ADOとオートメーションの<strong>vba</strong> を使用した excel と access の接続を活用しましょう！</h4><br /><a href="http://vba-excel-access.seesaa.net/">vba excel access 簡単です！ Homeへ</a><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
</item>
</rdf:RDF>

