• ベストアンサー

ACCESS2000ファイルのインポートについて

ACCESS2000を使用しています。 ある指定のフォルダにある複数のEXCELファイルを、ACCESSに一括でインポートしたいです。 EXCELファイルは範囲指定を行います。(例えばb2:d100までインポートしたい) ブック名は部署名が入っており、シート名はどのブックも同一シート名です。 どのように行えばいいでしょか。 ご回答の程、どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.7

あら、まだ続いていたのですね(汗)。 >> AC2000で動作確認しています と書いた通り、私の環境では動いています。 ちなみに2010でも動いていますから、2007でも動くはずですよ。 (手元に2007が無いので検証できませんが。) それでも動かないようですが、 > エラーも表示されませんでした。 > ACCESSは、エラー時には、EXCELのように、黄色くマーカーされないのでしょうか されます。 されない、と言うことは、マクロはエラー無く動いているということです。 だとすると考えやすい事は   myPath = "C:\import\" ここで指定したフォルダにエクセルブックが無い あるいはフォルダが合っているとして   myFilename = Dir(myPath & "*.xls") ここに伴い、 > 2007では、拡張子をxlsxに変えました。 とのことですが、このフォルダに「xlsx」ファイルが存在しない、 どちらかだと思います。 フォルダ名を確認いただくのが初めの一歩。 フォルダ名が合っていたら   myFilename = Dir(myPath & "*.xls*") と書きなおしてみるのが次のステップです。 上記なら「xls」「xlsx」どちらにも対応できますからオススメです。

zero2012
質問者

お礼

お礼がとても遅くなり、申し訳ございませんでした。 お蔭様で、お教え頂いた通り実行した結果、無事にインポートすることができました。 何度もご回答いただき、大変助かりました。 今後とも、どうぞよろしくお願いいたします!!

その他の回答 (6)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.6

回答No.5です テストしてみました。 色々間違いがありました。 済みません。No.5は無かった事にしてください インポートするテーブルとまとめるテーブルを用意します。 インポートするテーブル  フィールドは主キーなしのワークシートの項目名と同じ名前のフィールド まとめるテーブル  ID(オートナンバー型、主キー)部署名 及び必要とする見出し名 次の処理をブックの数だけ繰り返しコーディングします 1.インポートテーブル初期化 2.一つ目のブックをインポート 3.インポートテーブルをまとめテーブルに条件付き(where)で追加 Private Sub インポート_Click() Dim ブック名, ルート名 As String ルート名 = "F:" ブック名 = "営業1課" '1.インポートテーブル初期化 DoCmd.DeleteObject acTable, "インポートするテーブル" '2.一つ目のブックをインポート DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "インポートするテーブル", ルート名 & ブック名 & ".xlsx", True, strrange '3.インポートテーブルをまとめテーブルに条件付き(where)で追加 DoCmd.RunSQL ("insert into まとめテーブル(部署名,商品名,金額) select ブック名,商品名,金額 from インポートテーブル") ブック名 = "営業2課" DoCmd.DeleteObject acTable, "インポートするテーブル" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "インポートするテーブル", ルート名 & ブック名 & ".xlsx", True, strrange DoCmd.RunSQL ("insert into まとめテーブル(部署名,商品名,金額) select ブック名,商品名,金額 from インポートテーブル") ブック名 = "営業3課" DoCmd.DeleteObject acTable, "インポートするテーブル" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "インポートするテーブル", ルート名 & ブック名 & ".xlsx", True, strrange DoCmd.RunSQL ("insert into まとめテーブル(部署名,商品名,金額) select ブック名,商品名,金額 from インポートテーブル") End Sub

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.5

インポートするテーブルとまとめるテーブルを同じ形式で用意します。 テーブルのフィールドは、シートの項目名に、ID(オートナンバー型、主キー)部署名を追加し 次の処理をブックの数だけ繰り返しコーディングします 1.インポートテーブル初期化 2.一つ目のブックをインポート 3.インポートテーブル部署名をブック名に更新 4.インポートテーブルをまとめテーブルに条件付き(where)で追加 1.インポートテーブル初期化 2.次のブックをインポート 3.インポートテーブル部署名をブック名に更新 4.インポートテーブルをまとめテーブルに条件付き(where)で追加

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

