- ベストアンサー
アクセスの外部データ(エクセル)の取り込み。VBA
- アクセスの外部データ(エクセル)をVBAで取り込む方法を教えてください。
- アクセス2003とエクセル2003を使用しています。不要な行や列がある場合、VBAを使って外部データを取り込む方法を教えてください。
- 現在、エクセルで行や列を削除してからデータを取り込んでいますが、VBAを使用して簡単に外部データを取り込む方法を知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
手作業でやっていることを、そのまま置き換えるのが一番簡単そうです。 Access からオートメーションでExcelのBookを開き Access で取り出しやすいように整形してから取り込む。 こんな感じ ※MDB ファイルと XLS ファイルは同じフォルダにあると仮定しています。 Sub test() Dim oXL As Object Dim oBK As Object Dim oSH As Object Dim tmpXls As String Set oXL = CreateObject("excel.application") Set oBK = oXL.Workbooks.Open(CurrentProject.Path & "\得意先リスト.xls") Set oSH = oBK.Sheets("リスト形式") tmpXls = CurrentProject.Path & "\得意先リストtmp.xls" With oSH .Rows("1:4").Delete Shift:=xlUp .Columns("O:AZ").Delete Shift:=xlToLeft .Columns("I:L").Delete Shift:=xlToLeft .Columns("E:E").Delete Shift:=xlToLeft .Columns("A:A").Delete Shift:=xlToLeft End With If Dir(tmpXls) <> "" Then Kill tmpXls End If oBK.saveas filename:=tmpXls oBK.Close SaveChanges:=False oXL.Quit Set oXL = Nothing 'CurrentDb.Execute ("delete * from 得意先リスト") '↑既存レコード削除ですので必要に応じて!! DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ "得意先リスト", tmpXls, hasFieldNames:=True DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ "得意先リスト参考までに", tmpXls, hasFieldNames:=True MsgBox "終了" End Sub 参考になるかと思われるところ(私も以前どっぷりとハマリましたorz) http://hanatyan.sakura.ne.jp/vbhlp/ExcelErr.htm http://homepage1.nifty.com/rucio/main/technique/teq_15.htm
その他の回答 (1)
- layy
- ベストアンサー率23% (292/1222)
『エクセルのシート全体』を取りこむ、機能であって、融通は利かないでしょう。 『CSVファイル』は1レコード目、2レコード目や、各項目の定義はあるから対応可能。 案1) このままシート全体を取りこんで、 クエリ実行で、テーブルの先頭4レコードを削除する、フィールドを削除する。 案2) シートをCSV形式にしておいて、VBAでレコード、項目を判断して取り込む。 案3) エクセル側でエクスポート用の別シートを編集する
お礼
layy 様 アドバイスをありがとうございます。 クエリ実行で、テーブルの先頭4レコードを削除する、フィールドを削除する。 CSV形式にする。 という方法もありのですね。
お礼
nicotinism様、 基本的な起動・終了処理のサイトのご紹介ありがとうございます。 作成して頂いたVBAにコメントを追加して使わせて頂きました。 Set oSH = oBK.Sheets("リスト形式") tmpXls = CurrentProject.Path & "\得意先リストtmp.xls" リスト形式を開き、行・列の削除処理 得意先リストtmp.xlsに名前を変えて保存 得意先リストtmp.xlsをTransferSpreadsheetメソッドを使いインポートするのですね。 完成しました。ありがとうございました。