VB6.0用掲示板の過去のログ(No.2)−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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -