エクセルの入力できる行列数が、飛躍的に増えたのを知りませんでした。
65,536行と256列が限界だと思っていたのですが、それはオフィス2003まで。
オフィス2007以降は、1,048,576行と16,384列まで驚異的に増加しております。
ですが、こんなにデータを入力してブックを作った人は、まずいないでしょう。
ならば、実験だと思い立ちましたが、方向キーを押し続けるのも非科学的です。
ユーチューブでは、最終行にたどり着くまで、9時間掛かった動画に驚きました。
なお、最終列はXSDで、最終行X最終列で、セル数は17,179,869,184になります。
つまり、はるか先の171億セル目に到達するは、単純な移動では無理でしょう。
なので、マクロを組んで一っ飛びに最終セルを指し示すコードを書いてみました。
非常に簡単なコードでして、VBエディターで走らせて見ると結果はあっけない。
Private Sub test()
Cells(1048576, 16384).Select
ActiveCell.Value = "最終セル"
End Sub
エクセルのウインドウでは、それ以上のセルが表示され無いのも当り前なんだ。
まあ、オフィス2010で確かめましたが、ならばどこまでセルに書き込めるのか。
それで、6桁の乱数を生成しながら、全てのセルに書き込むコードを作りました。
これを動かしてみたのですが、一時間を経過しても結果が出ず、ちょっとこわい。
結局、タスクマネージャでエクセルを強制終了して、書き込むセルを少なくします。
ダウンサイジングで、一億セルなら何とかなると思って作ったのが、このコード。
Sub ボタン1_Click()
Dim StartTime, StopTime As Variant
Dim intValue, intUpper, intLower
Dim rng As Range
Application.ScreenUpdating = False
'ここから実行時間のカウントを開始します
StartTime = Time
For Each rng In Range("A1", Cells(10000, 10000))
'一万の行と列の升目を範囲とする
intUpper = 999999
intLower = 100000
'intValue には、範囲内の乱数が入ります。
intValue = Int((intUpper - intLower + 1) * Rnd + intLower)
rng = intValue
Next
Application.ScreenUpdating = True
StopTime = Time
StopTime = StopTime - StartTime
MsgBox "所要時間は" & Minute(StopTime) & "分" & _
Second(StopTime) & "秒 でした"
End Sub
自作というよりネットで紹介されていたコードを拝借して、でっち上げて見ました。
重要なのは、セルに書き出す画面更新を止めて、最後に一挙に書き込みます。
これで、かなり処理時間の短縮につながりますので、いざ、決行してみました。
うーん、待てども待てども処理が終わりませんでしたが、何とか終了ですな。
それが冒頭の画像で、所要時間として掛かったのは、39分7秒になりました。
これを秒数にすると2,347になり、これを一億で割ると、42,608個と出ます。
つまり、CPUは一秒間に6桁の乱数を、こんなにも大量に生成しておるのです。
まあ、昨今のPCは、CPUもメモリーも性能が格段にアップしたからできるのだ。
では、マイクロソフトは、どうして百七十億のデータを格納できるとしたのか。
思うに、シュミレーション計算の解をメモリーに配列で格納するのではないか。
あえてセルに書き込まず、メモリー上に溜め込んでから最適解を求めるのです。
つまり、視覚的なシートの出力は、最終的な仕上がった内容でしかありません。
こうなると、科学計算では、エクセルで十分な使い道があるのかもしれません。
というわけで、単純にデータを書くのなら一億セルぐらいは何とかなりました。
一方、これぐらいのデータになりますと、ワークシートに計算式や、背景色、罫線、フォント装飾など、メモリーを食いそうな設定は遠慮せざるをえなくて、するとしたらビジュアルベーシックでコードを書き込むのが無難だと思いますが、何れにせよ、こんな大きなデータを目で見て使う用途が、個人の業務範囲で一体あるのだろうかと、思ってしまったのでした。
おまけ:
使ったPCのスペックは、下記の通りです。
CPU:PhenomII X4 965 (クロック3.4GHzノーマル使用)
メモリー:8GB
SSD:120GB(SATA II クラス)
マザーボード:AsRock 880GM-LE
OS & Office Ver.:Windows7(英語版64ビット) / Office2010(英語版)
※だいぶ古いスペックですが、十分に今でも使えています。
いいねと思ったら、二つポチっとね!
0 件のコメント:
コメントを投稿