Entering Passive Mode

カテゴリ 'VBA, VB Classic' の記事
< 1 2 3 4 5 >

ArrayList #3: インデクサ

インテリセンス

さて、これで通常のメソッドは全て実装した。
最後に ArrayList で最も重要な機能を実装する。

ArrayList が配列同様に振舞うためには、
配列アクセス(インデックス)表記が必要となる。
そのような機能を持つメソッドをインデクサと呼ぶ。

VBA にインデクサそのものは存在しないが、
COM 由来のプロシージャ ID と言う属性があり、
その中に「既定」という属性がある。

ArrayList #2: 値型と参照型

昨日の続き。要素の追加をやろう。

ArrayList は可変長であるため、
要素数を決め打つことはできず、
必要に応じて拡張していく必要がある。

そのため要素の追加でやることは 2 つ。
・必要に応じて容量を拡大する
・内部配列に要素を格納する

このうち容量を拡大するのは、専用のメソッド
EnsureCapacity() で行うのでそれを先に作成する

ArrayList: 可変配列ラッパ

VBA の配列は少し癖があり、関数の戻り値として使用すると、
値のコピーが発生してしまうため、
参照型として利用できる配列が欲しい。

昨日定義したインタフェースには、
ArrayList というクラスが戻り値として存在した。
これは可変配列の参照型ラッパの機能を持つクラスである。

今日はこれを作ってみよう。

まず、必要なメソッドを洗い出す。

プログラムから見た問題

ののぐらむ

プログラムでパズルを解くためには、
解答欄のサイズだけでなく、ヒントを得る必要がある。
Excel のシートの表記では、人間には便利だが、
プログラム的にはちょっと扱いにくい。

プログラムでは、ヒント数値が配列になっている方が良い。
また、ヒントもいちいちワークシートを探索すると大変だ。
専用のクラスを作って格納しておくほうがいいだろう。

ということで、問題を読み込むためのクラスを設計する。
まずは、ののぐらむの持つ要素を考えてみよう。

入り口のインタフェース

Excel は縦横にセルが並んだワークシートを持つ。
ののぐらむなどには丁度いい構造をしているため、
問題は容易にワークシート上に入力することができる。

まず最初に設計する必要があるのは、
Excel からプログラムを実行する入り口だ。

いろんな問題に対応できるようにするため、
プログラムの起動はマクロの実行から行ないたい。
マクロには引数が渡せないため、
問題の解答欄の範囲を選択してから呼び出す決まりにしよう。

ののぐらむ

最近の本屋やコンビニには、物凄い量の雑誌がある。
昔はこんなにあったかなって思うぐらい。

その中でも、パズルというジャンルの雑誌が目に付いた。
パズルと言えば、小学生の頃、パズル本を買って、
必死に解いていたのを思い出す。
確か、「ニコリ」という会社が出版していたような。

何か懐かしくなって、どんな雑誌があるか見てみた。
古くからあるクロスワードや、数理パズル、
そして、結構目立つのが、ののぐらむだ。

< 1 2 3 4 5 >
このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS