
Public Sub Test(SourceRange As Range, TargetRange As Range)
Dim ResultArray() As Variant
' ここから
' ここまでに該当処理
TargetRange = ResultArray
End Sub
2次元配列について
ReDimで大きな配列を作って1行ずつ代入してからセルに貼り付けるのと、
ReDim Preserveで配列を1行ずつ少しづつ追加してからセルに貼り付けるのと、
5000×5000くらいだとどちらが速いですか?
私のPCだと性能不足で測定困難です。
代わりに試して頂けると助かります。
No.2ベストアンサー
- 回答日時:
VBA(MicrosoftのBasic)でRedimすると、配列を増減するのではなく、新たな場所に新しい大きさのメモリを確保して、配列の参照先を変えます。
今までの配列の本体は参照元が無くなるので、空いた時間に削除されます。
ReDim Preserve は、既存のデータをコピーするので、更に時間がかかります。
なので、頻繁にReDim Preserveすると、メモリの確保とデータのコピーと不要になった配列の掃除のために大忙しになるので、やめた方がいいと思います。
これは文字列の追加でも起こるので、文字列の追加も気を付けた方がいいと思います。
それとVariantはどの型になるか不明なので、1データ16バイトの大きさが必要です。
普通の変数ならあまり気にする必要はありませんが、大きな配列だと、不要にメモリを消費します。
ReDim Preserveも要素数が同じでも他の型の変数と違って、大きなメモリのなるので時間がかかる可能性が高くなります。
例えばIntegerなら2バイトなので、必要なメモリは1/8になり、速度も上がります。
ただし、今のExcelは32ビットで動いているのでLongの場合メモリは1データ4バイト必要ですが、全体の処理は速いかもしれません。
とりあえず、Redimは出来るだけしない方がいいと思います。
ReDim Preserveは更に時間がかかります。
ReDim Preserve って追加だけじゃなくぜんぶコピーしてるんですね。存在意義がよく分からないですね、どう使い分けたら良いのでしょう?
No.1
- 回答日時:
こんばんは。
一応、試さないで何かを言うのは失礼だから試してはみたものの、
実際、どんなコードを予想していらっしゃるのかしら?
>ReDimで大きな配列を作って1行ずつ代入してからセルに貼り付けるのと、
セル一つのデータを一つのインデックスに入れました。
>ReDim Preserveで配列を1行ずつ少しづつ追加してからセルに貼り付けるのと、
>5000×5000くらいだとどちらが速いですか?
比べる必要などはないと思うのです。
Redim Preseve とはいっても、1次側を固定しなければならないし、それでも、遅いのに決まっています。何分経ったか、20分は過ぎていますね。いえ、ハングしてしまいました。
>私のPCだと性能不足で測定困難です。
こちらのPCのスペックは悪くありませんよ。PCは、第6世代だったと思います。それに、Excel2013がネックということもないでしょう。
予め Redim xArray(5000,5000)
なら、73.543 s
Redim Preseve xArray(....
計測不能。途中でハング
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でbyte配列から画像を表示さ...
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
-
構造体配列内の文字列検索のよ...
-
Dir関数で読み取り順を操作でき...
-
VB.NETの配列にExcelから読み込...
-
エクセル VBA 変数を一括で宣言...
-
レコードセットの中身を配列に...
-
VBAでMODE関数をつくる
-
Excelのメモリ(配列)の上限は2G...
-
配列のペースト出力結果の書式...
-
C#で作成したdllをVBScriptで使...
-
構造体配列の特定のメンバーをF...
-
VBScriptでCSVファイルを読み出...
-
コンボボックスのインデックス...
-
デバイスマネージャーの一覧取得
-
大量の変数を定義するにはどう...
-
Redim とEraseの違いは?
-
配列の中の最大値とそのインデ...
-
定数配列の書き方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
Excel2010のinputboxで複数デー...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
VBAでMODE関数をつくる
-
Redim とEraseの違いは?
-
VBScriptでCSVファイルを読み出...
-
VB6のメモリ解放に関して
-
VB.NETの配列にExcelから読み込...
-
Segmentation Fault (メモリ制限?)
-
ActiveReports(アクティブレポ...
おすすめ情報