これも、マクロ記録で記録されたコードを、そのまま使うことによる弊害ですね。試しに、セルのフォントを「MS P明朝」に変更する操作を、マクロ記録してみましょう。
リボンやツールバーから操作すると、次のようなコードが記録されます。
Sub Macro1() With Selection.Font .Name = "MS P明朝" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With End Sub
さて、なるほどフォントを「MS P明朝」に設定するには、こうすればいいのか・・・と、この記録されたコードをそのまま使ってはいけません。マクロ記録で記録されたコードは、そこに何が書かれているかを読まなければなりません。よく見てください。このコードは何をしていますか?もちろん、フォントの種類を「MS P明朝」に設定していますが、それ以外にも、文字サイズを11にして、取消線を表示しないに設定して、上付きにしないと設定して、下付きにもしないと設定して・・・もちろん、ここで使われているプロパティをすべて設定したいのならいいですが、そうではなく、フォントの種類を「MS P明朝」にしたいだけなら、文字サイズも、上付き文字の設定も、下付き文字の設定も不要じゃありませんか。
マクロ記録はこのように、自分が操作したこと以外の設定も記録します。これらは、[セルの書式設定]ダイアログボックスで設定できる項目です。
たとえば、このダイアログボックスで、1ヶ所だけ変更して[OK]ボタンをクリックするということは、変更しなかった項目も「今までと同じ設定をする」ということになります。今回の操作はリボンでやりましたけど、Excelの内部では「セルの書式設定」ダイアログボックスの[OK]ボタンがクリックされたときと同じ処理が行われるのでしょう。いずれにしても、マクロ記録したコードを、まったく何も考えず、そのまま使っていると、こういうことになりますね。マクロ記録は「調べる機能」です。記録されたコードを精査して、内容を理解して、自分の処理に必要な部分だけを編集して追加するものです。
検証するまでもありませんが、一応やってみましょうか。
Sub Test1() Dim i As Long For i = 1 To 5000 With Cells(i, 1).Font .Name = "MS P明朝" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With Next i End Sub
Sub Test2() Dim i As Long For i = 1 To 5000 Cells(i, 1).Font.Name = "MS P明朝" Next i End Sub
回 | test1 | test2 | % |
---|---|---|---|
1 | 4.656 | 0.734 | 15.8% |
2 | 5.563 | 0.734 | 13.2% |
3 | 4.500 | 0.719 | 16.0% |
4 | 4.688 | 0.719 | 15.3% |
5 | 4.453 | 0.734 | 16.5% |
6 | 4.453 | 0.719 | 16.1% |
7 | 4.437 | 0.719 | 16.2% |
8 | 4.937 | 0.734 | 14.9% |
9 | 4.532 | 0.797 | 17.6% |
10 | 4.500 | 0.781 | 17.4% |
平均 | 4.672 | 0.739 | 15.9% |
これはもう、高速化とかというレベルではありませんね。わざわざ遠回りしているようなものですから。このように、マクロ記録したコードを読みもせず、ひたすら無駄なことを繰り返して、それでいて「田中さん、マクロが遅いんですけど、ウルトラテクニックで速くなりませんか?」とか言われるとガクッときます。