Excel VBA Accessでデータ取り込み

このQ&Aのポイント
  • Excel VBAとAccess VBAを使用して、「Imp_Excel.xlsx」というファイルを「My_Access.accdb」の「T_MyTable」というテーブルに取り込む方法について教えてください。
  • TransferSpreadsheetを使用せずに、「My_Excel.xlsm」をまたいでAccessにデータを取り込む方法についての助言を求めます。
  • 「My_Excel.xlsm」にあるボタンを押すと、「Imp_Excel.xlsx」というファイルをAccessの「My_Access.accdb」の「T_MyTable」というテーブルに取り込みたいです。どのようにすれば簡単にできるでしょうか?
回答を見る
  • ベストアンサー

Excel VBA Accessでデータ取り込み

Excel VBA、Access VBAについてお教え下さい。 「My_Excel.xlsm」というファイルがあります。このファイルにはボタンが1つあります。 このボタンを押すことにより、「Imp_Excel.xlsx」というファイルを取り込みたいと思います。 取り込み先ですが、「My_Excel.xlsm」に取込むのではなく、Accessの「My_Access.accdb」の「T_MyTable」というテーブルに取り込みたいと思っています。 Accessから直に「Imp_Excel.xlsx」をインポートするには、TransferSpreadsheetを用いれば比較的簡単にデータをAccessに取り込むことができるのですが、「My_Excel.xlsm」をまたいでAccessに取り込みたいので、TransferSpreadsheetは使えません。 やり方としては、 My_Excel.xlsxを開く。 レコードセット取得。 レコードセットがEOFになるまでまわして、SQLのINSERT、またはAddNewメソッドを使用して1件1件挿入していくしか方法はないでしょうか? 今のところ、私が思い浮かぶのは上記の方法なのですが、何かもっと簡単にやれるような方法はあるでしょうか?よろしくお願いします。

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

  • ベストアンサー
回答No.1

Access上でTransferSpreadsheetを使用して出来ているのなら オートメーションでExcelからAccessを操作。 参照設定で、Microsoft Access 14.0 Object Library にチェックを入れて (14.0はそちらの環境によって変わります) My_Excel.xlsm で Sub test1() Dim Acc As Access.Application Set Acc = CreateObject("Access.Application") Acc.OpenCurrentDatabase ("D:\My_Access.accdb") Acc.DoCmd.TransferSpreadsheet , ・・・中略 Acc.CloseCurrentDatabase Acc.Quit Set Acc = Nothing End Sub あるいはAccessでマクロ(VBAじゃなく)を作成しておいて My_Excel.xlsm では Shell関数で Shell("C:\Program ・・・・\MsAccess.exe D:\My_Access.accdb /x マクロ名") http://office.microsoft.com/ja-jp/access-help/HA010166605.aspx とか。

fflashing
質問者

お礼

なるほど、勉強になりました!ありがとうございます。

