0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBAは配列一択

Posted at

Excelはセル、一つ一つに直接書き込むのは非常に遅いです(少ない読み書きなら気にならないですが)
VBAのループ処理で行えば数十秒かかる事も、
テーブルの列のセル一つに手入力で数式を書いてEnterを押せば構造化参照で一瞬の内に計算が完了します(コンマ何秒)。

つまり私たちがそれぞれのセルに読み書きをするのは非常に遅いです
が、
Excelの関数は計算を配列なのか、はたまたC++で処理をしているのか分かりませんが、
計算結果を数式の範囲に一気に貼り付けるのはコンマ何秒の世界で、非常に高速です。


Dim 配列 as Variant
配列 = Range("テーブル名")

または
配列 = Range(アドレス)

たったこれだけです。

配列の値を取得する時に.Valueは入りません。

あとは配列をCellsと全く同じ操作感で処理をしてください。
セルの範囲を取り込んだ時、配列は1始まりなので安心してください。

行の最大値はテーブルならば

Range("テーブル名").Rows.Count
あるいはUbound(配列,1)

で最大行数が取得できます。
もうCells(Rows.Count,1).End(xlup).Row(しかもたった行番号を取得するだけ)は入りません。必要ないです。


配列の集計結果を貼り付けたい時は
テーブルならば
Range("テーブル名") = 配列
もしテーブルの行がない、少ない場合は念の為に
テーブルの範囲をリサイズするか、あるいは
Range("テーブル名").Resize(Ubound(配列,1),列数).Value = 配列

それか
Range(貼り付けたい所) = 配列

で貼り付けてください

以上
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?