Peter Albertが提示したエレガントな回答に関しては、WorksheetFunctionのTranspose関数には昔ながらの制限がいくつかあります。具体的には、反転できる要素の上限は 65,535 (最大符号なし整数 -1) です。バリアント配列を一括で読み込み、「メモリ内」で処理し、その後変更された値をワークシートに返すことで、その制限を克服できます。
Sub test()
With Worksheets("Sheet1")
makeUpper .Range("A2:A1000000")
End With
End Sub
Sub makeUpper(rng As Range)
Dim v As Long, vUPRs As Variant
With rng
vUPRs = .Value2
For v = LBound(vUPRs, 1) To UBound(vUPRs, 1)
vUPRs(v, 1) = UCase(vUPRs(v, 1))
Next v
.Cells = vUPRs
End With
End Sub
これは非常に迅速に処理されます。通常、100K セルのデータは 0.5 秒未満で処理され、1M セルは 4 ~ 6 秒で変換できます。
これは、 Application.Selectionプロパティでセルを操作することでメリットが得られるサブ プロシージャのタイプです。選択内のセルを処理する定型フレームワークについては、この回答を参照してください。