[リストへもどる]
一括表示

投稿時間:2003/06/20(Fri) 10:37
投稿者名:ゆうや
Eメール:curren62036@yahoo.co.jp
URL :
タイトル:
Excelのセルへの書き込みについて。
こんにちは。わからないことがあるので投稿してみました。
Win98 SecondEditionでVB6.0 SP5を使っています。

CreateBojectを使ってExcelを関連付け、シールの各セルに文字列を書き込もうとしています。
Forを使って300行分くらい書き込むのですが、概算で2.5秒くらいかかってしまっています。
この書き込みを高速化させたいのですが、なにか手段はあるでしょうか。色々考えているのですがわかりません。
どなたかご存知の方、教えて下さい。宜しくお願いします。

以下のように実行しています。

Dim strArray(1 To 350) As String
Dim lngMax As Long
Dim excelApp As Object                  'Excelアプリケーションオブジェクト
Dim excelBook As Object                 'Excelワークブックオブジェクト
Dim excelSheet As Object                'Excelシートオブジェクト

    lngMax = 350
    
    'この辺でstrArrayに文字列を設定
    
    Set excelApp = CreateObject("Excel.Application")    'Excelオブジェクトの取得
    With excelApp
        .DisplayAlerts = False                          '終了時のダイアログボックスを非表示設定
        Set excelBook = .Workbooks.Open("c:\test.xls")  '指定Excelファイルオブジェクトの取得
    End With
    With excelBook
        Set excelSheet = .Worksheets("Sheet1")
    
        '★データ書き込み、上書き保存
        With excelSheet
            For n = 1 To lngMax
                .Cells(n, 1).value = strArray(n)
            Next
        End With
        .SaveAs filefullname                           'Formatファイルを指定ファイル名として保存
        .Close                                         'ファイルを一旦閉じる
    End With

    '★エクセルファイル保存、オブジェクトの解放
    excelApp.Quit                                               'Excelアプリケーションの終了
    Set excelSheet = Nothing                                    'シートオブジェクト解放
    Set excelBook = Nothing                                     'ワークブックオブジェクト解放
    Set excelApp = Nothing                                      'アプリケーションオブジェクト解放

投稿時間:2003/06/20(Fri) 11:51
投稿者名:Say
Eメール:
URL :
タイトル:
Re: Excelのセルへの書き込みについて。
もしかしたらcsvに吐き出して、
Excelにインポートしたほうが
速いかも知れません。

投稿時間:2003/06/20(Fri) 12:36
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Excelのセルへの書き込みについて。
Range オブジェクトを使用すれば少しは早くなるかも知れません。

掲示板の No.1916 魔界の仮面弁士さんの投稿を参考にして下さい。

投稿時間:2003/06/20(Fri) 13:27
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: Excelのセルへの書き込みについて。
> こんにちは。わからないことがあるので投稿してみました。
> Win98 SecondEditionでVB6.0 SP5を使っています。
>
> CreateBojectを使ってExcelを関連付け、シールの各セルに文字列を書き込もうとしています。
> Forを使って300行分くらい書き込むのですが、概算で2.5秒くらいかかってしまっています。
> この書き込みを高速化させたいのですが、なにか手段はあるでしょうか。色々考えているのですがわかりません。
> どなたかご存知の方、教えて下さい。宜しくお願いします。

 一度、セル範囲を配列に取り込み、その配列に文字列を代入し
 再び、そのセル範囲に配列の値をもどしてやるというのはどうでしょうか?
 
Dim varArray As Variant

With excelSheet
    varArray = .Range(.Cells(1, 1), .Cells(lngMax, 1)).Value
    For n = 1 To lngMax
        varArray(n, 1) = strArray(n)
    Next n
    .Range(.Cells(1, 1), .Cells(lngMax, 1)).Value = varArray
End With

投稿時間:2003/06/20(Fri) 14:26
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: テスト結果
別途Excelを起動して表示状態にしてから測定しました。

こちらは、0.04秒かかりました。
Private Sub Command1_Click()
    TimeStart
    
    Dim dat(1 To 100, 1 To 10) As Long
    Dim i As Long, j As Long
    For i = 1 To 100
        For j = 1 To 10
            dat(i, j) = i
        Next j
    Next i
    
    Dim objRange As Range
    Set objRange = xlSheet.Range("A1:J100")
    objRange.Value = dat()
    Set objRange = Nothing
    
    TimeEnd
End Sub


こちらは13.9秒です。 Excelを非表示でも11秒です。
Private Sub Command2_Click()
    TimeStart
    
    Dim dat(1 To 100, 1 To 10) As Long
    Dim i As Long, j As Long
    For i = 1 To 100
        For j = 1 To 10
            dat(i, j) = i
        Next j
    Next i
    For i = 1 To 100
        For j = 1 To 10
            xlSheet.Cells(i, j).Value = dat(i, j)
        Next j
    Next i
    TimeEnd
End Sub

投稿時間:2003/06/27(Fri) 14:52
投稿者名:ゆうや
Eメール:curren62036@yahoo.co.jp
URL :
タイトル:
お礼:Excelへの書き込みについて。
Sayさん、花ちゃんさん、LESIAさん
お返事ありがとうございました。お返事に対するレスが遅くなり失礼しました。
具体的にはLESIAさんが教えて下さったような方法で行ってみました。結果セルへの書き込みが超速くなりました。
どうもありがとうございました!!
花ちゃんさんのテスト結果書き込みも拝見させていただきました。ありがとうございます。
For文とRangeオブジェクトを使うのって劇的に違うんですね。
どうもありがとうございました!!