関連するQ&A

  • Excel → Access データをインポート

    OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

  • ACCESS-VBAでEXCEL出力

    ACCESS-VBAで外部accdb内のテーブルデータをEXCEL出力するにはどうしたらできるのでしょうか? 現在、以下の方法で内部のテーブルデータをEXCEL内の名前に紐づけてエクスポートしています。 DoCmd.TransferSpreadsheet acExport, , "データ", "test.xlsx", True

  • EXCEL vbaからACCESSのクエリを開く

    EXCEL2010 WEBを参照してEXCEL VBAでACCESSのクエリを開くマクロを流用しました。 下記がマクロの内容です。 Private Sub Import() Dim db As ADODB.Connection Dim rs As ADODB.Recordset 'ACCDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Ace.OLEDB.12.0" db.Open "C:\work\TEHAI.accdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'Accessのクエリを開く rs.Open Source:="TEHAI", ActiveConnection:=db If rs.EOF Then MsgBox "抽出した結果、レコードが見つかりません。" Else ' レコードをシートへ貼り付ける Range("A1").CopyFromRecordset rs End If rs.Close Set rs = Nothing Set db = Nothing End Sub これを実行すると、 抽出した結果、レコードが見つかりません。 が表示されます。 ACCESS単体でTEHAIクエリを実行したら、約3万件くらいヒットします。 EXCELマクロから実行したらACCESSからデータをもってこられません。 なぜレコードが見つかりません、 となるのでしょうか? マクロのどこがおかしいのか、教えていただきたく。 ちなみに、もともとの内容から変更したのは db.Open "C:\work\TEHAI.accdb" rs.Open Source:="TEHAI", の2ヶ所だけです。

  • プログラムが、エクセルファイルを読み込まない

    エクセルVBAでファイルを読みにいくとファイルがありません。 プログラム側が、拡張子xlsxでデータ側がxlsmになっています。 プログラム側をxlsmにすることは、可能ですか? また、データ側をxls xlsxにすることって可能ですか? それぞれの方法を教えていただきたいです。 また、それぞれのメリット、デメリットを教えていただきたいです。 ※OKWAVEより補足:「富士通FMV」についての質問です。

  • ACCESS VBA レコード位置をマウスで指定

    いつもお世話になっています。 ACCESS のテーブルにデータ入力をしていますが、データ入力後、その各レコードをマウスで指定して別データを入力したいと考えています。 エクセルVBAであれば、SET RANGE = APPLICATION.INPUT() を使えばマウスで範囲指定ができると思うのですが、ACCESS でそういった方法はできないでしょうか? マウスでレコード位置を指定する方法があれば教えていただきたいです。 よろしくお願いします。

  • ACCESS VBAでexcelの複数シートをインポートしたい。

    ACCESS VBAでexcelの複数シートをインポートできますか。 TransferSpreadsheetでシートを指定できるのでしょうか。 宜しくお願いします。

  • Access2000のVBAでエクセルマクロ実行

    お世話になります。 Access2000のVBAでエクセルのマクロとアクセルのマクロを 交互に実行したいと思っております。 (1)エクセルのマクロ1を実行 (2)アクセスのマクロAを実行 (3)エクセルのマクロ2を実行 と交互に実行したいのです。 下記のサイトなどを参考に試みたのですが、 http://www.nurs.or.jp/~ppoy/access/access/acX005.html (1)を実行している途中に (2)が進んでしまいます。 どのようにすれば、(1)が終わってから(2)と、前の処理が 終わってから次の処理に進むことが出来るのでしょうか? Access2000のVBAから指示をかけたいので、 Access2000のVBAのコードで教えて頂ければと 思います。

  • エクセルのデータをアクセスのテーブルに移動入力する

    エクセルのデータをアクセスのテーブルに移動入力するVBA フォルダAにおいて、a1.xlsxというファイルがあり、 そのsheet1のセル(a,1)=1 A1が1 とします その値をアクセスのデータベース(これもフォルダAにあります)  b.accdbのテーブル1の フィールド1に入力したいときの エクセルマクロのVBAを御教示いただけると助かります さらに続けて フォルダAにおいて、a2.xlsxというファイルがあり、 そのsheet1のセル(a,1)=2 A1が2 とします その値をアクセスのデータベース上記と同じ  b.accdbのテーブル1の フィールド1に追加で入力したいときの エクセルマクロのVBA 以上わかると助かります よろしくお願いします win10 office365

  • ゾンビエクセル・・・(ExcelVBA)

    ExcelのVBAからAccessを起動し、エクセルファイルのインポートを行っています。 この処理を行うと、その後エクセルを閉じてもプロセスにエクセルが残ってしまいます。 なぜこうなってしまうのか判りません。よろしかったら教えてください(><) 一応コードを書いてみます。TransferSpreadsheetのコードを実行しない場合はゾンビエクセルは残らないので、それが原因だとは思うのですが他の方法がわかりません。 よろしくお願いいたします。 Dim appAccess As Object Dim acImport, fname As String, ffname As String acImport = "acImport" fname = ThisWorkbook.Path & "\取込.mdb" ffname = ThisWorkbook.FullName Set appAccess = CreateObject("Access.Application") appAccess.OpenCurrentDatabase fname appAccess.DoCmd.TransferSpreadsheet , 8, _ "torikomi", ffname, True, "torikomi" Set appAccess = Nothing

  • ADOレコードセットをExcelファイルへエクスポート

    ADOレコードセットをExcelファイルへエクスポート ADOのレコードセットをExcelファイルへ出力したいと考えています。 レコードセットを使用した場合、TransferSpreadsheet の様なメソッドは使えないのでしょうか? ファイルサーバーにAccessクエリを作成する事も考えたのですが、多数で使用する為、 トラブルが怖いので避けました。 レコードセットを直接出力できるメソッドor関数等はないものでしょうか? アドバイスよろしくお願いいたします。 m(__)m

専門家に質問してみよう