エクセルVBAでアクセスのテーブルインポート

このQ&Aのポイント
  • エクセルのVBAを使用して、データベースA.mdbのテーブルAをデータベースb.mdbにインポートするプログラムを教えてください。
  • もし難しい場合は、アクセスのVBAを使用してインポートを行い、エクセルで実行するようにしてください。A.mdbが複数存在するため、変更が困難です。
  • よろしくお願いします。
回答を見る
  • ベストアンサー

エクセルVBAでアクセスのテーブルインポート

VBA初心者です。 エクセルのVBAでデータベースA.mdbのテーブルAをデータベースb.mdbにインポートするプログラムお教えて下さい。 '================================================ sub インポート () Set cn = New Connection'データベース接続 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source="C:\A.mdb" ●ここにPG書くような感じだと思いますが。   cn.Close: Set cn = Nothing'後処理 End Sub '================================================ もし難しい場合、アクセスのVBAでインポートをするが、この実行をエクセルでするよなのでもいいです。この場合は、インポートされるb.mdb側のプログラムをエクセルで実行するようにしたいです。(A.mdbは多数あるため、変更が大変なため) よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問は、最近仕入れたことを書き並べているような感じだが、 簡単に (1)エクセル側で (2)マクロの記録モードにして (3)ファイルー開くーファイルの種類で.mdbを指定ーファイル指定 でテーブルを指定 でデータが持ってこれた。 記録は Sub Macro1() Workbooks.OpenDatabase Filename:= _ "C:\Documents and Settings\xxxx\My Documents\db2.mdb", CommandText:=Array( _ "体重表"), CommandType:=xlCmdTable End Sub 新しいブックが作成されるが、これでどうですか。 ほか OpenDatabase メソッドについてWEB照会してみること。 エクセルのMSクエリでもできると思う。 (いまの私の場合エクセルのMSクエリが使えるようにしてしまっているのだが、これが効いていて、質問者の場合使えるようにしないと、ファイルー開くーmdbがうまくいかないかも知れない。大丈夫と思うが。 うまくゆかない場合はMSクエリでWEB照会して勉強してください。)

hiroshi77777
質問者

補足

回答ありがとうございます。 実行したいのは、エクセルにデータをもってくるのではなく、アクセルのテーブルを別のアクセルにインポートです。アクセスのVBAを使用すると簡単ですが、エクセルの計算結果と合わせて多くの処理をするためエクセルのVBAで処理したいという内容です。 よろしくお願いいたします。

