frswataru
@frswataru (本石 渉)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VBA Excel Access連携 高速化

解決したいこと

Excel_VBAでSQLを実装しAccessのデータを取得しています。
とにかく処理時間長いです。処理時間を短くする方法を教えて下さい。

該当するソースコード

Dim myCon As New ADODB.Connection
Dim myRecordSet As New ADODB.Recordset
Dim mySQL As String
Dim i As Integer
Private Const mySheetName5 As String = "T_OM"
Private Const dbFile As String = "\\*****\Users\admin_SK\TPOD\TPOD.accdb"

Sub Read1()


Application.ScreenUpdating = False ' 描画を停止する

'____________________

mySQL = "SELECT * FROM T_OM_list"
                       
i = 1

Worksheets(mySheetName5).Cells.ClearContents


myCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFile & ""
myCon.Open



myRecordSet.Open mySQL, myCon, adOpenDynamic



Do Until myRecordSet.EOF
  With Worksheets(mySheetName5)
    .Cells(i, 1).Value = myRecordSet!PJNo
    .Cells(i, 2).Value = myRecordSet!工程名称
    .Cells(i, 3).Value = myRecordSet!作業コード
    .Cells(i, 4).Value = myRecordSet!作業内容
    .Cells(i, 5).Value = myRecordSet!品名
    .Cells(i, 6).Value = myRecordSet!取説ファイル名1
    .Cells(i, 7).Value = myRecordSet!取説ファイル名2
    .Cells(i, 8).Value = myRecordSet!取説ファイル名3
    .Cells(i, 9).Value = myRecordSet!製本
  End With
    i = i + 1
    myRecordSet.MoveNext
Loop
myRecordSet.Close
Set myRecordSet = Nothing
myCon.Close
Set myCon = Nothing

Application.ScreenUpdating = True  ' 描画を再開する


End Sub


0

3Answer

<覚書>

63s⇒1S

###改良前

Do Until myRecordSet.EOF
  With Worksheets(mySheetName5)
    .Cells(i, 1).Value = myRecordSet!PJNo
    .Cells(i, 2).Value = myRecordSet!工程名称
    .Cells(i, 3).Value = myRecordSet!作業コード
    .Cells(i, 4).Value = myRecordSet!作業内容
    .Cells(i, 5).Value = myRecordSet!品名
    .Cells(i, 6).Value = myRecordSet!取説ファイル名1
    .Cells(i, 7).Value = myRecordSet!取説ファイル名2
    .Cells(i, 8).Value = myRecordSet!取説ファイル名3
    .Cells(i, 9).Value = myRecordSet!製本
  End With
    i = i + 1
    myRecordSet.MoveNext
Loop

###改良後



Worksheets(mySheetName5).Range("A1").CopyFromRecordset myRecordSet


2Like

相対的評価は、比較対象を明確にしなとどうしようもないですよ

0.1sで重いという人もいれば、10sで重いという人もいる

また、どの部分が重いのか?を計測し、原因を調べていくことで、SQL、db、コード、表示などの原因を特定できて、実際の問題について、知見を得られる質問になるかと思いますよ

例えば、SQLで * 使ってるから重かったんですね、みたいな

0Like

Comments

  1. @frswataru

    Questioner

    各カテゴリで鉄板の手法やテクニック等あればと思いまして
    SQLでは*を使わないとか、、、
    ざっくりと着眼や着想するポイントがあれば、
    ちなみにSQLで*を使わずにやるのと高速化できますか?

その場合は個別の質問に分ければ回答を得られる可能性もあるかと思います

現状では回答はつきにくいのではないかな、と

0Like

Your answer might help someone💌