• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベースから呼び出して、エクセルのシートに素早く転記したい。)

データベースからエクセルのシートに素早く転記する方法

このQ&Aのポイント
  • オラクルのデータベースから呼び出して、エクセルのシートに素早く転記する方法を教えてください。
  • 現在は1項目ずつ転記しているため、1000行で1分かかっています。
  • 配列を使用するなど、より効率的な方法があれば教えていただけますか?

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

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

特に何もデータ弄ってなく、かつ固まってるみたいだから CopyFromRecordsetでいいんじゃないですか? というか1分ってえらい時間かかってますね。

TAITAN777
質問者

お礼

会話になっていなくて済みません。 もしかして、途中に一行、 ActiveSheet.Range("b12").CopyFromRecordset Rs こんな感じで入れれば良いのでしょうか?

TAITAN777
質問者

補足

素早い返事ありがとうございます。 ただ私自身はエクセルのマクロしか分からなくて、このソースも 他の方に作ってもらったものです。データベースへのアクセスへの 部分は特に分からないので、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

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

別方法で早くなるかどうかに関心があるなら http://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_1.html にあるオラクルからデータをエクセルに持ってくる方法がエクセルのメニューにありますので、やってみるか、ということです。 Microsoft Queryを使用、に当たるものでデーター外部データの取り込みの操作です。 上記WEBの Microsoft Queryを使用する方法をよく読んで、やれるかどうかやってみてください。 こちらはテストできる環境になく(オラクルを使ってない)ので、詳細を記すことは出来ませんが、Accessなどの例では簡単なので、大雑把に言えば、指定を変えるだけと思いますが、相当経験はいるかもしれません。 詳しい人が近くにいるようなので、WEBの方法の設定などで、アドバイスを受けるか、このOKWAVEのオラクルのカテゴリに質問を出して見るのはどうかな。特殊なほう(オラクル)に質問を出すのが、質問のコツですよ。

  • sppla
  • ベストアンサー率51% (185/360)
回答No.2

画面に表示しているシートに対して書き込みを行っている場合には、画面の描画時間もかかります。その場合には他のシートを表示しておき、データを書き込むシートを画面表示しないと速くなるかもしれません。

TAITAN777
質問者

補足

ありがとうございます。 下記のような事を、試してみました。 少し早くなりました。 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.Calculate

  • webuser
  • ベストアンサー率33% (372/1121)
回答No.1

viewで加工して最終形を作っておき、それをODBCなどから呼び出すのはどうですか?

関連するQ&A

専門家に質問してみよう