m024240 さんの引用:
1)動きがとてもユックリなので、もう少しきびきびさせる方法はないか?
2)「クリップボードに大きなデータが残っていますが残しますか、クリアしますか」のダイアログが出るので、表示せずに進めさせる方法はありますか?
bkSrc.Worksheets("カテゴリ1").Range("B24:K" & LastRow1).Copy
ThisWorkbook.Worksheets("カテゴリ1").Range("B" & LastRow2 + 1).PasteSpecial xlPasteValues
上記の部分を下記に書き換えれば、すこし高速化して、ダイアログは出ないようにできます。
With bkSrc.Worksheets("カテゴリ1").Range("B24:K" & LastRow1)
ThisWorkbook.Worksheets("カテゴリ1").Range("B" & LastRow2 + 1). _
Resize(.Rows.Count, Columns.Count).Value = .Value
End With
あと、処理の最初に、
Application.ScreenUpdating = False
処理に最後に
Application.ScreenUpdating = True
を記述して、画面更新を停止すればすこし高速化する可能性があります。
開くファイルが多くて、上記だけでは思ったほど高速化しない、ということなら、ファイルを開かずに取得する方法を検討することになります。
ADOを使ってエクセルファイルに接続して、SQLでレコードセットとしてデータを取得して、取り込み先シートに出力するということになります。
ADO(ActiveX Data Objects)の使い方の要点|VBA技術解説
https://excel-ubara.com/excelvba4/EXCEL273.html