配列代入は早い?

2019年9月25日

たしかに、シートを直接操作すると持っているプロパティを一緒に操作することになるので、配列で操作してから一回だけ代入する書き方をしたほうが早いのは間違いないのですが、マクロの可読性では、シートを直接操作したほうが煩雑にならずに分かりやすいです。処理速度と分かりやすさのトレードオフになります。

そもそも、EXCELはGUIソフトなので、表示のための仕組みを多く抱えていて、そのために遅くなります。なので、その工程を回避すれば早くできます。 しかし、昨今のパソコン性能の向上や、誰でもプログラミングの時代になってきたことからすると、あまり速度を早くすることにこだわるよりも、誰でも理解できるという視点でマクロ を書くのもひとつの見識ではないでしょうか?

'都道府県データの配列から直接シートに書き出した場合
n = 0
For Each キー In 都道府県並び順
    If (男.Item(キー) > 0) Then
        n = n + 1
        ThisWorkbook.Sheets("結果").cells(n,1) = キー
        ThisWorkbook.Sheets("結果").cells(n,2) = "男性"
        ThisWorkbook.Sheets("結果").cells(n,3) = 男.Item(キー)
    End If
Next キー

上は、直接シートに書き出す例です。

'都道府県データの配列から一旦「主配列」に書き出して転記した場合
n = 0
For Each キー In 都道府県並び順
    If (男.Item(キー) > 0) Then
        n = n + 1
        主配列(1, n) = キー
        主配列(2, n) = "男性"
        主配列(3, n) = 男.Item(キー)
    End If
Next キー
'★主配列から表に書き出し
ThisWorkbook.Sheets("結果").Range(.Cells(1, 1), .Cells(n, 3)) = WorksheetFunction.Transpose(主配列) '行列を入れ替えてシートに格納

下のほうが一旦配列に格納して転記する例ですが、上のシート直接書き出しの例よりすこし見通しが悪くなってます。この見通しの悪さをどう判断するかです。データ量が多くて時間がかかる場合に、配列で操作して最後に代入する回避策を取るという位置付けが、今どきの開発方針としては妥当ではないかと思います。

開発Tips

Posted by sysvba