配列を最初に作成するときは、データ型を設定するのが最善であることがわかっています。デフォルトのVariant
型は遅いため、VBAでは回避するのが最善です。
私はそれに気づきます
Redim t(1 To 10) As String
と同じ効果があるようです
Dim t() As String
Redim t(1 To 10)
しかし、私は疑問に思います。最初のオプションは最初にキャストさt()
れてVariant
から変換されString
、二重書き込みでメモリを浪費しますか?または、2行目のため、2番目のオプションは実際には遅くなります。Dim
サイズを指定せずに配列を作成すると、メモリ内で実際に何が起こりますか?
もちろん
Dim t(1 To 10) As String
最も効率的なものとして出くわしRedim Preserve
ますが、とにかく後でそれをする必要があるので、それを行うことはできません。
Dim
サイズを指定せずに配列を作成すると、メモリ内で実際に何が起こりますか?
初期化されていない動的なサイズの配列を取得します。VBAはメモリ内に「スポットを予約」します。それがどのように機能するかは、Microsoftだけが答えを持っている内部配管です-Pコードをリバースエンジニアリングできない限り(最初にコンパイルされたPコードを抽出できると仮定して)。
両方Dim
とReDim
することができ、宣言文として機能すること-彼らの両方を意味するものではありませんべき-からのMSDN(強調鉱山):
ReDimステートメントは、宣言する変数がモジュールレベルまたはプロシージャレベルに存在しない場合、宣言ステートメントとして機能します。同じ名前の別の変数が後で作成された場合、より広い範囲であっても、ReDimは後の変数を参照し、Option Explicitが有効であっても、必ずしもコンパイルエラーを引き起こすとは限りません。このような競合を回避するには、ReDimを宣言型ステートメントとして使用するのではなく、単に配列のサイズを変更するために使用する必要があります。
あなたが言う時:
または、2行目のため、2番目のオプションは実際には遅くなります。
それDim
が実行可能ステートメントではないことを忘れています(ステートメントを中断することはできませんDim
)。ReDim
しかしです。したがって、両方の「オプション」は、ランタイムに関する限り、基本的に同じです。ただし、最初の「オプション」(ReDim
宣言型ステートメントとして使用)がベストプラクティスに反している点が異なります。
したがって、動的配列が必要な場合は、次のように動的配列を宣言してDim
ください。
Dim foo() As String
そして、サイズを変更する必要がある場合は、次のように使用ReDim
します。
ReDim foo(1 To bar)
経験則として、Dim
より効率的かどうかReDim
、またはその逆かどうかを心配する必要はありません-コードにパフォーマンスの問題がある場合、問題はVBAの方法ではなく、アルゴリズムにある可能性が99.9999999997%あります。変数と配列の割り当てを実装しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加