投稿時間: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
|