機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > VBA高速化テクニック

余計なことはしない



セルのフォントを「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

※は、Excel 2007で追加されたプロパティですから、Excel 2003では記録されません。

さて、なるほどフォントを「MS P明朝」に設定するには、こうすればいいのか・・・と、この記録されたコードをそのまま使ってはいけません。マクロ記録で記録されたコードは、そこに何が書かれているかを読まなければなりません。よく見てください。このコードは何をしていますか?もちろん、フォントの種類を「MS P明朝」に設定していますが、それ以外にも、文字サイズを11にして、取消線を表示しないに設定して、上付きにしないと設定して、下付きにもしないと設定して・・・もちろん、ここで使われているプロパティをすべて設定したいのならいいですが、そうではなく、フォントの種類を「MS P明朝」にしたいだけなら、文字サイズも、上付き文字の設定も、下付き文字の設定も不要じゃありませんか。

マクロ記録はこのように、自分が操作したこと以外の設定も記録します。これらは、[セルの書式設定]ダイアログボックスで設定できる項目です。



たとえば、このダイアログボックスで、1ヶ所だけ変更して[OK]ボタンをクリックするということは、変更しなかった項目も「今までと同じ設定をする」ということになります。今回の操作はリボンでやりましたけど、Excelの内部では「セルの書式設定」ダイアログボックスの[OK]ボタンがクリックされたときと同じ処理が行われるのでしょう。いずれにしても、マクロ記録したコードを、まったく何も考えず、そのまま使っていると、こういうことになりますね。マクロ記録は「調べる機能」です。記録されたコードを精査して、内容を理解して、自分の処理に必要な部分だけを編集して追加するものです。

検証するまでもありませんが、一応やってみましょうか。

Sub Test1()
    Dim i As Long
    For i = 1 To 2000
        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 2000
        Cells(i, 2).Font.Name = "MS P明朝"
    Next i
End Sub

Test1 Test2 %
1回目  1.62 秒  0.21 秒  13.2% 
2回目  1.61 秒  0.21 秒  13.0% 
3回目  1.60 秒  0.21 秒  13.0% 
4回目  1.61 秒  0.21 秒  12.9% 
5回目  1.61 秒  0.21 秒  13.3% 
6回目  1.61 秒  0.21 秒  12.9% 
7回目  1.60 秒  0.21 秒  13.3% 
8回目  1.60 秒  0.21 秒  13.1% 
9回目  1.61 秒  0.21 秒  13.3% 
10回目  1.61 秒  0.20 秒  12.6% 
平均  1.61 秒  0.21 秒  13.1% 

これはもう、高速化とかというレベルではありませんね。わざわざ遠回りしているようなものですから。



このエントリーをはてなブックマークに追加