すいません。 "てぶる"は、お好みの"テーブル名"に書き換えてご確認くださいませ。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

失礼、エクセルブックのインポートでしたね。 インポート定義は要りません。 Sub XL_Import() Dim myFilename As Variant Dim myPath As Variant Dim mySheet As String Dim myRange As String myPath = "C:\import\" myFilename = Dir(myPath & "*.xls") mySheet = "sheet1" myRange = "A1:C4" Do Until myFilename = "" DoCmd.TransferSpreadsheet acImport, 8, "てぶる", myPath & myFilename, True, _     mySheet & "!" & myRange myFilename = Dir() Loop End Sub 上記は、「c:\import」というフォルダ内にあるxlsファイルのうち、 「sheet1!A1:C4」の範囲を「テーブル名」というテーブルにインポートするモジュール例です。 エクセルの表における「項目名が入っている行」も範囲に含めてやった方が無難です。 AC2000で動作確認していますので、あとは適宜ご自身の環境に合わせてお使い下さい。 追記) 補足で提示くださったコード中に エクセルブックを開いて、「何もせずに」上書き保存・終了の処理があるようですが、 これはきっと意味が無いですよ。 「開いていたら、保存して閉じる」のなら意味がありますけどね。 でも、その場合でも上記のコード内に組み込めます。 わざわざ3個以下限定の配列に格納するのも私としては?です。

zero2012
質問者

補足

いつも早速にご回答いただき、誠にありがとうございます。 明確で、綺麗なコード、どうもありがとうございました! おっしゃる通り、不要な記述もありました。。 ACCESS2000で実行した結果、何の反応も、エラーもでません。 自宅にある、2007で実行した結果も今度は何の反応も、エラーも表示されませんでした。 2007では、拡張子をxlsxに変えました。 初心者で申し訳ないのですが、ACCESSは、エラー時には、EXCELのように、黄色くマーカーされないのでしょうか。 ACCESSが無理なようですので、EXCEL2000では、どのように記述すればよろしいでしょうか。 何度もお手数をお掛けし、大変申し訳ありません。 どうぞよろしくお願い致します。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

簡単な理由だと思うのですが・・・ > buf = Dir(pathFILE & "*.xlsx") アクセス2000は「XLSX」ファイルを正しく認識しませんよ。

zero2012
質問者

補足

失礼しました。 記載ミスでした。 xlsで実行した結果、何の反応もありませんでした。 仮にxlsxだった場合、何らかのエラーは表示されるかと思います。 何度も恐れ入りますが、ご回答の程、どうぞよろしくお願い致します。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

グーグル辺りで 「アクセス フォルダ内一括取り込み」 とか 「アクセス 一括インポート」 とかで探すといろいろ見つかりますよ。 例えば http://www.editorgoes.net/blog/2007/07/access_8.html こんな感じのモノだとか。 要するに、アクセスでインポート定義を作り、 「指定されたフォルダ内の全エクセルブックに対し  インポート定義を基にインポートする」 ようなモジュールを作ってやれば良いです。

zero2012
質問者

補足

ご回答いただき、ありがとうございます。 次のモジュールを、ACCESS2000の標準モジュールに記載し、実行した結果、何のエラーも反応もありませんでした。 自宅はACCESS2007で、これでは、ちゃんと実行できましたが、会社はACCESS2000で、何のエラーも反応もありません。 何故でしょか。 ご回答の程、どうぞよろしくお願い致します。 Sub ImportFromExcel() Dim objEXCEL As Object Dim objWorksheet As Object Dim arrFILE(3) As Variant '3個以下のファイルを読み込む設定の場合 Dim pathFILE As String Dim i As Integer Dim j As Integer Dim buf As String pathFILE = "C:\Users\hanako\Desktop\import\" nameSHEET = "Sheet1" 'AccessにインポートしたいExcelシート名 rangeSHEET = "b2:d100" '上記シートのインポートしたい範囲(最大値を指定) nameTABLE = "テーブル1" 'インポート先のAccessテーブル名 '--------------------------------------------- 'フォルダにあるExcelファイル名を取得 '--------------------------------------------- i = 0 buf = Dir(pathFILE & "*.xlsx") Do While buf <> "" arrFILE(i) = buf buf = Dir() i = i + 1 Loop '--------------------------------------------- 'Excelの各ファイルをAccessにインポート '--------------------------------------------- i = i - 1 For j = 0 To i 'Excelファイルを開く Set objEXCEL = CreateObject("Excel.Application") objEXCEL.Visible = True objEXCEL.Workbooks.Open pathFILE & arrFILE(j) '上書き保存とExcelの終了 objEXCEL.DisplayAlerts = False objEXCEL.Workbooks(1).Save objEXCEL.Workbooks(1).Close objEXCEL.Quit 'オブジェクトの破棄 Set objWorksheet = Nothing Set objEXCEL = Nothing DoCmd.TransferSpreadsheet acImport, 8, nameTABLE, pathFILE + arrFILE(j), True, nameSHEET + "!" + rangeSHEET Next End Sub

