[解決済み] Redimを使用して配列のデータ型を設定する
質問
最初に配列を作成するとき、データ型を設定するのが一番良いのは分かっていますが、デフォルトの
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
は、サイズを指定せずに配列を作成できますか?
uninitializedを取得します。 動的なサイズの配列 : VBAはメモリに場所を確保します。P-Codeをリバースエンジニアリングしない限り(そもそもコンパイルされたP-Codeを抽出できると仮定して)、それがどのように機能するかはMicrosoftだけが知っている内部配管なのです。
両方
Dim
と
ReDim
可
は宣言文として機能します。
べきである
- から
MSDN
(強調)。
ReDim文は、それが宣言する変数がモジュールレベルやプロシージャレベルに存在しない場合、宣言文として機能します。同じ名前の別の変数が後から作られた場合、たとえOption Explicitが有効であっても、ReDimは後の変数を参照し、必ずしもコンパイルエラーを引き起こさない。このような衝突を避けるために ReDimは宣言文としてではなく、単に配列の寸法を変更するために使用すべきです。 .
と言われたとき。
それとも、2番目の選択肢の方が2行ある分、実は遅いのでしょうか。
を忘れていませんか?
Dim
は実行可能なステートメントではありません(ブレイクすることはできません)。
Dim
ステートメント)。
ReDim
がありますが。ですから、両方の "options" は、ランタイムに関する限り、最初のもの (quot;option")を除いて、本質的に同じです。
ReDim
を宣言文として使用することは、ベストプラクティスに反しています。
したがって、動的配列が必要な場合は、動的配列を
Dim
:
Dim foo() As String
そして、サイズを変更する必要があるときは
ReDim
を実行します。
ReDim foo(1 To bar)
経験則から言うと、以下のようなことは気にする必要はないでしょう。
Dim
よりも効率的です。
ReDim
もし、あなたのコードにパフォーマンスの問題がある場合、99.99999997%の確率で、問題はあなたのアルゴリズムにあり、VBAが変数や配列の割り当てをどのように実装したかにあるわけではありません。
関連
-
[解決済み] Redimを使用して配列のデータ型を設定する
-
[解決済み] コンパイルエラーです。End If without block If
-
[解決済み] VBA RangeクラスのSortメソッドに失敗しました。
-
[解決済み] .docx、.pptxなどの正しいMIMEタイプは何ですか?
-
[解決済み] VBA チャートのタイトルを追加する
-
[解決済み] エクセルVBAの検索文字列 : エラー2015
-
[解決済み] VBAでファイルを削除する
-
[解決済み] どのようにvbaコードCells.FindによってExcelの列で値を見つけるために
-
[解決済み】Office VBA Editorでコードのブロックにコメントやアンコメントを付ける方法
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エクセルVBA。一致しない、エラー "WorksheetFunctionクラスのMatchプロパティを取得できない"
-
[解決済み] プロパティの無効な使用 vba クラス
-
[解決済み] VBAです。IfエラーにならないElse
-
[解決済み] オートメーションエラー - 大惨事 EXCEL VBA
-
[解決済み] VBA チャートのタイトルを追加する
-
[解決済み] エクセルVBAの検索文字列 : エラー2015
-
[解決済み] コンパイルエラーです。Forがない場合は次へ|VBA
-
[解決済み] <>とはどういう意味ですか?
-
[解決済み] FormulaR1C1 の機能は何ですか?
-
[解決済み] VBAで関数から配列を返す