関連するQ&A

  • Excel VBA について教えて下さい

    Excel VBA でAccess接続します 今までは Sub aaa() Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub のように使っていましたが(単一プロシージャ) Set cn = CreateObject("ADODB.Connection") の部分をパブリックにして Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • エクセルからアクセスへの接続先について

    エクセルからアクセスのデータに接続する時の書き方で、この例では DドライブにあるExeclフォルダ内のSampleというアクセスファイルに接続しています。サーバにある仮想ディレクトリにあるアクセスファイルにあるクライアントのエクセルと接続したいのです。つまりコンピュータ名がSVでDドライブのSとうい仮想ドライブにあるSample.mdbに接続する場合はどうすればよいかわかりませんので教えてください。 それともできないのでしょうか。 データベースに接続 Set cn = New Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=d:\Excel\Sample.mdb"

  • エクセルからアクセスの更新クエリをVBAで実行したい

    こんばんは。たびたび失礼します。 http://oshiete1.goo.ne.jp/qa4909202.html の続きです。 アクセスの「テーブル1」の「フィールド」(Yes/No型)がFalseなら Trueにする更新クエリをエクセルから実行したいのですがうまく行きません。 Sub test1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "\\Users\ユーザーアカウント名です\Documents" & "\アクセス.mdb" cn.Execute "UPDATE テーブル1 SET フィールド = False WHERE フィールド='" & True & "'" Set cn = Nothing End Sub これを実行すると 実行時エラー2147217913 抽出条件でデータ型が一致しません。 となります。 どうすればいいでしょうか? ご教授よろしくお願いします。

  • エクセルVBAでSQLを使ってアクセルのデータを引き出す

    下記マクロ「アクセスからインポート」はアクセスの人口テーブルから番号フィールドがエクセルシートセルA1に入力された番号と一致するデータのみをエクセルのセルA5以下に入力するマクロですが、★部分を書き換えて番号フィールドがセルA1、都道府県フィールドがセルB2と一致するデータを取り出したい。 Sub アクセスからインポート() Dim cn As Connection Dim rs As Recordset Dim SelCmd As String 'データベースに接続 Set cn = New Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\Excel\Sample.mdb" cn.Open '★↓これはうまく動きます SelCmd = "SELECT * FROM 人口 " _ & "WHERE 番号 = " & Range("A1").Value 'データを取得 Set rs = New Recordset rs.Open SelCmd, cn 'シートに貼り付け Range("A5").CopyFromRecordset rs '後処理 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub  ★↓これを入力しようとするとエラーになります。 SelCmd = "SELECT * FROM 人口 " _ & "WHERE 番号 = " & Range("A1").Value and 都道府県 = " & Range("B1").Value  andの書き方が悪いのでしょが、いろいろ試したがうまく行きません。 初心者ですがよろしくお願い致します。

  • VBAでAccessのテーブルのエクスポート・インポートをするには。

    すみませんが、教えてください。 Excel+VBAで、AccessをSQL,ADO,ADOXで操作しようとしています。 a.mdbのテーブルを、b.mdbに、エクスポート(インポート)したいのですが、やり方がわからず困っています。 すみませんが、テーブル構造のみをエクスポートする方法、データを含めてエクスポートする方法を教えてください。

  • accessテーブルの数値をエクセルセルに移VBA

    accessファイルの abc.mdbのtable1のフィールド1のIDの数値を 現在開いているエクセルファイル Q.xlsxの A2セルに移行したいのですが エクセルのVBAにおいて Sub IDエクセルへ移行() ' 'Dim myCon As New ADODB.Connection Dim myRecordSet As New ADODB.Recordset Dim mySQL As String Dim dbFile As Variant Dim mySheetName As Variant Dim i As Integer dbFile = "C:\Users\USER\Desktop\ABC\abc.mdb" myCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFile & "" myCon.Open mySQL = "SELECT * FROM table1" myRecordSet.Open mySQL, myCon, adOpenDynamic mySheetName = ActiveSheet.Name With Worksheets(mySheetName) .Cells(1, 2).Value = myRecordSet!ID End With myRecordSet.Close Set myRecordSet = Nothing myCon.Close Set myCon = Nothing ' ' ActiveWorkbook.Save End Sub ------------- 上記を実行すると objectがありません と myCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFile & "" ここの部分が黄色くなってしまいます ここが さっぱり意味不明です すみません 宜しくお願い致します Microsoft ActiveX Data Objects 2.8 Library 6.1も 参照設定で チェックを入れました win10 office365

  • VB.NETからAccessテーブルの文字列を操作する際・・

    VB2005からAccessのmdbのテーブルのあるカラムより数バイトを切り出して別のカラムにコピーするだけの単純なプログラムなのですが、以下のように30バイトや34バイトで切り出しているにもかかわらず16バイトしか入ってきません。 cn.ConnectionString = "Provider= Microsoft.Jet.OLEDB.4.0;" _ & "Data Source = d:\csmain\cstool\egz0omen.mdb" cn.Open() com = cn.CreateCommand() com.CommandText = "select カラムA from T_テーブル" dread = com.ExecuteReader Do While (dread.Read()) com = New OleDb.OleDbCommand("update T_テーブル set カラムB = LeftB(カラムA, 30), " _ & " カラムC = LeftB(カラムA, 34) , " _   & " カラムE = LeftB(カラムA, 36) ") com.Connection = cn com.ExecuteNonQuery() Loop <実行結果> カラムA             123456789012345 カラムB~カラムE全て 12345678 試しにバイト数を10バイトずつ増やして、30→40、34→44、36→46にしても結果は同じでした。 宜しくお願い致します。

  • 【VB】データグリッドコントロールにデータベースを表示させたい

    お世話になります。 フォーム上にMicrosoft DataGrid Control 6.0(OLEDB)を置いて、 データベースと接続し、データベースを表示させたいのですが、 データベースエンジンがMicrosoft.Jet.OLEDB3.51だとうまく表示してくれますが 4.0だとなぜか表示してくれません。 原因、対策などわかるでしょうか? ソースは以下のように単純なものです。 Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\パスワード管理.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "パスワード", cn, adOpenStatic, adLockReadOnly Set DataGrid1.DataSource = rs End Sub

  • VBのデータグリッドの表示が消えてしまいました。何故でしょうか?

      cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\生徒管理\生徒.mdb;" cn.Open mySQL= "SELECT * FROM 2学年 " _ & "WHERE (((所属)='" & frmPW.cmb生徒.Text & "'))" Set rs= New ADODB.Recordset rs.Open mySQL, cn, adOpenStatic Set DataGrid1.DataSource = rs と記述していて、それまでデータグリッドにデータが上手く表示されていたのに、 接続先のmdbファイルにパスワードを設定して、ConnectionStringの設定部分を   cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\生徒管理\生徒.mdb;" & _ "Jet OLEDB:Database Password=seito2;" に変更したところ、データグリッドにデータが表示されなくなりました。 データベースへの接続は上手くいっているようなのですが、何故データグリッドに データが表示されなくなったのでしょうか。 よろしくお願いします。

  • データグリッドコントロールに表示されません!

    OS:XP、VB6、ACCESS2000の環境でADOの勉強をしています。 ある参考書を見て、次のサンプルを実行しました。 【サンプル】 フォームにデータグリッドコントロールを貼り付ける。 フォームのLoadイベントプロシージャ内でデータベース(MDB)に接続し、レコードセットを取得して、データグリッドコントロールに取得したレコードセットを表示させる。 データベースはACCESS97で作成されたものです。 (ソース) --------------------------------------------------------------- Option Explicit Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() 'データーベースに接続 Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=G:\VB_TEST\Book.mdb" cn.Open 'レコードセットを取得 Set rs = New ADODB.Recordset rs.Open "本", cn, adOpenStatic 'データグリッドコントロールに取得したレコードセットを表示 Set DataGrid1.DataSource = rs End Sub --------------------------------------------------------------- 上記のプログラムを実行するともちろんうまく表示されました。 が、接続プロバイダ名を "Provider=Microsoft.Jet.OLEDB.3.51;"  ↓↓↓↓↓ "Provider=Microsoft.Jet.OLEDB.4.0;" にすると表示されません。 そこで、データベースをACCESS2000で作成し直し、実行してもダメです。 この処理はJet4.0では出来ないのでしょうか?

専門家に質問してみよう