関連するQ&A

  • 【AccessVBA】フォルダを指定してインポート

    私は現在、Accessでフォルダ内のExcelファイルを一括でインポートし集計するというツールを作成しております。 そこで質問ですが、フォルダ指定ダイアログを表示し、ダイアログで指定したフォルダ(中はxls,xlsx,xltmなど)をテーブル上にインポートするようなVBAはありますでしょうか? まとめます。 ・フォルダを選択するダイアログを表示したい ・一つのフォルダの中に、幾つものエクセルファイルが存在する ・ファイル名などはバラバラです ・シート単位でインポートしたいです ・インポートするシートを選択できるようにしたいです ・テーブルのカラムは決まっています 以上です。 どうか皆様のアドバイスよろしくお願い致します。

  • Access VBA インポート シート指定

    AccessのVBA を用いて、ExcelからAccessへデータを インポートする際、ダイアログボックスを表示させて Excelのファイルを選択させるようにしています。 これをシート名まで指定させる事は可能でしょうか? ◆シートは枚数が固定されず、都度かわります。 ◆インポートしたいシート数も都度かわります。 ◆1sheet = 1 テーブルにしたいです。 ◆1度の動作で、1sheetのインポートでも、複数でもかまいません。 ◆できれば、ダイアログでファイルを選択した流れで シートまで選択される方法が望ましいです。 ◆Accessのテーブル名もテキストボックスで任意なものが 付けられるようにしたいです。 お知恵をお貸し下さい、何卒よろしくお願いいたします。

  • エクセルからアクセスへのインポートについて

    エクセルにある複数のファイルをアクセスへインポートしようとしています。エクセルには数百のシートが存在し、アクセス上で個々のテーブルにインポートしたいと考えています。一つ一つやればいいのですが、マクロなどを使って、自動的にインポートする方法はないのでしょうか?何卒よろしくお願いいたします。

  • 複数のエクセルファイルをインポートする方法

    仕事でアクセスを使ってエクセルファイルをまとめて分析する ようなことしてますが、任意に指定したフォルダにある エクセルファイルの指定したワークシートをインポートする コードがわかりません。 ちなみに Fanction ExcelDataImport() On Error GoTo エラー  Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "tab_原価構成" varxls = "c:\原価構成表.xls" のこのエクセルファイルを指定する部分で任意のフォルダの中の すべてのエクセルファイルを指定したいのと・・ strrange = "sheet2!b1:z1000" 複数のエクセルファイルだが、シート名は同じで指定する 範囲も同じ場合はこれでいいのか? がわかりません。 どなたか教えていただけないでしょうか? お手数ですがよろしくお願いします。

  • access vba インポートについて

    別のところで質問したのですが、回答が得られなかったので こちらで質問しまする。 昨日、accessをさわリはじめた、おっさん初心者です。 お願い:エクセルのデータをアクセスにインポートしたいです。      1つのエクセルファイルに複数(30枚)シートがあり、      それぞれのシート名で、アクセスのテーブルが複数作成できれば良いです。      アクセスのVBAにどんなコードを書けば良いのでしょうか。 1つのシートの取り込みは、 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, ”インポート先テーブル名", "ファイル名", True, "シート名" & "!" (全くわかってませんが、)これでできましたが、この辺がおっさんの限界でした。 色々web見たのですが、難しい・・・とりあえず、やさしく教えてください。 (1)フィールド名ごとインポートする方法 (2)すでに存在するテーブルにデータを継ぎ足す方法 テーブル”A”には  日付     獲物    調理    感想   1月1日    きつね   なべ    にがい  1月2日    もぐら   からあげ  まずい 1月3日    ぱんだ   さしみ   あまい           ↑   ↑   ↑   ↑  ↑ シート ”A”から 1月4日    たぬき   なべ    ばかうま 1月5日    らっこ   ひもの    うまい を追加 この二つができるとうれしいです。 アクセスは2000です。 エクセルは2000です。 ウィンドウズはXPです。 エクセルは初級程度できます・・・。 基本を理解していなくてもわかる感じで助けてパソコン大先生!!

  • アクセス 複数のテキストファイルインポートについて

    アクセス VBAについてです。 DoCmd.TransferTextで複数のテキストファイル(同一フォルダの中、上から順に全て)を取り込み、 テーブル名を一つ一つ順番につけていくことは可能でしょうか?? 例 フォルダダイアログを作ってそのフォルダを指定して フォルダ名をテキストボックスに表示、 その表示されてるフォルダの中身を 別のボタンを押せばインポートできるように、 テキストファイル A1 A2 A3 A4 インポート後のテーブル名 B1 B2 B3 B4 インポート時の定義は全て同一です。 わかりにくくてすみません、 知恵を貸してください

  • Accessにおけるパスワード一括解除について

    指定のフォルダにあるエクセルブックをアクセスにて一括解除してそのままAccessにインポートする方法を探しています。 vba初心者なのでコードも頂けると助かります。

  • アクセス2010 VBA 指定セルのインポート

    アクセス・エクセル2010を使用しています。 モジュールを用いて以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 1.ダイアログを表示させ、取り込みファイル(.xls)を指定してインポートしたい ※1シート目指定(シート名は変動の可能性アリ) 2.1で指定したファイルと同じフォルダ内にあるファイル(.xls)を全てインポートしたい ※各ファイル、インポートは1シート目のみです 3.フォームのテキスト(作成済:フォーム名(frm)・テキスト名(txt))で取り込みファイルの範囲指定をしたい ※1行目からの記載では無いです ※フィールド名行は変動しませんが値行は変動し、月によって列も変動する可能性があるため、テキストを使って範囲の変更がしたいです ※取り込みファイルの様式(形式・範囲)は全て同じです:形式はすべて倍精度浮動小数点型です) 具体的には、今月は・・ A列・1~2行目に空白があり、B列~記載がありますが、 インポート範囲としてはK列に項目・7行目にフィールド名になる名称・L8~Wに倍精度浮動小数点型の数値が入っています。 1つ1つの条件であれば、検索すれば(参考にできるものが)出てくるものもあるのですが、 それらを どう組み合わせればうまく作動するのか 処理条件を どう設定すれば良いのかが よくわからず、困っています。 知識不足で申し訳ありませんが、ご指導いただけますと幸いです。 よろしくお願いします!!

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

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

  • インポートの自動化

    複数のエクセルファイルを自動でインポートしたいのですが DoCmd.TransferSpreadsheet _ TransferType:=acImport, SpreadsheetType:=acSpreadsheetTypeExcel97 _ , TableName:="T1", FileName:="C:\Book1.xls", HasFieldNames:=True のコードだと特定したファイルしかできないみたいです・・。 指定したフォルダの中にある複数のエクセルファイルを 自動でインポートするコードなんてあるんでしょうか? 幾分、初心者のためわからないことが多いです。 教えていただけると助かります。 よろしくお願いします。

専門家に質問してみよう