投稿日 | : 2005/10/07(Fri) 19:23 |
投稿者 | : サンタさん |
Eメール | : |
URL | : |
タイトル | : VBからExcelファイルを編集する際の処理速度向上について |
初めまして。
VBからExcelファイルを読み込んで、以下のように編集を行う処理を作っています。
1.列数を取得する(他プロシージャで使用)
2.セル(1,1)の内容をコピーする
3.最左列に1行追加する
4.最左列の全行に、コピーした内容をペーストする
引数は、Excelファイルの存在するディレクトリ名(絶対パス)と、
Excelファイルの名前です。
以下のコードは、VBAのマクロを使って取得したものに、
このサイトのExcel処理の注意点を反映させたものです。
問題なく動作しますが、何度もこのプロシージャを呼ぶことになることと、
他の言語のキックなども別プロシージャで行っていますので、
Excel関係の部分だけでも処理速度向上を目指したいと思い、投稿させて頂く次第であります。
なお、エラー処理等の部分は割愛させてもらっています。
「こうしたらもっと処理速度上がる」ようなことを教えて頂けたら幸いです。
よろしくお願いします。
Private Function Ex_Edit(ByVal ExPath As String, ByVal ExName As String) As String
Dim ExApp As Excel.Application 'アプリケーションオブジェクト
Dim ExWbk As Excel.Workbook 'ワークブックオブジェクト
Dim ExWst As Excel.Worksheet 'ワークシートオブジェクト
Dim ColStart As Integer '列数カウントスタート
Dim ColEnd As Integer '列数カウントエンド
Dim ColCount As Integer '列数
'オブジェクトの設定
Set ExApp = CreateObject("Excel.Application")
Set ExWbk = ExApp.Workbooks.Open(ExPath & "\" & ExName)
Set ExWst = ExWbk.Worksheets("Sheet1")
With ExWst
'列数取得
.Cells(1, 1).Select
ColStart = ExApp.ActiveCell.Column
ExApp.Selection.End(xlToRight).Select
ColEnd = ExApp.ActiveCell.Column
ColCount = ColEnd - ColStart + 1
'セル(1,1)に入っている内容を、最終行までコピペする
.Cells(1, 1).Select
ExApp.Columns(1).Insert shift:=xlToRight
ExApp.Selection.End(xlToRight).Select
ExApp.Selection.Copy
ExApp.Selection.End(xlDown).Select
ExApp.Selection.End(xlDown).Select
ExApp.Selection.End(xlToLeft).Select
ExApp.ActiveSheet.Paste
ExApp.Selection.AutoFill Destination:=.Range(ExApp.ActiveCell, .Cells(2, 1)),
Type:=xlFillDefault
End With
ExWbk.Save
ExWbk.Close
ExApp.Quit
Set ExWst = Nothing
Set ExWbk = Nothing
Set ExApp = Nothing
End Function