サンプル集  >  Excel VBA  >  ファイル出力
ファイル出力
2010/08/31

1行の文字数と、出力する行数を入力し、そのデータをファイルに出力します。

◆環境
OS Windows XP Professional Version 2002 Service Pack 3
Excel 2003 (11.8169.8172) SP3

ファイルへの書き込みは Print関数を使います。 Write関数だと出力されるデータに「"」(ダブルクォート)が付いてしまうようです。

fileWrite.xls
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
Option Explicit

Sub fileWriteTest()

    Dim Outline As String
    Dim dataCount As String
    Dim i As Long
    Dim msg As String
    Dim st, ed As Date

    Outline _
    = InputBox("ファイルに書き込む行数を入力して下さい。")

    dataCount = InputBox("1行の文字数を入力して下さい。")

    Open "testData.txt" For Output As #1

    ' 書き込むデータを作成
    For i = 0 To Val(dataCount) - 1
        msg = msg & (i Mod 10)
    Next

    st = Now()

    ' 指定された行数分ファイルに書き込む
    For i = 0 To Val(Outline) - 1
        Print #1, msg
        Application.StatusBar = "Write " & (i + 1) & " line."
    Next
    Application.StatusBar = False

    Close #1

    ed = Now()

    MsgBox "開始 " & st & vbCrLf _
         & "終了 " & ed & vbCrLf _
         & "size " & FileLen("testData.txt")

End Sub

マクロの実行で実行します。 10万行 x 100文字と、1,000行 x 1万文字で速度を比較します。

まずは10万行 x 100文字で実行してみます。

処理時間は5秒でした。

1行100文字 + 改行2バイト = 102バイト x 10万行 = 10,200,000でサイズは正しいです。

続いて1,000行 x 1万文字で実行してみます。

処理時間は1秒でした。

1行1万文字 + 改行2バイト = 10,002バイト x 1,000行 = 10,002,000でサイズは正しいです。

処理時間に4秒差が出ました。

出力する量を増やして実行してみます。

100万行 x 100文字と、1,000行 x 10万文字で速度を比較します。

100万行 x 100文字で実行してみます。

処理時間は58秒でした。

1行100文字 + 改行2バイト = 102バイト x 100万行 = 102,000,000でサイズは正しいです。

続いて1,000行 x 10万文字で実行してみます。

処理時間は14秒でした。

1行10万文字 + 改行2バイト = 100,002バイト x 1,000行 = 100,002,000でサイズは正しいです。

処理時間に44秒差が出ました。 同じ文字数でも行が少ない方が処理が早いようです。

ひょっとしたら行ではなく、Print関数の呼び出し回数が問題かもしれないので、出力するデータの改行の数を合わせてテストしたら結果が変わるかもしれません。

▲ PageTop  ■ Home


Copyright (C) 2017 ymlib.com