[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

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

投稿時間:2005/10/07(Fri) 19:26
投稿者名:サンタさん
Eメール:
URL :
タイトル:
Re: VBからExcelファイルを編集する際の処理速度向上について
申し訳ありません。環境を書き忘れました。

VB6.0 Excel2000 WinXPです。

>         ExApp.Selection.AutoFill Destination:=.Range(ExApp.ActiveCell, .Cells(2, 1)),  
  
> Type:=xlFillDefault
それと、この部分は実際には改行されていません。

失礼致しました。

投稿時間:2005/10/07(Fri) 20:37
投稿者名:neptune
Eメール:
URL :
タイトル:
Re^2: VBからExcelファイルを編集する際の処理速度向上について
こんちは

恐らく、そんなには速くなりません。
なぜなら、作業自体がセル(Rangeオブジェクト)への参照が多い作業だからです。
セルへの参照は時間がかかります。

改善できるところはぱっと見ですが、Selcetしている無駄に気が付きますが、
回数が少ない事もあり大きな影響は及ぼさないような気がします。
確かrangeオブジェクトにCopyメソッドはあったハズなので、その点は改善できます。