- 締切済み
Access2000にエクセルデータを取り込み
お世話になります。 Access2000のVBAを使用して エクセルにデータを取り込みたいと 思っています。 現在は、下記の(1)のソースで、エクセルのデータを Access2000に取り込んでいます。 しかしながら、「取り込み開始」の箇所を >あと、アクセスのインサートはSQL一発のほうが早いと思う。 >http://www.1keydata.com/jp/sql/sql-insert-into.php というアドバイスを頂きました。 しかしながら、私の知識がまったくなく、どのように コーディングしていいのかわからない状態です。 そこで、お手数でもうしわけございませんが、 下記の(1)のソースをSQLで使用した場合のコードを 教えて頂けないでしょうか? 私が馬鹿のため、ソースコードで頂きたいので、 ソースコードがわからないかたは、回答頂かなくて 結構ですのでよろしくおねがいいたします。 ------------ソース(1)---------------- Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:=CurrentProject.Path & "\メイン.xlsm" ---------------取り込み開始------------- rs2.Open "選手", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic iRow = 2 sheet = "program" rs.Open "選手情報_選手ID", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic iRow = 2 ' ★ sheet = "program" While (oApp.Sheets(sheet).cells(iRow, 1) <> "") rs.Filter = "日=" & oApp.Sheets(sheet).cells(iRow, 2) rs.Filter = rs.Filter & " and 場=" & oApp.Sheets(sheet).cells(iRow, 1) rs.Filter = rs.Filter & " and 番号=" & oApp.Sheets(sheet).cells(iRow, 3) If (rs.EOF) Then rs.AddNew rs("日") = oApp.Sheets(sheet).cells(iRow, 2) rs("場") = oApp.Sheets(sheet).cells(iRow, 1) rs("番号") = oApp.Sheets(sheet).cells(iRow, 3) End If rs("1番") = oApp.Sheets(sheet).cells(iRow, 5) rs("2番") = oApp.Sheets(sheet).cells(iRow, 5 + 26) rs("3番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26) rs("4番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26 + 26) rs("5番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26 + 26 + 26) rs("6番") = oApp.Sheets(sheet).cells(iRow, 5 + 26 + 26 + 26 + 26 + 26) rs.Update iRow = iRow + 1 Wend rs.Close ---------------取り込み終了------------- ---------------取り込み開始------------- rs.Open "選手情報_選手名", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic iRow = 2 ' ★ sheet = "program" While (oApp.Sheets(sheet).cells(iRow, 1) <> "") rs.Filter = "日=" & oApp.Sheets(sheet).cells(iRow, 2) rs.Filter = rs.Filter & " and 場=" & oApp.Sheets(sheet).cells(iRow, 1) rs.Filter = rs.Filter & " and 番号=" & oApp.Sheets(sheet).cells(iRow, 3) If (rs.EOF) Then rs.AddNew rs("日") = oApp.Sheets(sheet).cells(iRow, 2) rs("場") = oApp.Sheets(sheet).cells(iRow, 1) rs("番号") = oApp.Sheets(sheet).cells(iRow, 3) End If rs("1番") = oApp.Sheets(sheet).cells(iRow, 1 + 5) rs("2番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26) rs("3番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26) rs("4番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26 + 26) rs("5番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26 + 26 + 26) rs("6番") = oApp.Sheets(sheet).cells(iRow, 1 + 5 + 26 + 26 + 26 + 26 + 26) rs.Update iRow = iRow + 1 Wend rs.Close ---------------取り込み終了-------------
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 30246kiku
- ベストアンサー率73% (370/504)
質問の趣旨を確認させてください ・動いているけど遅いので速くしたい ・ただ単にSQL一発の方法に興味がある どちらになるのでしょう。 提示された VBA を見る限り、INSERT 一発では終わりませんね 存在したら UPDATE / 存在していなかったら INSERT 単に考えると、この切り分けは必要ですね。 過去の以下質問で回答していたと思います Access2000のVBAで上書き更新 http://okwave.jp/qa/q8139092.html 回答の1つ目に記述していたと思いますが、動かなかったという事になりますか。 (INSERT ではなく UPDATE でのものになっていますが) WHERE 部分を削除すれば、UPDATE / INSERT 区別なく処理していると思うのですが・・・ なので、今回の回答では、上記質問での回答を試してみてください。という事になります。 ただ、あの時の回答のまま動くのか?は、わかりません 今回の質問では、Excel ファイルの拡張子は xlsm になっているので。 (他の質問でも 拡張子は xlsm ですね) どの様な環境で動かそうとしていますか Excel は、2007 以降がインストールされていて、Access は 2000 だけとか? Access も 2007 以降が一緒にインストールされている?・・・とか 混在した環境は持ち合わせていないので、これについて補足いただいても回答できません。 (補足あれば、他の方が回答する際に役立つと思います) 以下は余談です:記述を見ていて気になった箇所2つ) > rs.Filter = "日=" & oApp.Sheets(sheet).cells(iRow, 2) > rs.Filter = rs.Filter & " and 場=" & oApp.Sheets(sheet).cells(iRow, 1) > rs.Filter = rs.Filter & " and 番号=" & oApp.Sheets(sheet).cells(iRow, 3) ここは以下の様に rs.Filter = として設定する回数を1回に rs.Filter = "日=" & oApp.Sheets(sheet).cells(iRow, 2) _ & " and 場=" & oApp.Sheets(sheet).cells(iRow, 1) _ & " and 番号=" & oApp.Sheets(sheet).cells(iRow, 3) rs.Filter = で設定されると、その都度 絞込み処理が動いたと思います つまり、現状では3回絞込み処理が・・・・→ 1回にする事で速くはなると思います。 Cells(4, 6) = "ABCD" Cells(4, 6 + 26) = "abcd" Cells(4, 6 + 26 + 26) = "1234" 雰囲気、上記の様な記述が見受けられますが、数値にこだわる必要はないと思います。 例えば、 Cells(4, "F") = "ABCD" Cells(4, "AF") = "abcd" Cells(4, "BF") = "1234" でも動いたと思います。 同じ動きをするのなら、後々わかりやすい方を選ばれたらと・・・