そこで、配列を定義するために最大値を取得する必要がありますが、
最大値を取得するのは、絶対の話ではないですね。
ExcelVBA
1Sub test()
2 Dim Rng As Range
3 Dim vrtValues As Variant
4 Dim i As Long, j As Long
5
6 Set Rng = ActiveSheet.UsedRange
7 vrtValues = Rng.Value
8
9 For i = 1 To UBound(vrtValues, 1)
10 For j = 1 To UBound(vrtValues, 2)
11 vrtValues(i, j) = vrtValues(i, j) & "a"
12 Next
13 Next
14
15 Rng.Value = vrtValues
16End Sub
6万行x300列で試したら
セルへの書き込みのところ
Rng.Value = vrtValues
でメモリ不足のエラーになりました。
まぁ、何回かに分けて作業すればいいんでしょうけど。。。。
というか、他人の意見を聞くよりも
自分で実験して体感した方がいいかと思います。
その方がより身に付くかと。
その上で、もっとより良い方法があるのかを質問して、
色々な問題へのアプローチの仕方(=知識)を身に付けてみてはいかがでしょうか?
Set Rng = ActiveSheet.UsedRange.Resize(25000)
こちらの環境では、300列x25000行くらいならなんとかメモリー不足にならないかも?
何をしたいかわかりませんが、高速化が主目的なら、
エクセルの機能で出来ることをわざわざVBAでループ処理したりしたら、
ほぼほぼ遅くなります。
ExcelVBA
1Sub test2()
2 Dim r As Range
3 Dim v
4 Dim i As Long
5 Dim t
6
7 t = Timer
8
9 Set r = ActiveSheet.Range("A:A")
10 v = r
11
12 For i = 1 To UBound(v, 1)
13 v(i, 1) = i
14 Next
15
16 r = v
17
18 MsgBox Timer - t & "秒"
19End Sub
20
21Sub test3()
22 Dim t
23
24 t = Timer
25
26 With ActiveSheet.Range("A:A")
27 .Item(1) = 1
28 .DataSeries
29 End With
30
31 MsgBox Timer - t & "秒"
32End Sub
33
その辺は臨機応変にバランスよくトライしてみてください。
処理速度は、マシンパワーやバージョン等環境にも左右されます。
「こういう時はこうやる」的な暗記だけだと、ちょっと辛いです。
こちらの環境では、
Test2は約2秒
Text3は約0.4秒
でした。
変数の型の違いのメモリの使用量はエクセルがすんなり動くなら気にしなくてもいいと思います。
ただし、エクセルが使えるメモリの量は決まっているので、
ハード的に増やしてもメモリ不足は解消できません。
※最近のバージョンはまた仕様が変わっているかもです。
興味があるならご自分で調べてみてください。(こちらは興味がないので^^;)
検索が上手になるのもスキルのうちです。