Range()をなるべく使わない
通常は問題ありませんが、ループなどでセルの読み書きを行う場合は Range > Cells > Offset のようです。 それぞれ3回ほど実行して計測してみました。
※計測値はPCの環境に影響しますので、参考値としてとらえてくださいね♪
サンプル1 Range 35秒
Public Function ColString(ByVal Col As Integer) As String ' 列番号(1,2...)をExcelの列番号(A,B...)に変換して返す ' Col : 数値の列番号 ' Dim iDiv As Integer Dim iMod As Integer iDiv = Col \ 26 iMod = Col Mod 26 If iMod = 0 Then iDiv = iDiv - 1 iMod = 26 End If If iDiv = 0 Then ColString = "" Else ColString = Chr(&H40 + iDiv) End If ColString = ColString & Chr(&H40 + iMod) End Function
Dim intM As Integer, intC As Integer For intM = 1 To 1000 For intC = 1 To 100 ' "A1"の文字列に変換 ActiveSheet.Range(ColString(intC) & CStr(intM)) = (intM - 1) * 100& + intC Next Next
サンプル2 Cells 32秒
Dim intM As Integer, intC As Integer For intM = 1 To 1000 For intC = 1 To 100 ActiveSheet.Cells(intM, intC) = (intM - 1) * 100& + intC Next Next
サンプル3 Offset 31秒
Dim intM As Integer, intC As Integer With ActiveSheet.Cells(1, 1) For intM = 1 To 1000 For intC = 1 To 100 .Offset(intM - 1, intC - 1) = (intM - 1) * 100& + intC Next Next End With