-1

私は現在、Microsoft Excel と連携するレポート スイートを開発しています。私が主に使用した言語は、Java、Perl、および Python です。私は自分自身を初心者プログラマーと考えています。私が VBA を使用することを選択した唯一の理由は、Microsoft Office 拡張機能をプログラミングする場合に使用するのに最適な言語として提案されたからです。

これらのことを考慮すると、VBA で配列が実行される方法は絶対に嫌いです。具体的には、配列を動的に拡張するのではなく、配列のサイズを定義する必要があります。

Redim を使用せずに動的配列を作成するにはどうすればよいですか? これは明らかにリソースを大量に消費するため、これを回避しようとしています。

私が見つけた唯一の解決策は、単一のループを使用している場合です。これにより、要素の数をループの上限と等しくなるように設定できます (カウント 1 の反復を想定)。

単一のループを使用しておらず、これがオプションでない場合はどうすればよいですか?

リディミングは避けられませんか?

4

2 に答える 2

4

これは「配列」ではありませんが、VBA にはニーズに合ったDictionaryオブジェクト (このリンクも役立ちます) があります。への参照を追加する必要がありますが、動的に拡張できる型指定されMicrosoft Scripting Runtimeていないキー付きディクショナリ (実際にはItemプロパティは です) を作成できます。Variantリンクにはより完全な例がありますが、基本的な使用方法は次のとおりです。

Set dict = New Dictionary

'Example for adding item to Dictionary
For i = 1 to 100
    dict.Add Key:=i, Item:=someData
Next

'Example for retrieving item from dictionary by Key
For i = 1 to 100
    Debug.Print dict(i)
Next

Collection同様の機能と同様の使用法を提供するオブジェクトもありますが、 への参照を追加する必要はありませんが、特定のキーが存在するかどうかを確認するなど、より便利なメソッドをいくつか提供しますMicrosoft Scripting Runtime。また、すべてのアイテムまたはキーを型付き配列として抽出できるようにするプロパティもあります。Dictionarydict.Exists().Keys.ItemsDictionaryVariant

配列を redim したくないと明示的に述べたとしても、作成後に配列のサイズを調整する他の唯一の方法はPreserve、redim ステートメントで修飾子を使用することです。これにより、作成後に配列のサイズを柔軟に変更できるようになります。「ある程度の柔軟性」と言った理由は、配列の最後の次元しか変更できないからです。

Dim myarray(2, 2)
Redim Preserve myarray(2, 4) 'this works
Redim Preserve myarray(3, 4) 'this is not allowed

あなたが言及したように、実際には配列のサイズを変更していないため、これはリソースを集中的に使用します。実際には、新しい配列を作成し、古い配列の内容をコピーしているだけです。

最後のオプションは、VBA から .NET に切り替えることです。適切なバージョンの Visual Studioを自由に使用できると仮定すると、Office に付属している VBA エディターの代わりにVSTOにアクセスできるようになり、Excel やその他の Office 用の CLR 準拠のアドインを開発できるようになります。製品。これで、すべての .NET コレクションにアクセスできるようになります。繰り返しますが、.NET 配列にも同じ制限がある (サイズを変更できない) ため、これらは「配列」ではありませんが、必要に応じてコレクションのサイズを動的に変更できます。

于 2012-11-28T14:03:57.090 に答える