• ベストアンサー

MS-ACCESS VBA で外部のMDBに直接インポート!?できませんか?

表現がおかしいとおもいますが、適切な表現が出来ませんでした。 まず、プログラムとデータ部にMDBを分けてあります。 テキストファイル(csv)や、Excelファイル(xls)の複数のデータをMDBに変換し、データ部(MDB)に保存したいのですが、何か良い方法はありませんか? 私が知っている範囲だと先ず、テキストファイル(csv)をカレントMDBにインポートし、外部のデータ部MDBにエクスポート。 これでも出来るのですが、直接外部のデータ部MDBにテキストファイル(csv)を書き込めないでしょうか?

  • hang
  • お礼率34% (8/23)

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

  • ベストアンサー
noname#22222
noname#22222
回答No.3

s_husky です。 VBでインポートのみのアプリケーションを用意していました。 DoCmdを使ってもいいのですが、チェック・変換が自由にならないので使いません。 が、昨今では、Access のフォームからもインポートしています。 例えば、 <テーブル1> ID データ1 データ2 データ3  1  A    B    C に <Add.csv> 2,AA,BB,CC 3,AAA,BBB,CCC をインポートするコードは次のようです。 全体のコードは見たら判る水準と思います。 もちろん、FileExists()、FileReadArray()、CnnExecute()等のライブラリが無いと動きません。 まあ、回答が当を得ているかが不明ですのでライブラリの紹介は差し控えます。 チクッと改造すれば汎用のインポート関数になると思います。 Option Explicit Const conCSVFILE = "Add.csv" Private Sub コマンド_CSVインポート_Click()   Const conINSERTSQL = "INSERT INTO テーブル1 (ID,データ1,データ2,データ3) VALUES "   Dim StopNow   As Boolean   Dim I      As Integer   Dim J      As Integer   Dim N      As Integer   Dim M      As Integer   Dim CSV_Datas() As String   Dim ROW_Datas() As String   Dim strValues  As String      ' ----------------------------------------   ' APP と同じフォルダにCSVがないと False   ' ----------------------------------------   If FileExists(conCSVFILE) Then     ' ------------------------------------     ' CSV ファイルを配列変数に読み込む!     ' ------------------------------------     CSV_Datas() = FileReadArray(conCSVFILE)     N = UBound(CSV_Datas())     For I = 0 To N       ' --------------------------       ' 行データを列データに分割       ' --------------------------       ROW_Datas() = Split(CSV_Datas(I), ",")       M = UBound(ROW_Datas())       If M = 3 Then         ' ----------------------         ' Value 節を作成する!         ' ----------------------         strValues = ROW_Datas(0) & _               ",' " & ROW_Datas(1) & _               "','" & ROW_Datas(2) & _               "','" & ROW_Datas(3) & "'"         ' --------------------------         ' テーブルに行データを挿入         ' --------------------------         StopNow = Not CnnExecute(conINSERTSQL & "(" & strValues & ");")         If StopNow Then           Exit For         End If       Else         ' ------------------------------         ' 空行が見つかったら終了する!         ' ------------------------------         Exit For       End If     Next I     Message I & " 件をインポートしました!"   Else     ErrorMsg conCSVFILE & " が見つかりません!"   End If End Sub

その他の回答 (2)

noname#22222
noname#22222
回答No.2

データ.mdb=バックエンド。 アプリ.mdb=フロントエンド。 csv、xls のインポートはバックエンドのみに行って複数のmdbに分散しないのが宜しいのでは・・・。 ですから、ちと、質問の主旨が・・・??

hang
質問者

補足

データ部mdbを分散させるのは、競合を避ける為です。 本当はアクセスではなく、SQLサーバーなど別に立てた方がいいのかもしれませんが、 現在そういう環境にありません。 >csv、xls のインポートはバックエンドのみに行って複数のmdbに分散しないのが宜しいのでは・・・。 ですから、ちと、質問の主旨が・・・?? ここで、仰っているバックエンドにインポートするやり方がわかりません。 インポートは、Docmdでしかやり方がわかりません。 いろいろ調べているのですがなかなか見つからず困っています。 それともバックエンドにインポートするにはインポート用に関数を作る必要があるのでしょうか?

noname#79209
noname#79209
回答No.1

データMDBにリンクしているなら、プログラムMDB上にあるテーブルと同様に取り込めますよ。 私はいつもこのやり方です。

関連するQ&A

  • Excel→Access VBAによるインポート

    1つのExcelファイルの複数のデータシートをAccess2000にインポートしたい。 【説明】 data.xlsという名前のExcel2000で作成したファイルがあり、その中に同じ書式(列)を 持ったSheetが20枚ほどあります。 それらのデータをAccess2000にインポートしたいのですが、 1.作業は毎月発生する。 2.ほかのユーザも出来るようにする。 などの理由から、マクロかVBAを使って自動化できればと考えています。 ぽちっとボタンを押すと、data.xlsのすべてのシートからデータをインポートし、 それぞれのSheet名がついたテーブルに格納されるというのが理想です。 フィールド名は固定ですので、あらかじめテーブルを作っておくことは出来ます。 Excelの各シートの上部数行は見出しやら説明文が書いてありますので、 インポートの際にその部分の行(5行分)を削除することが必要です。 当方VBAの知識はほぼ皆無ですので、やんわりご教示頂ければ幸いです。 よろしくお願いいたします。 (次回ネットに入るのは15日以降です)

  • MS AccessでExcelファイルのインポートは?

    AccessのVBAでExcelファイルをインポートするにはどうすればいいのでしょうか? ちなみに DoCmd.TransferText acImportDelim, , "Tmp名簿", strInPutPath & "\名簿.csv", True (strInPutPathは、ダイアログから取得したパスです) では、CSVファイル(TXTファイル)しか読み込めません。 (もちろん、そのため拡張子が「.csv」にしていますが 読み込むファイルをテキストファイルにしたら「.txt」でもいいです) 「ファイル」メニュー(コマンド)の「外部データの取り込み」→「インポート」では、Excelファイルも読み込めるので悔しいです。 これをVBAでやりたいんですが。 よろしくお願いいたします。

  • xls→csv→txtで住所が数値で読み込まれる

    ファイルメーカーのに入っている住所録のデータを 弥生顧客にインポートする際に ファイルメーカーのデータをxlsにエクスポート それとcsvファイルに保存 カンマ区切りのテキストファイル にして弥生顧客にインポートするのですが もとデータの住所を関数で町名までと番地以下に分けているのですが xls→csvに変換する際に 住所の番地以下が数値として読み込まれ 勝手に日付になってしまうところがあります。 (しかも、その日付も西暦だったり英文だったりばらばら) 外部ファイルとして読み込んだりしてみたのですが上手くいきません。 何か解決策があれば教えてください。 どうぞよろしくお願いいたします。 ファイルメーカーのバージョンは5.5 エクセルは2003 弥生顧客は8.0です。 OSはWinXpです。

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

  • VBA で EXCELファイルをインポート

    VBAに詳しい方お助けください。VBAを使用して、データベースをつかってインポート(データベースファイルを開かずにデータの取り込み)を行いたいのですが良く分かりません。データベースは一つはCSVファイル、一つはXLSファイルです。取り込み先のEXCELファイルのSHEET1にCSVファイルのデータベース(SHEET1)、取り込み先のEXCELファイルのSHEET2にXLSファイルファイルのデータベース(SHEET1)とインポートするにはどのようなVBAの記述が必要ですか?色々と調べているのですがうまく行きません。EXCELは2003を使用しています。

  • ACCESSで、テキストファイルをインポートしたい

    宜しくお願い致します。 ACCESSで、テキストファイルをインポートしてテーブルを作成したいのですが、ファイル→インポートを選択して、ウィザードを開く方法は分かるのですが、マクロを作成してインポートは出来ないでしょうか? excel、CSVファイルでしたら、「ワークシート変換」、「テキスト変換」のマクロでインポートしたりエクスポートしたり出来ると思うのですが・・・、 (1)テキストファイルをインポートしたり、エクスポートしたりする場合、どのようなマクロがあるのでしょうか。 (ためしに、「出力」マクロで、あるテーブルをCSVファイルにエクスポートしてみたのですが、カンマ区切りにできず、excelのような枠付きのテキストファイルになってしまいました。) (2)容量が大きいデータの場合は、テキストファイルでエクスポートしたほうが良い・・・という認識に間違いはありませんでしょうか。 質問が一つ増えてしまいましたが、宜しくお願い致します。

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

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

  • テキストファイルをAccessへインポートする自動化の記述方法は?

    Accessの画面より、コマンドボタンをクリックして、外部データベース(MDB)にテキストファイルをインポートするプログラムを作っているのですが、記述方法がわかりません。どなたか回答願います。カレントデータベース(mdb)へテキストファイルをインポートするプログラムは作成したことはあります。

  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • ACCESS複数テキストファイルをインポートについて

    ドライブC、フォルダ DETA 内に 数は100を越えるテキストファイルがあります "C:\DETA\*.txt"です  性質は 「区切り記号付(カンマ区切り)」です。 フィールドは全部で4つ データ型は全て同じで”テキスト型”です。 これを 同フォルダ内の 「データベース1.mdb」にインポートしたく思います。 本来ならウィザード使って終わりですが インポートするテキストファイルが100を越えるため  一度で何とかインポートしたいのですが 手段がわからずじまいです。 マクロという項目がありますが ここでは使えないのでしょうか? アクセスに関しては超入門レベルで もう少し調べろとお叱りをいただくレベルだと思います。 そこを何とぞご教授 お願いしたく思います。