EXCELのセルを埋めつくす実験

万年筆

EXCELのバージョン : EXCEL2010
マシン : Dell bostra 230 / 4GM / Windows7 pro

実験の方法 : ひたすらセルにデータを書き込んでみる

事前の調査としてVBAでループを回しセルには1,2,3と順番にループカウンタの値を書き込めることを確認する。

実行時間:約30秒
結果:正常終了。1048576行目まで書き込まれたことを確認。

Sub lineTest()
    Dim i As Long
    i = 1
    Do While i <= 1048576
        Cells(i, 1).Value = i
        i = i + 1
    Loop
End Sub

次に列方向にループを回して最後まで値を書き込めることを確認する。

実行時間:5秒
結果:正常終了。XFDセル(16384列目)まで書き込まれたことを確認。

Sub ColumnTest()
    Dim i As Long
    i = 1
    Do While i <= 16384
        Cells(1, i).Value = i
        i = i + 1
    Loop
End Sub

いよいよ本番です。上の行から順番に”0″を埋めていって、最期のセル(1048576,16384)まで書き込めるか実験です。
注意:実行には長い時間がかかります。強制終了の方法は。Ctrlキーを押しながらPauseキー押します。 「Esc」または「Ctrl」+「Break」で処理を中断させる事ができます。

Sub FullTest()
    Dim i As Long
    Dim j As Long

    StartTime = Time
    For i = 1 To 1048576
        For j = 1 To 16384
            Cells(i, j).Value = 0
        Next j
    Next i
End Sub

実行時間:約2時間30分
結果:異常終了。約2時間後にリソース不足エラー。
リソース不足エラー画面
データの埋まったセルは13263行目XFD列目(最終の16384列目)まで。パソコンを再起動したり、EXCEL以外のアプリを終わらせたりして試しましたが、すべてのセルを埋めることは出来ませんでした。

全てのセルには値を入れることはできないかった。使用するセルの数の制限があるのだろうか。それなら、さっきの実験では1行目から書いたが、1万行目から書き始めたら、13263行+10000行で23263目まで実行できるはず。更に実験してみる。

For i = 10000 To 1048576

実行時間:40秒
結果:終了。12329セル(16384列目)まで書き込まれたことを確認。どういう規則性があるのか不明。

<まとめ>
結論としては全てのセルを入力することはできなかった。VBAではなくコピペしても同じだった。データ量がある程度多くなると急にexcelの動作は不安定になる(応答しなくなる)。そしてどのくらい量を安全とするのはかは、パソコンの搭載メモリや空きリソースに影響するので一概には言えないが、数万行という単位のデータを扱うには不向きだということは言える。