- ベストアンサー
データベースからエクセルのシートに素早く転記する方法
- オラクルのデータベースから呼び出して、エクセルのシートに素早く転記する方法を教えてください。
- 現在は1項目ずつ転記しているため、1000行で1分かかっています。
- 配列を使用するなど、より効率的な方法があれば教えていただけますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
特に何もデータ弄ってなく、かつ固まってるみたいだから CopyFromRecordsetでいいんじゃないですか? というか1分ってえらい時間かかってますね。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
別方法で早くなるかどうかに関心があるなら http://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_1.html にあるオラクルからデータをエクセルに持ってくる方法がエクセルのメニューにありますので、やってみるか、ということです。 Microsoft Queryを使用、に当たるものでデーター外部データの取り込みの操作です。 上記WEBの Microsoft Queryを使用する方法をよく読んで、やれるかどうかやってみてください。 こちらはテストできる環境になく(オラクルを使ってない)ので、詳細を記すことは出来ませんが、Accessなどの例では簡単なので、大雑把に言えば、指定を変えるだけと思いますが、相当経験はいるかもしれません。 詳しい人が近くにいるようなので、WEBの方法の設定などで、アドバイスを受けるか、このOKWAVEのオラクルのカテゴリに質問を出して見るのはどうかな。特殊なほう(オラクル)に質問を出すのが、質問のコツですよ。
- sppla
- ベストアンサー率51% (185/360)
画面に表示しているシートに対して書き込みを行っている場合には、画面の描画時間もかかります。その場合には他のシートを表示しておき、データを書き込むシートを画面表示しないと速くなるかもしれません。
補足
ありがとうございます。 下記のような事を、試してみました。 少し早くなりました。 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.Calculate
- webuser
- ベストアンサー率33% (372/1121)
viewで加工して最終形を作っておき、それをODBCなどから呼び出すのはどうですか?
お礼
会話になっていなくて済みません。 もしかして、途中に一行、 ActiveSheet.Range("b12").CopyFromRecordset Rs こんな感じで入れれば良いのでしょうか?
補足
素早い返事ありがとうございます。 ただ私自身はエクセルのマクロしか分からなくて、このソースも 他の方に作ってもらったものです。データベースへのアクセスへの 部分は特に分からないので、OraDset.Fieldsで呼び出してから、 書き込みを一気にできないかな、という感じです。 1項目ずつ書き込んでいくのは、こんなものなんでしょうか? Public pOraSession As OraSession Public pOraDB As OraDatabase Public Line_Cnt As Long Public strEigcod As String Sub Ten_Data() Dim strDbname As String Dim strUser As String Dim strPath As String Dim OraDset As OraDynaset Dim strSql As String strDbname = "AAAA" strUser = "AA" strPath = "AA" Set pOraSession = CreateObject("OracleInProcServer.XoraSession") Set pOraDB = pOraSession.dbopendatabase(strDbname, strUser & "/" & strPath, 0&) Range("F2").Select strEigcod = ActiveCell.Value If (strEigcod = "1") Then strEigcod = "111" Else strEigcod = "222" End If Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Line_Cnt = 11 strSql = "select * from Tenjdb where Jyokub = '0' and Eigcod = '" & strEigcod & "' " & _ "order by Torcod,Tencod,Kanrno" Set OraDset = pOraDB.DbCreateDynaset(strSql, 0&) (最初に投稿した部分) Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.Calculate Range("A2").Select Set OraDset = Nothing Set pOraDB = Nothing Set pOraSession = Nothing End Sub